我在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()
我想知道的是,是否可以使用渐变而不是块颜色对条形进行着色,就像excel中的这张图片一样。
我无法找到任何相关信息。
答案 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()