【问题标题】:Python - How to plot a 2D graph by considering all combinations?Python - 如何通过考虑所有组合来绘制二维图?
【发布时间】:2019-03-01 20:31:04
【问题描述】:

我在 python 中有以下问题:我有 7 个列表(甚至可以是简单的行或列向量),每个列表具有相同数量的元素。例如:

a = [x1,x2,....xn] 其中 xi 是浮点数

b= [y1,y2,.....yn] 其中 yi 是浮点数

...........

g = [z1,z2,... zn] 其中 zi 是浮点数

我需要做的是:

首先找到这七个列表的所有可能组合,不重复(我知道有 itertools.combinations)两个一组(我必须找到 21 个可能的组合)。例如 (a,b) , (a,c), (a,d)....

其次,一旦我得到所有这些组合,我就可以运行一种 for 循环来在 2D 中绘制所有这 21 个图(plot(a,b), plot(a,c),...plot(f,g ))。 我在想像列表列表这样的东西,但我想知道某个库中是否有准备好的东西,甚至更容易。 谢谢!

编辑 @FHTMitchell 看这个简单的例子,如果plt.show()没有缩进,我只会得到一张图表

mydata = np.array([[1.4,2.5,3.7],[4.34,5.92,6.234],[2.34,5.12,62.234],[44.34,90.92,23.234],[65.34,44.92,16.234]]) 
col1 = mydata[:,0] 
col2= mydata[:,1] 
col3 = mydata[:,2] 
for pair in itertools.combinations((col1,col2,col3), 2): 
    print(list(pair))
    fig, ax = plt.subplots() 
    ax.scatter(pair[0], pair[1])
plt.show()

【问题讨论】:

  • seaborn's pairplot 你在找什么?
  • @DizietAsahi 实际上 OP 所说的是他需要 21 个图,但使用配对图我们得到 49 个图
  • @AlbinPaul 指出pairplot 生成的图表比请求的多。但是,您可以使用底层的PairGridmap_lower()map_upper() 来生成所需数量的绘图

标签: python list matplotlib vector combinations


【解决方案1】:

你表达的解决方案对我来说听起来不错:

import itertools
import matplotlib.pyplot as plt
for pair in itertools.combinations((a,b,c,d,e,f,g), 2):
    fig, ax = plt.subplots()
    ax.scatter(pair[0], pair[1])
plt.show()

这绘制了 21 个单独的数字。您可以使用fig.save 来保存它们或使用plt.subplots 的其他用法将它们放在同一个图中。

编辑

如果你想在同一个情节上给每个人一个标签,你必须给他们一个名字:

# use dict key as name
d = dict(a=a, b=b, c=c, d=d, e=e, f=f, g=g)
fig, ax = plt.subplots()
for (xk, xv), (yk, yv) in itertools.combinations(d.items(), 2):
    ax.scatter(xv, yv, label=f'({xk}, {yk})')
ax.legend()
plt.show()

【讨论】:

  • 谢谢。我猜你想把 plt.show() 放在 for 循环中。否则我会出错。这是对的吗?另一个问题:如何确定要绘制的组合?
  • 有什么办法可以为每个散点放置 a-label 、 b-label 等吗?
  • 这是我一直在寻找的东西! :) 我稍后会尝试...支持第一个代码,你能确认最后一行的代码应该在循环内缩进吗?否则它只会绘制一个最新组合的图表。
  • 您是指第一个代码块中的plt.show() 吗?不,不应该缩进。至少在我的系统上,所有的图都生成了。
  • 是的,在第一个代码的最后一行。如果不缩进,我只能通过代表最后一个组合得到一个图表。我试图在这里写一个例子,但我在格式化它时遇到了问题
【解决方案2】:

尝试使用 seaborn 库。

我会将这些数组导入 pandas 数据框,然后使用 PairGrid 绘制这些数组。最简单的生成是这样的:

sns.pairplot(df)

这将为您提供变量之间所有可能组合的散点图矩阵:

The plot matrix

https://seaborn.pydata.org/generated/seaborn.pairplot.html#seaborn.pairplot

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2023-04-03
    • 2015-06-27
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多