读取并返回数组中的所有值

时间:2016-09-29 05:39:12

标签: matplotlib

详细阐述问题:

让我澄清一下我的问题。我想绘制一个数组输出列表作为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之间。

2 个答案:

答案 0 :(得分:1)

您的问题并不清楚,但我认为您的数组a的形状为(N,3),因此您的数组sr是实际数组,而不是标量。

首先,一次调用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()