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