![](/img/trans.png)
[英]Matplotlib Bar chart with different color bars and bar showing values
[英]Matplotlib bar chart: independently adjust alpha values for specific bars
我有一個簡單的條形圖,帶有標記的條。 x 軸從過去日期移動到未來日期。 我想在未來日期使用更大的 alpha 值來表示它們的值是估計值。 我不知道如何調整 alpha。 我找到了使用 'get_children()[].set_color() 改變顏色的建議 這是一個不錯的解決方法,但我想改變 alpha 以獲得更好的顏色匹配。 我還嘗試使用 alpha 值列表並在 for 循環中創建條形。 這有效,但我丟失了標簽。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
fig, ax = plt.subplots(figsize=(11,6))
req = [700, 600, 500, 450, 350, 300, 200, 150, 100, 50]
completed = [100, 100, 50, 100, 50, 100, 50, 50,50, 50]
Months=['May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec', 'Jan-21', 'Feb']
x = np.arange(len(req)) # the label locations
width = 0.4 # the width of the bars
#I got this to work using a for look on rects but then lost my 'autolabels'
#alphas_o=([.9, .9, .9, .9, .9, .9, .9, .5, .5, .5])
#alphas_c=([.9, .9, .9, .9, .9, .9, .5, .5, .5, .5])
rects1 = ax.bar(x - width/2, req, width, color='tab:orange', alpha = .9)
rects2 = ax.bar(x + width/2, completed, width, color='tab:blue', alpha =.9 )
#This is an OK work around, but changing alpha instead of color looks better
ax.get_children()[7].set_color('moccasin')
ax.get_children()[8].set_color('moccasin')
ax.get_children()[9].set_color('moccasin')
ax.get_children()[16].set_color('lightsteelblue')
ax.get_children()[17].set_color('lightsteelblue')
ax.get_children()[18].set_color('lightsteelblue')
ax.get_children()[19].set_color('lightsteelblue')
ax.set_ylabel('Counts',fontsize=12 )
ax.set_xticks(x)
ax.set_xticklabels(Months, fontsize=12)
#I put this legend in place when I used the for loop and list of alphas. It works fine
orange_patch = mpatches.Patch(color='tab:orange', label='Total Open Requests')
blue_patch = mpatches.Patch(color='tab:blue', label='Completed Requests')
ax.legend(handles=[orange_patch, blue_patch], frameon=False, fontsize=12, bbox_to_anchor=(.9, .8))
def autolabel(rects):
"""Attach a text label above each bar in *rects*, displaying its height."""
for rect in rects:
height = rect.get_height()
ax.annotate('{}'.format(height),
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0, 3), # 3 points vertical offset
textcoords="offset points",
ha='center', va='bottom')
autolabel(rects1)
autolabel(rects2)
fig.tight_layout()
ax.tick_params(which='both',axis='y', left=False, right=False, labelleft=False, labelright=False)
# remove the frame of the chart
for spine in plt.gca().spines.values():
spine.set_visible(False)
plt.show()
我使用 RGBA 格式的顏色格式,第四個值是 alpha 值,所以我使用您創建的 alpha 值列表來創建顏色列表。 我已將其應用於條形圖。
alphas_o=([.9, .9, .9, .9, .9, .9, .9, .5, .5, .5])
alphas_c=([.9, .9, .9, .9, .9, .9, .5, .5, .5, .5])
rgba_colors = np.zeros((10,4))
rgba_colors[:,0] = 1.0
rgba_colors[:, 3] = alphas_o
rgba_colors1 = np.zeros((10,4))
rgba_colors1[:,2] = 1.0
rgba_colors1[:, 3] = alphas_c
rects1 = ax.bar(x - width/2, req, width, color=rgba_colors)
rects2 = ax.bar(x + width/2, completed, width, color=rgba_colors1)
ax.set_ylabel('Counts',fontsize=12 )
ax.set_xticks(x)
ax.set_xticklabels(Months, fontsize=12)
orange_patch = mpatches.Patch(color='r', label='Total Open Requests')
blue_patch = mpatches.Patch(color='b', label='Completed Requests')
ax.legend(handles=[orange_patch, blue_patch], frameon=False, fontsize=12, bbox_to_anchor=(.9, .8))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.