我想創建一種堆疊條形圖[不知道正確的名稱]。我手繪了 [2016 年和 2017 年] 的圖表并將其附在此處。

創建df的代碼如下:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
data = [[2016.0, 0.4862, 0.4115, 0.3905, 0.3483, 0.1196],
[2017.0, 0.4471, 0.4096, 0.3725, 0.2866, 0.1387],
[2018.0, 0.4748, 0.4016, 0.3381, 0.2905, 0.2012],
[2019.0, 0.4705, 0.4247, 0.3857, 0.3333, 0.2457],
[2020.0, 0.4755, 0.4196, 0.3971, 0.3825, 0.2965]]
cols = ['attribute_time', '100-81 percentile', '80-61 percentile', '60-41 percentile', '40-21 percentile', '20-0 percentile']
df = pd.DataFrame(data, columns=cols)
#set seaborn plotting aesthetics
sns.set(style='white')
#create stacked bar chart
df.set_index('attribute_time').plot(kind='bar', stacked=True)
資料不需要相互堆疊。該代碼將創建一個堆疊條形圖,但這并不是需要顯示的內容。百分位數需要有標記的水平線,表示當年 x 軸上的百分位數。有人對如何實作這一目標有建議嗎?它是一種需要可視化的修改后的堆積條形圖嗎?
uj5u.com熱心網友回復:
我的方法是使用水平線而不是點作為標記將資料表示為分類散點圖(Seaborn 中的帶狀圖)。您必須對要繪制事物的確切方式和位置做出一些選擇,但這應該可以幫助您開始!
我先稍微修改了一下資料:
df['attribute_time'] = df['attribute_time'].astype('int') # Just to get rid of the decimals.
df = df.melt(id_vars = ['attribute_time'],
value_name = 'pct_value',
var_name = 'pct_range')
熔化 DataFrame 會采用寬資料并使其變長,因此列現在是year,pct_value,并且pct_range每個資料點都有一行。
接下來是繪圖:
fig, ax = plt.subplots()
sns.stripplot(data = df,
x = 'attribute_time',
y = 'pct_value',
hue = 'pct_range',
jitter = False,
marker = '_',
s = 40,
linewidth = 3,
ax = ax)
我不是用它所屬的范圍標記每個點,而是按顏色將它們分成范圍會更干凈。
當jitter給定類別的很多點可能重疊以試圖阻止它們接觸時,使用 。在這種情況下,我們不需要擔心,所以我關閉了抖動。marker樣式在
顯然,您可以通過調整大小和標簽等內容進行很多調整,使其看起來符合您的要求,但希望這至少是一個好的開始!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/512064.html
上一篇:嘗試繪制餅圖時出錯,如何解決?
