第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何向堆積百分比條形圖添加注釋

如何向堆積百分比條形圖添加注釋

長(zhǎng)風(fēng)秋雁 2023-08-08 09:53:01
我想使用 matplotlib 將值添加到堆積條形圖。到目前為止,我已經(jīng)能夠創(chuàng)建堆積條形圖,但我對(duì)如何添加注釋感到困惑。我想要一個(gè)類(lèi)似的輸出,而不是整個(gè)圖表,而只是中間的注釋。import pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltdata = {'Range':['<10','>10', '>= 20', '<10','>10', '>= 20', '<10','>10', '>= 20'],? ? 'Price':[50,25,25,70,20,10,80,10,10]? ? 'Value':[100,50,50,140,40,20,160,20,20]}? ??df1 = pd.DataFrame(data)b1 = df1[(df1['Range'] == '<10']['Price']b2 = df1[df1['Range'] == '>10']['Price']b3 = df1[df1['Range'] == '>= 20']['Price']totals = [i+j+k for i,j,k in zip(b1,b2,b3)]greenBars = [i / j * 100 for i,j in zip(b1, totals)]orangeBars = [i / j * 100 for i,j in zip(b2, totals)]blueBars = [i / j * 100 for i,j in zip(b3, totals)]barWidth = 0.5names = ('low', 'medium', 'high')r = [0,1,2]plt.bar(r, greenBars, color='#b5ffb9', edgecolor='white', width=barWidth, label = '$<10')plt.bar(r, orangeBars, bottom=greenBars, color='#f9bc86', edgecolor='white', width=barWidth, label = '$>10')plt.bar(r, blueBars, bottom=[i+j for i,j in zip(greenBars, orangeBars)], color='#a3acff', edgecolor='white', width=barWidth, label = '$>=20')plt.xticks(r, names)plt.xlabel("group")plt.legend(loc='upper left', bbox_to_anchor=(1,1), ncol=1)plt.show()添加了上面的代碼來(lái)創(chuàng)建堆積圖。期望的輸出:對(duì)于低類(lèi)別,通過(guò)從列中提取值Value(100、50 和 50)在堆棧上添加注釋對(duì)于中值,值為 140、40 和 20。對(duì)于高值,值為 160、20 和 20。
查看完整描述

1 回答

?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊

  • 可以通過(guò)從 中提取條形位置來(lái)注釋條形圖ax.patches。

    • 補(bǔ)丁數(shù)據(jù)不包含與數(shù)據(jù)幀相對(duì)應(yīng)的標(biāo)簽,因此關(guān)聯(lián)不同的數(shù)據(jù)值集成為一個(gè)定制過(guò)程。

  • 為了用Value代替進(jìn)行注釋Price,需要有一種方法來(lái)關(guān)聯(lián)相應(yīng)的值。

    • 字典不起作用,因?yàn)橛兄貜?fù)值

    • 為 制作一個(gè)旋轉(zhuǎn)數(shù)據(jù)框Value和 的相應(yīng)數(shù)據(jù)框Price。這將確保相應(yīng)的數(shù)據(jù)位于同一位置。

  • col_idxrow_idx將與 一起使用.iloc來(lái)查找 中的正確值df_value,并用它來(lái)注釋繪圖。

    • col_idxrow_idx都可以在 中重置或更新if i%3 == 0,因?yàn)橛?3 個(gè)條和 3 個(gè)段,但是,如果條和段的數(shù)量不同,則需要不同的重置條件。

import pandas as pd

import matplotlib.pyplot as plt


# create the dataframe

data = {'Range':['<10','>10', '>= 20', '<10','>10', '>= 20', '<10','>10', '>= 20'],

? ? ? ? 'Price':[50,25,25,70,20,10,80,10,10],

? ? ? ? 'Value':[100,50,50,140,40,20,160,20,20]}? ??


df1 = pd.DataFrame(data)


# pivot the price data

df_price = df1.assign(idx=df1.groupby('Range').cumcount()).pivot(index='idx', columns='Range', values='Price')


Range? <10? >10? >= 20

idx? ? ? ? ? ? ? ? ? ?

0? ? ? ?50? ?25? ? ?25

1? ? ? ?70? ?20? ? ?10

2? ? ? ?80? ?10? ? ?10


# pivot the value data

df_value = df1.assign(idx=df1.groupby('Range').cumcount()).pivot(index='idx', columns='Range', values='Value')


Range? <10? >10? >= 20

idx? ? ? ? ? ? ? ? ? ?

0? ? ? 100? ?50? ? ?50

1? ? ? 140? ?40? ? ?20

2? ? ? 160? ?20? ? ?20


# set colors

colors = ['#b5ffb9', '#f9bc86', '#a3acff']


# plot the price

ax = df_price.plot.bar(stacked=True, figsize=(8, 6), color=colors, ec='w')


# label the x-axis

plt.xticks(ticks=range(3), labels=['low', 'med', 'high'], rotation=0)


# x-axis title

plt.xlabel('group')


# position the legend

plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')


# annotate the bar segments

# col and row iloc indices for df_value

col_idx = 0

row_idx = 0


# iterate through each bar patch from ax

for i, p in enumerate(ax.patches, 1):


? ? left, bottom, width, height = p.get_bbox().bounds

? ? v = df_value.iloc[row_idx, col_idx]

? ? if width > 0:

? ? ? ? ax.annotate(f'{v:0.0f}', xy=(left+width/2, bottom+height/2), ha='center', va='center')


? ? ? ? # use this line to add commas for thousands

#? ? ? ? ax.annotate(f'{v:,}', xy=(left+width/2, bottom+height/2), ha='center', va='center')

? ??

? ? row_idx += 1

? ? if i%3 == 0:? # there are three bars, so update the indices?

? ? ? ? col_idx += 1

? ? ? ? row_idx = 0

https://img4.sycdn.imooc.com/64d1a0270001366705820368.jpg

查看完整回答
反對(duì) 回復(fù) 2023-08-08
  • 1 回答
  • 0 關(guān)注
  • 151 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)