1. 繪圖
利用下面的代碼,繪制柱狀圖。
# season number , warning!!! not percent
def season_number(data_all_profile, output_num_season_png, sector_id=None, terrain=None, label=None):
df_season = data_all_profile['season'].value_counts()
# 希望的排序列表
desired_order = ['spring', 'summer', 'autumn', 'winter']
# 使用reindex方法按指定順序重新排序
sorted_result = df_season.reindex(desired_order)
df_season = pd.DataFrame(sorted_result)
df_season.rename(columns={'season': 'count'}, inplace=True)
df_season = df_season.reset_index().rename(columns={'index': 'season'})
# 創(chuàng)建柱狀圖
plt.figure(figsize=(5, 3))
bars = plt.bar(df_season['season'], df_season['count'], width=0.3)
# 添加數(shù)據(jù)標(biāo)簽
for bar in bars:
height = bar.get_height()
plt.annotate(f'{height}',
xy=(bar.get_x() + bar.get_width() / 2, height),
xytext=(0, 3), # 3 points vertical offset
textcoords="offset points",
ha='center', va='bottom')
# 調(diào)整y軸上限,以確保標(biāo)簽可見(jiàn)
plt.ylim(0, max(df_season['count']) * 1.1)
plt.xticks(rotation=0)
plt.xlabel('season', fontsize=11)
plt.ylabel('數(shù)量(個(gè))', fontsize=11)
plt.title('各季節(jié)風(fēng)廓線數(shù)量分布')
plt.title(f'{terrain}-區(qū)域{sector_id}各季節(jié)風(fēng)廓線數(shù)量分布')
plt.tight_layout()
plt.savefig(output_num_season_png) # 將圖片保存為 output.png 文件
plt.close()
2. 解讀
2.1 繪制標(biāo)簽
難點(diǎn):繪制標(biāo)簽
# 添加數(shù)據(jù)標(biāo)簽
for bar in bars:
height = bar.get_height()
plt.annotate(f'{height}',
xy=(bar.get_x() + bar.get_width() / 2, height),
xytext=(0, 3), # 3 points vertical offset
textcoords="offset points",
ha='center', va='bottom')
bar.get_height()
用于獲取柱子的高度,也就是柱狀圖中每個(gè)柱子的高度值。在上面的代碼中,我們使用這個(gè)高度值來(lái)確定要在柱子上方添加的數(shù)據(jù)標(biāo)簽的位置。
具體來(lái)說(shuō),這行代碼:
height = bar.get_height()
將height
設(shè)置為當(dāng)前柱子的高度。然后,在plt.annotate()
函數(shù)中,我們使用xy
參數(shù)將標(biāo)簽的位置設(shè)置在柱子的中間,而height
表示了柱子的高度,因此數(shù)據(jù)標(biāo)簽會(huì)被添加到每個(gè)柱子的中間位置,以顯示柱子所代表的數(shù)據(jù)值。
這是一種常見(jiàn)的用法,用于在柱狀圖中添加數(shù)據(jù)標(biāo)簽。
2.2 代碼解讀
解釋?zhuān)?code>xy=(bar.get_x() + bar.get_width() / 2, height)
代碼 xy=(bar.get_x() + bar.get_width() / 2, height)
主要用于確定要放置數(shù)據(jù)標(biāo)簽的位置,具體來(lái)說(shuō):
-
bar.get_x()
獲取柱子的左邊界的 x 坐標(biāo)。 -
bar.get_width()
獲取柱子的寬度。 -
bar.get_x() + bar.get_width() / 2
計(jì)算出柱子的中心 x 坐標(biāo)。 -
height
是柱子的高度,即柱子所代表的數(shù)據(jù)值。
這行代碼將數(shù)據(jù)標(biāo)簽的位置設(shè)置為柱子的中心,橫坐標(biāo)為柱子中心的 x 坐標(biāo),縱坐標(biāo)為柱子的高度,這樣標(biāo)簽就會(huì)位于柱子的頂部中央,以顯示柱子所代表的具體數(shù)據(jù)值。
例如,假設(shè)某個(gè)柱子的左邊界的 x 坐標(biāo)是 10,寬度是 2,高度是 20,那么這行代碼的計(jì)算如下:
-
bar.get_x()
得到 10。 -
bar.get_width()
得到 2。 -
bar.get_x() + bar.get_width() / 2
得到 11,這是柱子的中心 x 坐標(biāo)。 -
height
得到 20,柱子的高度。
因此,xy
參數(shù)被設(shè)置為 (11, 20)
,這是數(shù)據(jù)標(biāo)簽的位置,使得標(biāo)簽位于柱子的中央頂部,以顯示數(shù)據(jù)值 20。這種方法可確保數(shù)據(jù)標(biāo)簽位于柱子的合適位置,使得圖表更易于理解。
2.3 xytext=(0, 3)
xytext
參數(shù)用于指定標(biāo)簽文本的偏移量,它是一個(gè)二元組,表示文本相對(duì)于 xy
參數(shù)指定的坐標(biāo)的偏移量,其中第一個(gè)值表示水平偏移,第二個(gè)值表示垂直偏移。
在代碼中,xytext=(0, 3)
的含義是:
- 水平偏移為 0,表示標(biāo)簽文本在水平方向上不進(jìn)行偏移。
- 垂直偏移為 3,表示標(biāo)簽文本在垂直方向上相對(duì)于
xy
參數(shù)指定的坐標(biāo)向上偏移 3 個(gè)單位。
這個(gè)偏移的目的是為了讓數(shù)據(jù)標(biāo)簽稍微上移一點(diǎn),以使標(biāo)簽文本不會(huì)與柱子的頂部重疊,從而更清晰地顯示數(shù)據(jù)標(biāo)簽。通過(guò)微小的垂直偏移,可以改善標(biāo)簽的可讀性,確保它們不會(huì)覆蓋柱子或其他元素。
您可以根據(jù)需要調(diào)整 xytext
參數(shù)的值,以更好地控制標(biāo)簽的位置和外觀。
2.4 textcoords=“offset points”
textcoords="offset points"
是 annotate
函數(shù)中的一個(gè)參數(shù),用于指定文本注釋的坐標(biāo)系統(tǒng)。具體來(lái)說(shuō),它告訴函數(shù)如何解釋 xy
和 xytext
參數(shù)中的坐標(biāo)值。
在這種情況下,textcoords
被設(shè)置為 "offset points"
,意味著 xy
和 xytext
中的坐標(biāo)值將被解釋為以點(diǎn)(points)為單位的偏移量。這是為了方便指定相對(duì)于柱子或數(shù)據(jù)點(diǎn)的偏移量,而不是使用絕對(duì)的坐標(biāo)值。
例如,如果您設(shè)置 xy=(11, 20)
和 xytext=(0, 3)
,那么這意味著:
-
xy=(11, 20)
表示數(shù)據(jù)標(biāo)簽的基準(zhǔn)點(diǎn)位于柱子中心的水平位置 x=11,垂直位置 y=20。 -
xytext=(0, 3)
表示相對(duì)于xy
指定的點(diǎn),文本標(biāo)簽將向水平和垂直方向分別偏移 0 個(gè)點(diǎn)和 3 個(gè)點(diǎn)。
通過(guò)這種方式,您可以方便地指定相對(duì)于數(shù)據(jù)點(diǎn)的偏移量,以更好地控制標(biāo)簽的位置。如果您選擇其他坐標(biāo)系統(tǒng),例如 "figure fraction"
或 "axes fraction"
,那么坐標(biāo)值將被解釋為相對(duì)于圖形或軸的比例位置。
ha
和 va
是 annotate
函數(shù)中的參數(shù),用于控制文本注釋?zhuān)?biāo)簽)的水平對(duì)齊和垂直對(duì)齊方式。
-
ha
表示水平對(duì)齊方式,它有以下可能的取值:-
'center'
:文本水平居中對(duì)齊,默認(rèn)值。 -
'left'
:文本左對(duì)齊。 -
'right'
:文本右對(duì)齊。
-
-
va
表示垂直對(duì)齊方式,它有以下可能的取值:-
'center'
:文本垂直居中對(duì)齊,默認(rèn)值。 -
'top'
:文本頂部對(duì)齊。 -
'bottom'
:文本底部對(duì)齊。
-
在您提供的代碼中,ha='center'
表示文本水平居中對(duì)齊,va='bottom'
表示文本底部對(duì)齊。這意味著數(shù)據(jù)標(biāo)簽的文本將以底部對(duì)齊到 xy
指定的點(diǎn)。通常,這是一個(gè)常見(jiàn)的設(shè)置,以確保標(biāo)簽文本在柱子或數(shù)據(jù)點(diǎn)的底部顯示,使其更易于閱讀。
如果需要,您可以根據(jù)需要更改這些參數(shù),以調(diào)整標(biāo)簽的水平和垂直對(duì)齊方式,以滿足您的可視化需求。例如,將 va
設(shè)置為 'center'
將使文本垂直居中對(duì)齊,而將 ha
設(shè)置為 'left'
將使文本左對(duì)齊。
3.標(biāo)簽獲?。ń庾x)
for category in normalized_table_T.index:
for i, value in enumerate(normalized_table_T.loc[category]):
plt.text(i, value, f'{value:.2f}', ha='center', va='bottom', fontsize=10,
color=colors[normalized_table_T.index.get_loc(category)])
這段代碼主要是用于在圖表上為每個(gè)數(shù)據(jù)點(diǎn)添加文本標(biāo)簽。下面是對(duì)代碼的逐行解讀:
-
for category in normalized_table_T.index:
:這一行是遍歷normalized_table_T
的索引,其中normalized_table_T
是一個(gè)pandas DataFrame。 -
for i, value in enumerate(normalized_table_T.loc[category]):
:這一行是遍歷給定類(lèi)別category
下的所有值。enumerate
用于獲取每個(gè)值的索引i
和值value
。 -
plt.text(i, value, f'{value:.2f}', ha='center', va='bottom', fontsize=10, color=colors[normalized_table_T.index.get_loc(category)])
:這一行是用于在圖表上添加文本標(biāo)簽的。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-802060.html-
i, value
:這是文本標(biāo)簽的位置。i
是x坐標(biāo),value
是y坐標(biāo)。 -
f'{value:.2f}'
:這是要顯示的文本,它使用f-string格式化,顯示value
的值并保留兩位小數(shù)。 -
ha='center', va='bottom'
:這些是文本對(duì)齊選項(xiàng)。ha
是水平對(duì)齊方式,這里設(shè)置為居中;va
是垂直對(duì)齊方式,這里設(shè)置為底部。 -
fontsize=10
:設(shè)置字體大小為10。 -
color=colors[normalized_table_T.index.get_loc(category)]
:設(shè)置文本顏色。它從colors
列表中獲取一個(gè)顏色值,這個(gè)列表應(yīng)該事先定義好了。normalized_table_T.index.get_loc(category)
獲取category
在normalized_table_T
索引中的位置,然后用這個(gè)位置從colors
列表中獲取顏色。
-
總的來(lái)說(shuō),這段代碼遍歷一個(gè)名為normalized_table_T
的DataFrame,并在每個(gè)數(shù)據(jù)點(diǎn)上添加一個(gè)顯示其值的文本標(biāo)簽,這些標(biāo)簽在圖表上是居中且位于數(shù)據(jù)點(diǎn)的下方,字體大小為10,顏色根據(jù)類(lèi)別從colors
列表中獲取。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-802060.html
到了這里,關(guān)于python繪制柱狀圖,并添加標(biāo)簽的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!