如何使用渐变颜色

时间:2017-03-06 15:58:24

标签: python matplotlib

我在python中有一个图表,我用matplotlib制作了以下代码:

def to_percent(y, position):
    s = str(250 * y)
    if matplotlib.rcParams['text.usetex'] is True:
        return s + r'$\%$'
    else:
        return s + '%'

distance = df['Distance']
perctile = np.percentile(distance, 90) # claculates 90th percentile
bins = np.arange(0,perctile,2.5)  # creates list increasing by 2.5 to 90th percentile 
plt.hist(distance, bins = bins, normed=True)
formatter = FuncFormatter(to_percent)  #changes y axis to percent
plt.gca().yaxis.set_major_formatter(formatter)
plt.axis([0, perctile, 0, 0.10])  #Defines the axis' by the 90th percentile and 10%Relative frequency
plt.xlabel('Length of Trip (Km)')
plt.title('Relative Frequency of Trip Distances')
plt.grid(True)
plt.show()

enter image description here

我想知道的是,是否可以使用渐变而不是块颜色对条形进行着色,就像excel中的这张图片一样。

enter image description here

我无法找到任何相关信息。

1 个答案:

答案 0 :(得分:1)

查看matplotlib文档中的gradient_bar.py示例。

基本的想法是,您不使用pyplot中的hist()方法,而是使用imshow()来自行构建条形图。 imshow()的第一个参数包含颜色图,该颜色图将显示在extent argmument指定的框内。

这是上面引用的示例的简化版本,可以让您走上正轨。它使用Excel示例中的值,以及使用CSS colors'dodgerblue'和'royalblue'作为线性渐变的颜色贴图。

from matplotlib import pyplot as plt
from matplotlib import colors as mcolors

values = [22, 15, 14, 10, 7, 5, 4, 3, 3, 2, 2, 1, 1, 1, 1, 7]

# set up xlim and ylim for the plot axes:
ax = plt.gca()
ax.set_xlim(0, len(values))
ax.set_ylim(0, max(values))

# Define start and end color as RGB values. The names are standard CSS color
# codes.
start_color = mcolors.hex2color(mcolors.cnames["dodgerblue"])
end_color = mcolors.hex2color(mcolors.cnames["royalblue"])

# color map:
img = [[start_color], [end_color]]

for x, y in enumerate(values):
    # draw an 'image' using the color map at the 
    # given coordinates
    ax.imshow(img, extent=(x, x + 1, 0, y))

plt.show()