繁体   English   中英

Matplotlib散点图,每个x点有2个y点

[英]Matplotlib scatter plot with 2 y-points per x-point

我想使用Matplotlib创建散点图。

我有一个x轴ID数组。 看起来像这样:

x = [1, 2, 3, ...]
#Length = 418

对于y轴,我有一个数组。 看起来像这样:

y = [(1, 1), (1, 0), (0, 0), (0, 1), ...]
#Length = 418

我想将其绘制在散点图中,以便对于每个ID(在x轴上),它在对应的tuple的第一个值上显示一个红点,在对应的tuple的第二个值上显示一个蓝点。

我尝试了这段代码:

plt.plot(x, y, 'o')
plt.xlim(xmin=900, xmax=1300)
plt.ylim(ymin=-1, ymax=2)
plt.yticks(np.arange(2), ('Class 0', 'Class 1'))
plt.xlabel('ID')
plt.ylabel('Class')
plt.show()

它显示此结果:

my_plot

如何使该图更清晰?

另外,放大时会发现点偏移了吗? 如何将它们直接放在彼此之上?

zoomed_plot

您需要对数据进行整理,以确保您拥有平坦的列表。

我认为最直观的方法是定义两个列表y1y2并遍历您的原始y ,向其添加正确的值:

y1 = []
y2 = []

for i, j in y:
    y1.append(i)
    y2.append(j)

然后您可以通过两次调用plt.scatter来绘制红色和蓝色散点图

plt.scatter(x, y1, c = 'r')
plt.scatter(x, y2, c = 'b')

希望有帮助!

您需要将数据存储在两个列表/元组中,而不是一个两个项目的元组列表中,因为这是plt.plot输入所需要的。 最好的方法是像这样重组您的数据,但是如果您受困于此元组列表(或者由于其他原因而需要此数据格式),则可以随时创建列表:

plt.plot(x, [i for (i,j) in y], 'ro')
plt.plot(x, [j for (i,j) in y], 'bo')

请注意,如果要使用两种不同颜色的两条不同数据线,则需要两条plt.plot(..)行。

为避免标记彼此重叠,可以更改它们的形状或大小(或同时更改两者):

plt.plot(x, [i for (i,j) in y], 'rs', markersize = 12 )
plt.plot(x, [j for (i,j) in y], 'bo', markeresize = 8)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM