есть ли какой-нибудь способ сделать это на точечных диаграммах seaborn (gridplots)? python

#python #pandas #seaborn

#python #pandas #seaborn

Вопрос:

Привет, я выполняю анализ данных, и мне нужно сделать несколько диаграмм рассеяния, но я должен сделать это в сетке из графиков 3×3. например, я читаю файл csv и сохраняю его как фрейм данных.Из этого фрейма данных я выбрал несколько столбцов, чтобы сделать эти диаграммы рассеяния. предположим, что имена столбцов: 1) x 2) y 3) z 4) a 5) b 6) c диаграммы рассеяния, которые мне нужно создать, следующие:

 1-4 2-4 3-4
1-5 2-5 3-5
1-6 2-6 3-6 
 

и это должно выглядеть так введите описание изображения здесь

я использовал эту функцию sns.pairplots, в ней все написано нормально, но я должен сделать это с помощью цикла for, есть ли какой-нибудь способ сделать это, пожалуйста, дайте мне знать

вот мой код :

 df=pd.read_csv("owid-covid-data.csv") 
//it has a lot of columns there but i want only 6.
states=['total_cases_per_million','total_deaths_per_million','mortality','gdp_per_capita','hospital_beds_per_thousand','population_density']
fig,ax=plt.subplots(3,3,figsize=(5,5))
for i ,state in enumerate(states[0:5]):
    x_var=state
    y_var=state
    sns.scatterplot(data=new_df,x=x_var,y=y_var,ax=ax[i],hue='continent')
 

Ответ №1:

Да, есть. Вот пример, который показывает структуру, которой вы должны следовать для сеток. Здесь 4 раза по 4 и гистограммы, но это работает так же для точечных диаграмм и других графиков:

Данные, которые я использовал, были данными Spotify о песне 160 тыс. Итак, первое, что нужно определить размер изображения И сетки gs = gridspec.GridSpec(100,100) . Второй шаг — разделить захват для ваших графиков. В моем случае:

 ax1 = fig1.add_subplot(gs[0:45,0:40])
ax2 = fig1.add_subplot(gs[0:45,60:100])
ax3 = fig1.add_subplot(gs[55:100,0:40])
ax4 = fig1.add_subplot(gs[55:100,60:100])
 

После этого это все графики.

 
fig1 = plt.figure(figsize=[30,30])
gs  = gridspec.GridSpec(100,100)

ax1 = fig1.add_subplot(gs[0:45,0:40])
ax2 = fig1.add_subplot(gs[0:45,60:100])
ax3 = fig1.add_subplot(gs[55:100,0:40])
ax4 = fig1.add_subplot(gs[55:100,60:100])

lead_artists1 = Spotify.groupby('artists')['popularity'].sum().sort_values(ascending=False).head(30)
ax1 = sns.barplot(x=lead_artists1.values, y=lead_artists1.index, palette="Blues", orient="h", edgecolor='white', ax=ax1)
ax1.set_xlabel('Popularity All time (Count of presence in the dataset Spotify)', c='w', fontsize=16)
ax1.set_ylabel('Artist', c='w', fontsize=16)
ax1.set_title('30 Most Popular Artists past 100 years', c='w', fontsize=20, weight = 'bold')


###More plots 

fig1.savefig('...../Graphs/Popularity.png')
plt.show()
 

Это дало

введите описание изображения здесь

Комментарии:

1. прежде всего, спасибо за ваш ответ. Но это мне не помогло, я новичок в этом, и я сказал, есть ли какой-либо способ сделать это с помощью цикла for . У меня есть данные о covid, и мне нужны точечные диаграммы, я использовал sns.pairplot(data,x_var=[],y_var=[],hue = ..), Где x_vars содержит имена столбцов, которые мне нужно было добавить в сетку по осям x и y_vars соответственно, но у меня есть проблема, которую она мне не показываетдиагональные графики в сетке 3×3