我知道这有很好的文档记录,但我很难在我的代码中实现它。
我想使用色彩图对图表下的区域进行着色。是否有可能有一种颜色,即任何超过30的点的红色,以及直到该点的梯度?
我正在使用fill_between方法,但如果有更好的方法,我很乐意改变它。
def plot(sd_values):
plt.figure()
sd_values=np.array(sd_values)
x=np.arange(len(sd_values))
plt.plot(x,sd_values, linewidth=1)
plt.fill_between(x,sd_values, cmap=plt.cm.jet)
plt.show()
这是目前的结果。我尝试了axvspan
,但这并没有cmap
作为选项。为什么下图不显示色彩图?
答案 0 :(得分:4)
我不确定cmap
参数是否应该是fill_between
绘图命令的一部分。在您的情况下,可能想要使用fill()
命令btw。
这些填充命令可创建多边形或多边形集合。多边形集合可以使用cmap
,但使用fill
时,无法提供应该将其着色的数据。
据我所知,当然不可能的是用渐变填充单个多边形。
接下来最好的事情就是假装它。您可以绘制着色图像并根据创建的多边形进行剪裁。
# create some sample data
x = np.linspace(0, 1)
y = np.sin(4 * np.pi * x) * np.exp(-5 * x) * 120
fig, ax = plt.subplots()
# plot only the outline of the polygon, and capture the result
poly, = ax.fill(x, y, facecolor='none')
# get the extent of the axes
xmin, xmax = ax.get_xlim()
ymin, ymax = ax.get_ylim()
# create a dummy image
img_data = np.arange(ymin,ymax,(ymax-ymin)/100.)
img_data = img_data.reshape(img_data.size,1)
# plot and clip the image
im = ax.imshow(img_data, aspect='auto', origin='lower', cmap=plt.cm.Reds_r, extent=[xmin,xmax,ymin,ymax], vmin=y.min(), vmax=30.)
im.set_clip_path(poly)
图像的范围基本上在整个轴上拉伸。然后clip_path只显示绘制fill
多边形的位置。
答案 1 :(得分:3)
我认为您所需要的只是一次一个地绘制数据,例如:
import numpy
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as colors
# Create fake data
x = numpy.linspace(0,4)
y = numpy.exp(x)
# Now plot one by one
bar_width = x[1] - x[0] # assuming x is linealy spaced
for pointx, pointy in zip(x,y):
current_color = cm.jet( min(pointy/30, 30)) # maximum of 30
plt.bar(pointx, pointy, bar_width, color = current_color)
plt.show()
导致: