【问题标题】:Pyplot Scatter PlotPyplot 散点图
【发布时间】: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


【解决方案1】:

scatter 函数接收两个长度相同的列表。要访问 numpy 数组的单个列 n,只需使用 data[:, n]。由于您希望将所有列与其列号对应,因此您还需要创建一个长度相同的列表data,只有列号作为元素。要创建您想要的绘图,只需执行以下操作:

for i in range(9):
    plt.scatter([i + 1] * len(data), data[:, i])

【讨论】: