详细阐述问题:
让我澄清一下我的问题。我想绘制一个数组输出列表作为2D散点图,沿y轴沿x轴主观性的极性和范围在-1和1之间的模态值确定标记的类型(o,x,^,v)
输出
polarities: [ 0. 0. 0. 0.]
subjectivity: [ 0.1 0. 0. 0. ]
modalities: [ 1. -0.25 1. 1. ]
2范围内标记值有限的修改后的代码。
print "polarities: ", a[:,0]
print "subjectivity: ", a[:,1]
print "modalities: ", a[:,2]
def markers(r):
markers = np.array(r, dtype=np.object)
markers[(r>=0)] = 'o'
markers[r<0] = 'x'
return markers.tolist()
def colors(s):
colors = np.array(s, dtype=np.object)
colors[(s>=0)] = 'g'
colors[s<0] = 'r'
return colors.tolist()
fig=plt.figure()
ax=fig.add_subplot(111)
ax.scatter(a[:,0], a[:,1], marker = markers(a[:,2]), color= colors(a[:,0]), s=100, picker=5)
我的目的是检查模态值并返回四个标记之一。 如果我硬核,那就是&#39; o&#39;它返回了情节。
ax.scatter(a[:,0], a[:,1], marker = markers('o'), color= colors(a[:,0]), s=100, picker=5)
作为试验,我试图模仿颜色函数并将其作为[:,2]传递但是遇到shell输出错误
ValueError: Unrecognized marker style ['o', 'x', 'o', 'o']
问题是:我的方法是错的吗?或者如何让它识别标记样式?
EDIT1
尝试将m值设置为0到.5
使用此代码
ax.scatter (p[0<m<=.5], s[0<m<=.5], marker = "v", color= colors(a[:,0]), s=100, picker=5)
产生此错误
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
如何在答案2中给出的示例中将m值定义在0和.5之间。
答案 0 :(得分:1)
您的问题并不清楚,但我认为您的数组a
的形状为(N,3)
,因此您的数组s
和r
是实际数组,而不是标量。
首先,一次调用scatter()
就不能有多个标记。如果您希望绘图有多个标记,则必须正确切割数组,并为每个标记执行多个scatter()
。
关于颜色,你的问题是你的函数colors(r)
只返回一种颜色,它应该返回一个颜色数组(与a[:,0]
具有相同数量的元素)。像这样:
def colors(s):
colors = np.array(s, dtype=np.object)
colors[(s>0.25)&(s<0.75)] = 'g'
colors[s>=0.75] = 'b'
colors[s<=0.25] = 'r'
return colors.tolist()
a = np.random.random((100,))
b = np.random.random((100,))
plt.scatter(a,b,color=colors(b))
回答您的编辑1:
您似乎走在正确的轨道上,您需要进行尽可能多的scatter()
次呼叫。
您的错误来自切片索引[0<m<=.5]
,您无法使用它。您必须使用完整的符号[(m>0.)&(m<=.5)]
答案 1 :(得分:1)
正如Diziet指出的那样,plt.scatter()
无法处理几个标记。因此,您需要为每个标记类别制作一个散点图。这可以通过标记来反映我对房产的调节。在这种情况下:
import numpy as np
import matplotlib.pyplot as plt
p = np.array( [ 0. , 0.2 , -0.3 , 0.2] )
s = np.array( [ 0.1, 0., 0., 0.3 ] )
m = np.array( [ 1., -0.25, 1. , -0.6 ] )
colors = np.array([(0.8*(1-x), 0.7*x, 0) for x in np.ceil(p)])
fig=plt.figure()
ax=fig.add_subplot(111)
ax.scatter(p[m>=0], s[m>=0], marker = "o", color= colors[m>=0], s=100)
ax.scatter(p[m<0], s[m<0], marker = "s", color= colors[m<0], s=100)
ax.set_xlabel("polarity")
ax.set_ylabel("subjectivity")
plt.show()