这是我写的剧情代码:
import matplotlib.pyplot as plt
Y = [ 1 , 2 , 3 ]
X = [ 1 , 2 , 4 ]
vocabulary = [1 , 2 , 3]
plt.scatter(X , Y)
for label, x, y in zip(vocabulary, X, Y):
if(label == 1):
plt.annotate('', xy=(x, y), xytext=(0, 0), color='red' , textcoords='offset points')
elif(label == 1):
plt.annotate('', xy=(x, y), xytext=(0, 0), color='green' , textcoords='offset points')
elif(label == 1):
plt.annotate('', xy=(x, y), xytext=(0, 0), color='blue' , textcoords='offset points')
else :
plt.annotate('', xy=(x, y), xytext=(0, 0), color='black' , textcoords='offset points')
plt.show()
我正在尝试根据数组vocabulary
中的值更改颜色
如果1然后将数据点着色为红色,如果2则为绿色,如果为3则为蓝色,否则将该点着色为黑色。但是对于所有点,每个点的颜色都设置为蓝色。如何根据vocabulary
的当前值
以上代码产生:
答案 0 :(得分:1)
您可以制作颜色词典并在散点图中查找,如下所示
%matplotlib inline
import matplotlib.pyplot as plt
Y = [ 1 , 2 , 3 ,6]
X = [ 1 , 2 , 4 ,5]
vocabulary = [1 , 2 , 3, 0]
my_colors = {1:'red',2:'green',3:'blue'}
for i,j in enumerate(X):
# look for the color based on vocabulary, if not found in vocubulary, then black is returned.
plt.scatter(X[i] , Y[i], color = my_colors.get(vocabulary[i], 'black'))
plt.show()
结果
答案 1 :(得分:1)
你刚做了一个副本&粘贴错误。 只是评论你的风格:你可以在使用颜色列表时避免这么多ifs,所以:
colors=[red,green,blue,black]
然后:
plt.annotate('', xy=(x, y), xytext=(0, 0), color=colors[max(3,label)] , textcoords='offset points')
你的代码必须如此,你总是写elif label=1
,这完全没有意义:
import matplotlib.pyplot as plt
Y = [ 1 , 2 , 3 ]
X = [ 1 , 2 , 4 ]
vocabulary = [1 , 2 , 3]
plt.scatter(X , Y)
for label, x, y in zip(vocabulary, X, Y):
if(label == 1):
plt.annotate('', xy=(x, y), xytext=(0, 0), color='red' , textcoords='offset points')
elif(label == 2):
plt.annotate('', xy=(x, y), xytext=(0, 0), color='green' , textcoords='offset points')
elif(label == 3):
plt.annotate('', xy=(x, y), xytext=(0, 0), color='blue' , textcoords='offset points')
else :
plt.annotate('', xy=(x, y), xytext=(0, 0), color='black' , textcoords='offset points')
plt.show()