python - Matplotlib:使用颜色图显示状态(axvspan 或 bar?)

标签 python matplotlib

我试图将一个数据集表示为绘图中的颜色 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 之间)传递给颜色图。

enter image description here

关于python - Matplotlib:使用颜色图显示状态(axvspan 或 bar?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20974252/

相关文章:

python - boost::python 包装对象的 C++ 析构函数调用

javascript - 需要表格来填充搜索栏的搜索结果

Python Pandas - 查找具有最大聚合值的连续组

python - 使用 python 运行多个服务器

python - numpy函数.fft.fft2()给出错误: “cannot do a non-empty take from an empty axis”(opencv,matplotlib,numpy,python27)

python - 显示 SVM 中特征重要性的 Python 代码是什么?

python - 使用 id 访问动态添加的小部件

python - xlabel 和 ylabel 在 Pandas 图中不可见

python - 使用 DataFrame 绘制双轴图

python - 如何在直方图 bin 中获取数据