如何将数组绘制为热图时间序列
Posted
技术标签:
【中文标题】如何将数组绘制为热图时间序列【英文标题】:How to plot an array as a heatmap timeseries 【发布时间】:2019-10-23 16:04:41 【问题描述】:我正在尝试创建一个 sns 热图,其中每一行代表一个数组条目。 我的数组看起来像:
arr = [[a, b, c], [b, c, d], [e, f, g]]
我有一个颜色字典,它为每个条目分配一种颜色。我使用这两个数组创建了另一个数组,以便它包含要绘制的颜色顺序(即:
col = [[c0, c1, c2], [c1, c2, c3], [c4, c5, c6]]
其中 c0,1.. 都是十六进制颜色代码。有没有办法把它变成热图?
【问题讨论】:
【参考方案1】:col
已经是一张热图。不幸的是,matplotlib 无法直接将十六进制颜色绘制为图像,因此您需要先转换为 rgb。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
col = [["#" + "".join(np.random.choice(list("0123456789abcdef"),6))
for _ in range(4)] for _ in range(4)]
col = np.array(col)
img = mcolors.to_rgba_array(col.flatten()).reshape(*col.shape, 4)
plt.imshow(img)
plt.show()
【讨论】:
【参考方案2】:cmap
参数完成这项工作。 (doc)。您可以使用color_palettes
方法(doc) 定义自己的调色板
在这里,我将0
作为颜色列表的第一个元素,1
作为颜色列表的第二个元素,依此类推。
代码如下:
# import modules
import seaborn as sns
import matplotlib.pyplot as plt
#Init seaborn
sns.set()
# Your data as decimal array
col = [[0, 1, 2], [1, 2, 3], [4, 5, 6]]
# Your custum color palette
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71", "#30095e"]
# Draw heatmap with the custom palette color
ax = sns.heatmap(col, cmap=sns.color_palette(flatui))
# Show graph
plt.show()
【讨论】:
谢谢!这适用于一个小样本,但是一旦我使用更大的数据集,我就会有这个:IndexError: Inconsistent shape between the condition and the input (got (25, 1) and (25,)) 即使列表格式相同跨度> 抱歉耽搁了。仅凭这一点很难知道。哪条线出现错误?你有重现错误的例子吗?以上是关于如何将数组绘制为热图时间序列的主要内容,如果未能解决你的问题,请参考以下文章