Python:带颜色条的条形图
Posted
技术标签:
【中文标题】Python:带颜色条的条形图【英文标题】:Python: Barplot with colorbar 【发布时间】:2018-12-14 17:09:43 【问题描述】:我正在尝试用彩条制作条形图,每个条的高度是一个变量 (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 看到一条蓝线,它不应该在那里。
任何帮助都将不胜感激。 谢谢!
【问题讨论】:
也许您可以附上一张图片来说明您的意思?此外,尚不清楚您的display
和 autolabel
函数做了什么。你真的应该在这里尝试提出一个最小的例子,它是独立的,专注于编程问题,而不是你更大的功能集。
嗨汤姆,这是一个独立的例子,显示只是jupyter笔记本中的一个功能,我已经删除了它。我上传了一张图片,但由于某种原因它没有显示出来。
【参考方案1】:
您正在条形图中创建contourf
图。这没有任何意义。
相反,您需要创建一个没有任何视觉表示的可映射对象来提供给颜色条。这将是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()
【讨论】:
谢谢你,帮助了我。 如何将颜色条作为图例包含在内(即图右上方的水平线)?以上是关于Python:带颜色条的条形图的主要内容,如果未能解决你的问题,请参考以下文章