python barplot_Python:带有colorbar的Barplot

我正在尝试使用颜色条制作条形图,每个条形图的高度是一个变量(y),每个条形图应该具有取决于另一个变量(c)的颜色.

我得到的是这个(简单的例子):

data_x = [0,1,2,3]

data_hight = [60,60,80,100]

data_color = [1000,500,1000,900]

data_color = [x / max(data_color) for x in data_color]

fig, ax = plt.subplots(figsize=(15, 4))

my_cmap = plt.cm.get_cmap('GnBu')

colors = my_cmap(data_color)

rects = ax.bar(data_x, data_hight, color=colors)

CS = plt.contourf([data_x, data_color],cmap=my_cmap)

cbar = plt.colorbar(CS, cmap=my_cmap)

cbar.set_label('Color', rotation=270,labelpad=25)

plt.xticks(data_x)

plt.ylabel("Y")

plt.show()

主要问题是直方图颜色很好,但颜色条的比例不同.除此之外,我可以在y = 0处看到蓝线,它不应该在那里.

任何帮助都是预先确定的.

谢谢!

最佳答案 您正在条形图内创建一个contourf图.这是没有意义的.

相反,您需要创建一个没有任何可视化表示的mappable来提供给colorbar.这将是一个ScalarMappable.

import matplotlib.pyplot as plt

from matplotlib.cm import ScalarMappable

data_x = [0,1,2,3]

data_hight = [60,60,80,100]

data_color = [1000.,500.,1000.,900.]

data_color = [x / max(data_color) for x in data_color]

fig, ax = plt.subplots(figsize=(15, 4))

my_cmap = plt.cm.get_cmap('GnBu')

colors = my_cmap(data_color)

rects = ax.bar(data_x, data_hight, color=colors)

sm = ScalarMappable(cmap=my_cmap, norm=plt.Normalize(0,max(data_color)))

sm.set_array([])

cbar = plt.colorbar(sm)

cbar.set_label('Color', rotation=270,labelpad=25)

plt.xticks(data_x)

plt.ylabel("Y")

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值