Python - Как построить 2D-график с учетом всех комбинаций? - PullRequest
0 голосов
/ 05 ноября 2018

У меня следующий вопрос в python: у меня есть 7 списков (может быть даже простой вектор строки или столбца), каждый из которых содержит одинаковое количество элементов. Например:

a = [x1,x2,....xn] где xi - это число с плавающей точкой

b= [y1,y2,.....yn] где yi - это число с плавающей точкой

...........

g = [z1,z2,... zn] где zi - это число с плавающей точкой

Что мне нужно сделать, это:

Сначала найдите все возможные комбинации этих семи списков без повторений (я знаю, что есть itertools.combination) в группах по две (мне нужно найти 21 возможную комбинацию). Например (а, б), (а, в), (а, г) ....

Во-вторых, как только я получу все эти комбинации, я могу запустить своего рода цикл, чтобы построить все эти 21 график в 2D (plot (a, b), plot (a, c), ... plot (f, g). )). Я думал что-то вроде списка списков, но мне интересно, есть ли что-то готовое в какой-то библиотеке или даже проще. Спасибо!

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

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Попробуйте использовать библиотеку Seaborn.

Я бы импортировал эти массивы в фрейм данных Pandas, а затем построил их с помощью PairGrid. Самый простой генерируется так:

sns.pairplot(df)

Это даст вам матрицу рассеивания всех возможных комбинаций между переменными:

Сюжетная матрица

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

0 голосов
/ 05 ноября 2018

Решения, которые вы высказали, звучат для меня прекрасно:

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