Home > Back-end >  TypeError: unsupported operand type(s) for -: 'list' and 'list' when using quive
TypeError: unsupported operand type(s) for -: 'list' and 'list' when using quive

Time:07-14

I was running the code below and the following error message came up.

I saw this post which might be potentially a fix to the issue, but I wasn't understanding how this can be applied to solve my issue. Any suggestion is appreciated.

TypeError: unsupported operand type(s) for -: 'list' and 'list'

import matplotlib.pyplot as plt

x1 = [ 0.5, 0.6, 0.3, 0.2 ]
x2 = [ 0.5, 0.6, 0.3, 0.2 ]
x3 = [ 0.2, 0.3, 0.5, 0.6 ]
x4 = [ 0.4, 0.3, 0.2, 0.1 ]

y1 = [ 0.7, 0.9, 0.1, 0.2 ]
y2 = [ 0.8, 0.5, 0.9, 0.2 ]
y3 = [ 0.6, 0.9, 0.1, 0.2 ]
y4 = [ 0.8, 0.2, 0.3, 0.5 ]

deltaX1, deltaX2, deltaX3, deltaX4 = [x[1:] - x[:-1] for x in [x1, x2, x3, x4]]
deltaY1, deltaY2, deltaY3, deltaY4 = [y[1:] - y[:-1] for y in [y1, y2, y3, y4]]

line1 = plt.plot(x1, y1,'bo-',label='apple') 
line2 = plt.plot(x2, y2,'go-',label='banana') 
line3 = plt.plot(x3, y3,'ko-',label='orange')
line4 = plt.plot(x4, y4,'ro-',label='tomato') 

arrows1 = plt.quiver(x1[:-1], y1[:-1], deltaX1, deltaY1, scale_units='xy', angles='xy', scale=1)
arrows2 = plt.quiver(x2[:-1], y2[:-1], deltaX2, deltaY2, scale_units='xy', angles='xy', scale=1)
arrows3 = plt.quiver(x3[:-1], y3[:-1], deltaX3, deltaY3, scale_units='xy', angles='xy', scale=1)
arrows4 = plt.quiver(x4[:-1], y4[:-1], deltaX4, deltaY4, scale_units='xy', angles='xy', scale=1)


plt.title("Fruits")
plt.ylabel("Tastiness")
plt.xlabel("Benefit")

plt.legend(bbox_to_anchor=(1.5, 1),
           bbox_transform=plt.gcf().transFigure)


Error Message

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/var/folders/gf/pvtbdsj96cz1tv7vmn1gq7j40000gn/T/ipykernel_27948/3259319199.py in <module>
     11 y4 = [ 0.8, 0.2, 0.3, 0.5 ]
     12 
---> 13 deltaX1, deltaX2, deltaX3, deltaX4 = [x[1:] - x[:-1] for x in [x1, x2, x3, x4]]
     14 deltaY1, deltaY2, deltaY3, deltaY4 = [y[1:] - y[:-1] for y in [y1, y2, y3, y4]]
     15 

/var/folders/gf/pvtbdsj96cz1tv7vmn1gq7j40000gn/T/ipykernel_27948/3259319199.py in <listcomp>(.0)
     11 y4 = [ 0.8, 0.2, 0.3, 0.5 ]
     12 
---> 13 deltaX1, deltaX2, deltaX3, deltaX4 = [x[1:] - x[:-1] for x in [x1, x2, x3, x4]]
     14 deltaY1, deltaY2, deltaY3, deltaY4 = [y[1:] - y[:-1] for y in [y1, y2, y3, y4]]
     15 

TypeError: unsupported operand type(s) for -: 'list' and 'list'

CodePudding user response:

Using numpy.diff(list) should address the disered output, like this:

import numpy
import matplotlib.pyplot as plt

x1 = [ 0.5, 0.6, 0.3, 0.2 ]
x2 = [ 0.5, 0.6, 0.3, 0.2 ]
x3 = [ 0.2, 0.3, 0.5, 0.6 ]
x4 = [ 0.4, 0.3, 0.2, 0.1 ]

y1 = [ 0.7, 0.9, 0.1, 0.2 ]
y2 = [ 0.8, 0.5, 0.9, 0.2 ]
y3 = [ 0.6, 0.9, 0.1, 0.2 ]
y4 = [ 0.8, 0.2, 0.3, 0.5 ]

deltaX1, deltaX2, deltaX3, deltaX4 = [numpy.diff(x) for x in [x1, x2, x3, x4]]
deltaY1, deltaY2, deltaY3, deltaY4 = [numpy.diff(y) for y in [y1, y2, y3, y4]]

line1 = plt.plot(x1, y1,'bo-',label='apple') 
line2 = plt.plot(x2, y2,'go-',label='banana') 
line3 = plt.plot(x3, y3,'ko-',label='orange')
line4 = plt.plot(x4, y4,'ro-',label='tomato') 
  • Related