簡體   English   中英

如何 plot 兩個條形圖與 pandas 中不同數據框的列並排

[英]How to plot two bar graphs side by side with columns from different dataframes in pandas

我想要 plot 兩個使用 matplotlib/seaborn 並排顯示兩個國家 Covid-19 確診病例的條形圖:意大利和印度,以進行比較。 但是在嘗試了很多方法之后我無法解決這個問題。 兩國的確診病例來自兩個不同的數據框。

數據源

我想要 plot x 軸上的“日期”列和 y 軸上的“已確認病例數”。
附上我的代碼圖片以供參考。
PS:我是數據可視化新手,也是pandas。

 import pandas as pd
 import numpy as np
 import matplotlib.pyplot as plt
 import seaborn as sns
 df = pd.read_csv('https://raw.githubusercontent.com/datasets/covid- 
 19/master/data/countries-aggregated.csv', parse_dates = ['Date'])
 df.head(5)

 ind_cnfd = df[['Date', 'Country', 'Confirmed']]
 ind_cnfd = ind_cnfd[ind_cnfd['Country']=='India']
 italy_cnfd = df[['Date', 'Country', 'Confirmed']]
 italy_cnfd = italy_cnfd[italy_cnfd['Country'] == 'Italy']

預期 output 是這樣的:X 軸為日期,Y 軸為確診病例圖片

這是一個示例,說明您可以使用 matplotlib 和 seaborn 組合在一起。您可以通過查看 matplotlib/seaborn 文檔隨意調整軸設置、間距等。 請注意,如果您想從筆記本中運行任何此代碼,我只import matplotlib.pyplot as plt 順便說一下,我沒有使用 seaborn。

您可以選擇使用以下行在基於日志的 y 刻度上顯示已確認的案例: plt.yscale('log')

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv',
    parse_dates = ['Date'])

# select the Date, Country, Confirmed features from country, with reset of index
ind_cnfd = df[df.Country == 'India']
ind_cnfd = ind_cnfd[['Date', 'Confirmed']].reset_index(drop = True)
ind_cnfd = ind_cnfd.rename(columns = {'Confirmed': 'Confirmed Cases in India'})

italy_cnfd = df[df.Country == 'Italy']
italy_cnfd = italy_cnfd[['Date', 'Confirmed']].reset_index(drop = True)
italy_cnfd = italy_cnfd.rename(columns = {'Confirmed': 'Confirmed Cases in Italy'})

# combine dataframes together, turn the date column into the index
df_cnfd = pd.concat([ind_cnfd.drop(columns = 'Date'), italy_cnfd], axis = 1)
df_cnfd['Date'] = df_cnfd['Date'].dt.date
df_cnfd.set_index('Date', inplace=True)

# make a grouped bar plot time series
ax = df_cnfd.plot.bar()

# show every other tick label
for label in ax.xaxis.get_ticklabels()[::2]:
    label.set_visible(False)

# add titles, axis labels
plt.suptitle("Confirmed COVID-19 Cases over Time", fontsize = 15)
plt.xlabel("Dates")
plt.ylabel("Number of Confirmed Cases")
plt.tight_layout()
# plt.yscale('log')

plt.show()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM