Создание функции вывода графиков для разных датафреймов
Есть два датафрейма df1 и df2.
df1:
A B C
0 1 2 3
1 4 5 6
2 7 8 9
df2:
Z X V
0 1 2 3
1 4 5 6
2 7 8 9
Нужно создать функцию, которая рисует рядом два графика, в которых отображается зависимость значений одного столбца от другого. Написал вот такую конструкцию:
def show_me_comparison(data1, data2, name):
fig, axes = plt.subplots(1,2)
data1.plot(x='A', y='B', kind='scatter', ax=axes[0])
plt.title(name)
data2.plot(x='Z', y='X', kind='scatter', ax=axes[1])
Ну и вызываю ее
show_me_comparison(df1, df2, 'Хороший график')
Собственно, вопрос в том, как правильно вписать в функцию обращение к нужным столбцам датафрейма, чтобы она стала универсальной для любого датафрейма. Что-то совсем не получается, уже много всего перепробовал. Хочу, чтобы было вот так:
def show_me_comparison(data1, data2, столбец1, столбец2, name):
fig, axes = plt.subplots(1,2)
data1.plot(x='столбец1', y='столбец2', kind='scatter', ax=axes[0])
plt.title(name)
data2.plot(x='Z', y='X', kind='scatter', ax=axes[1])
show_me_comparison(df1, df2, A, B, 'Хороший график')
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Ну так переделайте функцию в универсальную, которая будет брать первую и вторую колонки датафрейма:
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.DataFrame({'A':[1,4,7], 'B':[2,5,8], 'C':[3,6,9]})
df2 = pd.DataFrame({'Z':[2,5,8], 'X':[3,6,9], 'V':[4,7,10]})
def show_me_comparison(data1, data2, name):
fig, axes = plt.subplots(1,2)
data1.plot(data1.columns.values[0], data1.columns.values[1], kind='scatter', ax=axes[0])
plt.title(name)
data2.plot(data2.columns.values[0], data2.columns.values[1], kind='scatter', ax=axes[1])
show_me_comparison(df1, df2, 'test')
UPDATE
Со срезами:
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.DataFrame({'A':[1,4,7], 'B':[2,5,8], 'C':[3,6,9]})
df2 = pd.DataFrame({'Z':[2,5,8], 'X':[3,6,9], 'V':[4,7,10]})
def show_me_comparison(data1, data2, name):
fig, axes = plt.subplots(1,2)
data1.plot(data1.columns.values[0], data1.columns.values[1], kind='scatter', ax=axes[0])
plt.title(name)
data2.plot(data2.columns.values[0], data2.columns.values[1], kind='scatter', ax=axes[1])
plt.tight_layout()
show_me_comparison(df1, df2, 'test')
show_me_comparison(df1, df2[['Z', 'V']], 'test')
plt.show()

