Cor*_*td. 4 matplotlib seaborn
我有以下数据:
countries2012 = [
'Bolivia',
'Brazil',
'Sri Lanka',
'Dominican Republic',
'Indonesia',
'Kenya',
'Honduras',
'Mozambique',
'Peru',
'Philipines',
'India',
'Vietnam',
'Thailand',
'USA',
'World'
]
percentage2012 = [
0.042780099,
0.16599952,
0.012373058,
0.019171717,
0.011868674,
0.019239173,
0.00000332,
0.014455196,
0.016006654,
0.132970981,
0.077940824,
0.411752517,
0.017986798,
0.017361808,
0.058076027
]
countries2013 = [
'Bolivia',
'Brazil',
'Sri Lanka',
'Dominican Republic',
'Indonesia',
'Honduras',
'Mozambique',
'Peru',
'Philippines',
'India',
'Vietnam',
'Thailand',
'USA',
'World'
]
percentage2013 = [
0.02736294,
0.117160272,
0.015815952 ,
0.018831589,
0.020409103 ,
0.00000000285,
0.018876854,
0.018998639,
0.117221146,
0.067991687,
0.496110972,
0.019309486,
0.026880553,
0.03503080414999993
]
Run Code Online (Sandbox Code Playgroud)
我想制作一个堆积条形图,以便有一个 2012 年的堆积条形图和另一个 2013 年的堆积条形图。
由于 2012 年和 2013 年的国家/地区不同,我该怎么做?
get*_*up8 16
由于这个问题要求在Seaborn 中使用堆叠条形图并且接受的答案使用pandas,我想我会给出一种实际使用 Seaborn 的替代方法。
Seaborn 给出了一个堆叠条形的示例,但它有点笨拙,绘制总数然后在其上叠加条形。相反,您实际上可以使用直方图和weights参数。
import pandas as pd
import seaborn as sns
# Put data in long format in a dataframe.
df = pd.DataFrame({
'country': countries2012 + countries2013,
'year': ['2012'] * len(countries2012) + ['2013'] * len(countries2013),
'percentage': percentage2012 + percentage2013
})
# One liner to create a stacked bar chart.
ax = sns.histplot(df, x='year', hue='country', weights='percentage',
multiple='stack', palette='tab20c', shrink=0.8)
ax.set_ylabel('percentage')
# Fix the legend so it's not on top of the bars.
legend = ax.get_legend()
legend.set_bbox_to_anchor((1, 1))
Run Code Online (Sandbox Code Playgroud)
IIUC,您可以创建一个Pandas数据框并使用其绘图函数:
import pandas as pd
df = pd.concat([pd.DataFrame({2012:percentage2012}, index=countries2012),
pd.DataFrame({2013:percentage2013}, index=countries2013)],
axis=1, sort=False)
df.T.plot.bar(stacked=True, figsize=(12,6))
Run Code Online (Sandbox Code Playgroud)
输出:
| 归档时间: |
|
| 查看次数: |
12356 次 |
| 最近记录: |