У меня есть несколько диаграмм разброса, с разными классами в каждом. Я хочу соединить их все вместе в сетку графиков kx2 с легендой на стороне, которая содержит все существующие классы, например, удалить легенду с отдельных графиков.
Как мне это сделать?
Здесь это 4 графика для теста 2x2
from matplotlib.lines import Line2D
import pandas as pd
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
df1 = pd.DataFrame({
"class":["a", "b", "e"],
"time":[1,2,3],
"score":[10, 20, 30]
})
df2 = pd.DataFrame({
"class":["a", "c", "d"],
"time":[0,5,10],
"score":[5, 25, 30]
})
df3 = pd.DataFrame({
"class":["a", "b", "c", "d", "e"],
"time":[0,5,10,30,50],
"score":[5, 25, 30, 40, 100]
})
df4 = pd.DataFrame({
"class":["a", "e"],
"time":[1,2],
"score":[10,25]
})
def get_palette():
pal = {
'a': "#4C72B0",
'b': "#55A868",
'c': "#C44E52",
'd': "#8172B2",
'e': "#CCB974",
}
return pal
def get_markers():
mark = {
'a': Line2D.filled_markers[0],
'b': Line2D.filled_markers[5],
'c': Line2D.filled_markers[6],
'd': Line2D.filled_markers[7],
'e': Line2D.filled_markers[8],
}
return mark
def get_scatterplot(source, ds_name):
scatter = sns.scatterplot(palette=get_palette(), markers=get_markers(),
edgecolor='black', alpha=0.6, x="score", y="time",
hue="class", style="class", s=150,
data=source).set_title(ds_name)
return scatter
scatter_df1 = get_scatterplot(df1, "df1")
plt.show()
scatter_df2 = get_scatterplot(df2, "df2")
plt.show()
scatter_df3 = get_scatterplot(df3, "df3")
plt.show()
scatter_df4 = get_scatterplot(df4, "df4")
plt.show()
Это то, что я пытаюсь сделать, основываясь на некоторых других ответах на стек
fig, axs = plt.subplots(ncols=2, nrows=2)
sns.scatterplot(palette=get_palette(), markers=get_markers(), edgecolor='black', alpha=0.6, x="score", y="time", hue="class", style="class", s=150, data=df1, ax=axs[0]).set_title("ds1")
sns.scatterplot(palette=get_palette(), markers=get_markers(), edgecolor='black', alpha=0.6, x="score", y="time", hue="class", style="class", s=150, data=df2, ax=axs[1]).set_title("ds2")
sns.scatterplot(palette=get_palette(), markers=get_markers(), edgecolor='black', alpha=0.6, x="score", y="time", hue="class", style="class", s=150, data=df3, ax=axs[2]).set_title("ds3")
sns.scatterplot(palette=get_palette(), markers=get_markers(), edgecolor='black', alpha=0.6, x="score", y="time", hue="class", style="class", s=150, data=df4, ax=axs[3]).set_title("ds4")
Но это ошибки, не знаю почему ...
AttributeError: 'numpy.ndarray' object has no attribute 'scatter'