【发布时间】:2018-03-28 04:55:41
【问题描述】:
我不擅长 matplotlib,但我需要将它用于我正在做的一些工作。我有一组 9 列数据,大约 100k 行。我想制作一个散点图,我不关心行,它们对我的目的毫无意义。我需要将这些值绘制为散点图,相对于它们所在的列,无论它们属于哪一行。
这一切都是使用 numpy.loadtxt 从一个简单的二维数组中的文本文件加载的。它只是一组数字,因此任何随机数的替换都应该有效。我只是不确定如何以 scatter 命令喜欢的方式操作它。我经常得到它给我的错误,比如我给它的参数太少,或者它只是以我没有预料到的方式迭代数组(或数组,如果我将它们分开)。
我的第一个想法是,我可以以某种方式将它按列分解为一组系列,但我认为 scatter 命令不会采用这种方式。任何帮助将不胜感激。
【问题讨论】:
-
既然你已经在一个 numpy 数组中拥有它,你需要做的就是
data[:, 0]来访问第一列。要分散第二列与第一列,只需执行plt.scatter(data[:, 0], data[:,1])。 -
看,我试过了,但是我得到了两个系列的 100k 结果被相互绘制,这不是我所追求的。
-
那你追求什么?您想要第 1 列中的所有值都在 x = 1 处的散点图吗?为此,只需执行
plt.scatter([1]*len(data), data[:, 0]),然后对所有列重复。 -
@ArthurDent 这似乎也没有完全得到我们正在寻找的东西。有 9 个列,这会产生 this 。它越来越接近目标,但正如您所见,我正在寻找像 x 轴上的 1-9 之类的东西,并实际上让它沿着这些列展开。我使用了与您编写的代码相同的代码,只是对列数进行了简单的 for 循环。
-
通过“重复所有列”,我的意思是更改
1对应于您正在使用的任何列。所以在上述行之后,对第 2 列执行plt.scatter([2]*len(data), data[:, 1]),然后对第 3 列执行plt.scatter([3]*len(data), data[:, 2]),等等。当然,从 0 循环到 8 会更容易:for i in range(9):; plt.scatter([i+1]*len(data), data[:, i])。[1]*len(data)行只是创建一个与您的数据长度相同的 1 列表。
标签: python matplotlib plot