我试图将一个数据集表示为绘图中的颜色 block (而不是显示为可变宽度条形图,我想将其显示为具有背景颜色的可变宽度 block 。)
我可以做这样的事情:
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):
point = 40
current_color = cm.jet( min(pointy/30, 30)) # maximum of 30
plt.bar(pointx, point, bar_width, color = current_color)
plt.show()
但是我没有将颜色图缩放到我的数据范围。
或者我可以做类似的事情:
for i in range(10):
color = cm.jet(min(i/30, 30))
plt.axvspan(i, i+1, facecolor=color, alpha=0.5)
但这又不能令人满意,因为我希望有一种方法可以将我的数据自动缩放到 cmap 的最小值和最大值。
谢谢!
最佳答案
通过“数据范围”,我假设您的意思是颜色图最大为 pointy>30
。通过简化 current_color
可以轻松解决此问题:
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
max_y = y.max()
min_y = y.min()
for pointx, pointy in zip(x,y):
point = 40
current_color = cm.jet((pointy - min_y)/(max_y - min_y))
plt.bar(pointx, point, bar_width, color = current_color)
plt.show()
之前,一旦 pointy
大于 30,给 cmap.jet
的值就会大于 unity(颜色图的上限阈值)。相反,我们找到 y 的范围,然后找到该范围中 pointy
的分数,并将该数字(0 到 1 之间)传递给颜色图。
关于python - Matplotlib:使用颜色图显示状态(axvspan 或 bar?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20974252/