Python-如何通过考虑所有组合来绘制2D图



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

a = [x1,x2,....xn],其中xi为浮动

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

...........

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

我需要做的是:

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

其次,一旦我得到了所有这些组合,我就可以运行一种for循环,在2D中绘制所有这21个抓手(图(a,b(,图(a、c(,。。。图(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库。

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

sns.pairplot(df)

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

绘图矩阵

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

你表达的解决方案对我来说很好:

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()

最新更新