我想创建一个具有离散值的地毯图。例如,我有这些值:
import pandas as pd
import pylab as plt
df_data = pd.DataFrame(
[[1, 2, 1], [1, 1, 3], [2, 2, 5], [3, 2, 1]], index=['n1', 'n2', 'n3', 'n4'], columns=['var1', 'var2', 'var3'])
我还有一个字典来将这些离散值与颜色匹配:
matcher_dict = {
1: (236, 99, 92), 2: (75, 129, 196), 3: (244, 153, 97), 5: (135, 104, 180)}
我现在想创建一个地毯图,我认为 imshow 可能是解决这个问题的一种方法,正如 imshow 的文档所说
cmap :颜色图,可选,默认值:无
如果没有,默认为 rc image.cmap 值。当 X 具有 RGB(A) 信息时忽略 cmap
所以我创建了一个新的数据框,颜色为条目:
df_color = pd.DataFrame(index=df_data.index, columns=df_data.columns)
for col_index, col in enumerate(df_data.iteritems()):
for row_index, value in enumerate(col[1]):
df_color.ix[row_index].ix[col_index] = matcher_dict[
df_data.ix[row_index].ix[col_index]]
现在我希望这可以工作:
fig,ax = plt.subplots()
im = ax.imshow(
df_color.values, interpolation='nearest', aspect='auto')
但我得到的只是一个 TypeError: Image data can't convert to float
我期望的结果(并且能够用一个糟糕的低效代码创建应该看起来像这个地毯图的预期结果
但这只会引发 TypeError,图像数据无法转换为浮点数。
编辑:如果我直接使用 df_data.values(而不是 df_color.values,它会使用默认颜色图创建一个图。是否可以创建离散的颜色图?(我没有完全理解从阅读 matplotlibs 文档中的颜色图概念)