我有三列数据:昵称、金主数量、平均人气
我希望昵称为x轴,金主数量为y轴,平均人气则反映在条形的颜色上,人气值越高,颜色越浅,反之,人气值越低。
def draw_bar(key_name, key_values, colorBar_data, colorBar_label='平均人气'):
'''
绘制带渐变颜色的柱状图,附带渐变条
parameters:
key_names:柱状图的横轴名称(维度一)
key_values:柱状图的纵轴数值(维度二)
colorBar_data:想要通过colorBar_data映射到颜色的深浅来反映条形图的另一个维度(维度三)
colorBar_label:第三个维度的名称
return:
返回一张图
'''
norm = plt.Normalize(colorBar_data.min(), colorBar_data.max())
norm_values = norm(colorBar_data)
map_vir = cm.get_cmap(name='plasma') # name设置渐变颜色色带
color = map_vir(norm_values)
plt.figure(figsize=(10,4)) # 设置图片大小
#设置图片的右边框和上边框为不显示
ax=plt.gca() # gca:get current axis得到当前轴
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.bar(key_name, key_values, color=color)
plt.xticks(rotation=90)
plt.xlim(-1)
# 添加渐变条
sm = cm.ScalarMappable(cmap=map_vir,norm=norm) # norm设置最大最小值
plt.colorbar(sm, label=colorBar_label)
bar_data = pht.set_index('昵称')[['金主数量','平均人气']].sort_values('金主数量', ascending=False).head(30)
draw_bar(bar_data.index, bar_data.金主数量.values, colorBar_data=bar_data.平均人气.values)
plt.ylabel('金主数量')
bar_data.head()
参考文章:
https://blog.csdn.net/xiaoyw71/article/details/108845807 Python Matplotlib绘制渐变色柱状图(bar)并加边框和配置渐变颜色条(colorbar)
https://www.brothereye.cn/python/427/ plt绘图颜色渐变以及colormap
https://blog.csdn.net/Caiqiudan/article/details/112797274 python matplotlib searbon 设置画版颜色 热力图固定颜色等级 固定比例尺寸大小