簡體   English   中英

如何繪制這種圖形(誤差線)?

[英]How to plot this type of graph (errorbar)?

我有一個數據框:

import pandas as pd
import numpy as np

df = pd.read_csv(r'https://exploratory.io/data/kanaugust/2016-California-Election-Data-oTv4Hgd1UT/2016%20California%20Election%20Data.csv')

df['cluster'] = [3, 3, 1, 2, 1, 1, 3, 1, 1, 2, 1, 3, 2, 1, 1, 1, 2, 1, 3, 1, 3, 1, 3, 2, 1, 2, 3, 3, 2, 2, 1, 1, 2, 2, 2, 2, 2, 3, 2, 2, 3, 3, 3, 3, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 2, 3, 1]

df = df.drop(columns=['COUNTY_NAME', 'PARTY_NAME']).groupby('cluster').agg(['mean', 'std'])
df

在此處輸入圖片說明

我想制作一張圖,像這樣:

在此處輸入圖片說明

對於每個簇,將每條線繪制為連接三個點的線。 中間是列均值,下點是均值-std,上限是均值+ std。 例如,對於“一次性塑料袋禁令”和第3組,下點是0.647902-0.065703,中間的點是0.647902,上面的點是0.647902 + 0.065703。

在每個x位置應繪制所有三個簇,每個簇的顏色不同。

matplotlib錯誤欄可能會達到該目的,但是我不知道如何使用它來生成上面顯示的圖形。 也許seaborn也很好?

如何繪制這種圖形?

使用errorbar的一種方法:

df = df.drop(columns=['COUNTY_NAME', 'PARTY_NAME']).groupby('cluster').agg(['mean', 'std'])

# change categories to index
new_df = df.T.unstack()

fig, ax = plt.subplots(1,1, figsize=(16,10))
for i in range(1,4):
    ax.errorbar(range(len(new_df)), new_df[new_df.columns[2*i-2]],
                yerr=new_df[new_df.columns[2*i-1]], fmt='x', 
                label=f'Cluster {i}')

ax.set_xticks(range(len(new_df)))
ax.set_xticklabels(new_df.index)
ax.legend()
plt.show()

輸出並不完美,但我將細節留給您:

在此處輸入圖片說明

暫無
暫無

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

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