#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