python - 非线性颜色图/热图

标签 python matplotlib heatmap colorbar percentile

我正在尝试为基因制作一维热图(例如,参见 pastebin 中的引用文献 1)。我已经接近我在使用 contourf 寻找的东西,但我一直无法弄清楚如何准确地获得我正在寻找的东西。基本上,我想使用具有 10 种离散颜色的颜色图,并且不同颜色的截止值对应于数据的百分位数(因此前 10% 的数据点为红色,接下来的 10% 是橙色等)。

我没有足够的声誉来发布两个以上的链接或任何图像,因此您还可以从下面的代码中看到我的输出图像,以及我查看过的其他页面来尝试解决这个问题, 在 http://pastebin.com/jAkxyQsK .

实际数据点位于 http://pastebin.com/3TrkkpZ0 的列表中.您可以尝试使用随机整数,但线性缩放和百分位数缩放之间的区别可能不会很明显,除非您的数据像我的一样倾斜。

data = [] #actually a list of ~450 floats 
x = []
nd = np.array(data)
x = np.empty([2, nd.shape[0]])
x[:,:] = nd

fig = plt.figure(figsize = (11, 8.5))
ax = fig.add_subplot(111)

现在,这是我的实验:

mind, maxd, sprd = min(data), max(data), max(data)-min(data)
levels = [(lambda n: mind + (n*sprd)/10)(n) for n in range(0,11,1)]
hm = plt.contourf(x, levels = levels, cmap = "rainbow")
cbar = fig.colorbar(hm, ax = ax)
plt.show()

[pastebin 上的图 1]

这主要是我想看到的:颜色条被离散化并且绘图看起来不错,但颜色条在数据的最大值和最小值之间呈线性间隔,这不是我想要的。尝试二:

levels = np.percentile(data, [z for z in range (0,110,10)])
hm = plt.contourf(x, levels = levels, cmap = "rainbow")
cbar = fig.colorbar(hm, ax = ax)
plt.show()

[pastebin 上的图 2]

这也很接近;颜色条除以百分位数的值(或者至少刻度值表明了这一点),但由于某种原因它不再使用颜色图的全部范围,我不知道为什么。

我还尝试使用 pcolor 实现引用文献 2 和 3 中描述的函数,但我无法弄清楚如何让它们使用我的数据而不是散点图,结果也没有我能得到的那么接近contourf,所以我不再追求它们了。如果答案已经在我看过的链接之一中,但我无法理解,那么“简单的英语”翻译将非常有帮助。

最佳答案

我不知道为什么颜色图没有在您的示例中使用全部颜色范围,但似乎以下内容更接近您想要的结果(即它确实跨越了具有分位数级别的更大范围的颜色)。

...
hm = plt.contourf(x, levels = levels, cmap = "rainbow", vmax = levels[-2])
...

您还可以为最大颜色图级别尝试“加权”值。

...
hm = plt.contourf(x, levels = levels, cmap = "rainbow", vmax = 0.3 * levels[-1] + 0.7 * levels[-2])
...

关于python - 非线性颜色图/热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590984/

相关文章:

python - 树莓派矩阵乘法

python - 自动截断 Tkinter 标签

python - 如何使用 Django include 标签作为单独的 HTML 模板?

python - 如何排序我的数据以在 Bokeh 中制作热图?

python - 如何让matplotlib/pcolor显示数据的最后一行和最后一列

python - Python 中的排名/行号窗口函数

python - Matplotlib:显示 numpy "sparse"数组 - 放大点?

python - 使用 Matplotlib 绘制多索引数据框时出现 x 轴标签错误

python - 如何防止 matplotlib 在水平轴上显示小数年份

r - 设置热图的色阶