我想创建一个具有离散值的地毯图。例如,我有这些值:
point: {
events: {
click: function (e) {
var conditionalContent = condition == met ? 'conditional content' : '';
maincontentText: 'normal content ' + conditionalContent
}
}
}
我还有一个字典可以将这些离散值与颜色匹配:
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'])
我现在想创建一个地毯情节,我认为imshow可以成为解决这个问题的方法,因为imshow的文档说
cmap:Colormap,可选,默认值:无
如果为None,则默认为rc image.cmap值。当X具有RGB(A)信息
时,忽略 cmap
所以我创建了一个新的Dataframe,其颜色为条目:
matcher_dict = {
1: (236, 99, 92), 2: (75, 129, 196), 3: (244, 153, 97), 5: (135, 104, 180)}
现在我希望这可行:
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]]
但我得到的只是一个TypeError:图像数据无法转换为float
我期望的结果(能够使用可怕的低效代码创建的结果应该如下所示Expected Result of the carpetplot
但这只会引发TypeError,Image数据无法转换为float。
编辑:如果我直接使用df_data.values(而不是df_color.values,它会使用默认的colormap创建一个绘图。是否可以创建一个离散的colormap?(我没有完全理解来自的色彩图概念)阅读matplotlibs文档)
答案 0 :(得分:1)
我找到了解决问题的方法。假设一个离散的色彩图就可以了。如何创建一个在a scipy cookbook中描述,搜索discrete_cmap。
所以我的工作代码是这样的:
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'])
cpool = ['#EC635C', '#4B81C4', '#F49961', '#B45955',
'#8768B4']
cmap3 = plt.matplotlib.colors.ListedColormap(cpool[0:5], 'indexed')
fig, ax = plt.subplots()
im = ax.imshow(
df_data.values, cmap=cmap3, interpolation='nearest', aspect='auto')
plt.colorbar(mappable=im)
plt.show()
Axes描述仍然需要一些fiddeling,但它基本上是有效的。