基于值的填充颜色的pyplot/matplotlib条形图

17

我想使用matplotlib/pyplot来用Python生成:

  • 一个柱状图,根据值填充不同颜色。
  • 带有图例的颜色条。

同时尽量减少模块依赖。


有没有比这更简单的方法:

import matplotlib.pyplot as plt

def color_gradient ( val, beg_rgb, end_rgb, val_min = 0, val_max = 1):
    val_scale = (1.0 * val - val_min) / (val_max - val_min)
    return ( beg_rgb[0] + val_scale * (end_rgb[0] - beg_rgb[0]),
             beg_rgb[1] + val_scale * (end_rgb[1] - beg_rgb[1]),
             beg_rgb[2] + val_scale * (end_rgb[2] - beg_rgb[2]))

# -----------------------------------------------
x_lbls = [ "09:00", "09:15", "10:10"]
y_vals = [       7,       9,       5]

plt_idx = np.arange( len( x_lbls))
bar_wd  = 0.35

grad_beg, grad_end = ( 0.5, 0.5, 0.5), (1, 1, 0)
col_list = [ color_gradient( val,
                             grad_beg,
                             grad_end,
                             min( y_vals),
                             max( y_vals)) for val in y_vals]

plt.bar( plt_idx, y_vals, color = col_list)
plt.xticks( plt_idx + bar_wd, x_lbls)
plt.show()

这仍然缺少图例颜色条


我在R中使用ggplot的解决方案如下:

library(ggplot2)
df = data.frame( time = 1:10, vals = abs(rnorm( n = 10)))
ggplot( df, aes( x = time, y = vals, fill = vals)) + 
  geom_bar(stat = "identity") + 
  scale_fill_gradient(low="#888888",high="#FFFF00")

并且产生了期望的输出:使用 ggplot 在 R 中的示例

2个回答

23

我不能想出不绘制其他内容并清除它就能让颜色条工作的方法,所以这不是最优雅的解决方案。

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

y = np.array([1, 4, 3, 2, 7, 11])
colors = cm.hsv(y / float(max(y)))
plot = plt.scatter(y, y, c = y, cmap = 'hsv')
plt.clf()
plt.colorbar(plot)
plt.bar(range(len(y)), y, color = colors)
plt.show()

具有颜色条的条形图


4
您可以在不绘制散点图的情况下使用Normalize和ScalarMappable。例如:
import matplotlib mpl
import matplotlib.pyplot as plt
from matplotlib import cm

f,(ax1,ax2) = plt.subplots(2)

#ax1 --> plot here your bar chart

norm = mpl.colors.Normalize(vmin=0, vmax=1)

mpl.colorbar.ColorbarBase(ax2, cmap=cm.RdBu,
                                norm=norm,
                                orientation='horizontal')

最后,将所需的格式添加到色条中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接