【发布时间】:2017-10-01 08:48:21
【问题描述】:
我正在创建一个 GUI,其中有多个记录(“事物”)和字段的实时“时间点”数据。记录可以根据字段进行比较,但字段不一定相关(至少不是在相同的范围内)。对于我最终的 GUI,我想让主页成为一个热图(实际上是一堆基于列(字段)的一维热图,然后如果你点击一个它会给出时间序列历史和其他一些图表。
无论如何,我在这里追求的是试图让初始热图显示我想要的方式。到目前为止,我可以从 Matplotlib 获取 pcolormesh,通过破解它和基于列的百分位的热图,基本上显示基于字段的单个 1-D 热图,然后在顶部添加实际值的文本。
但是,正如我所说,字段不一定相关,我希望能够为每个字段提供单独的颜色图。 例如:假设字段 3 和 4 在质量上与一个相关另一个,但不是字段 0-3 - 所以最好将这些映射到说“绿色”颜色网格而不是“冷暖”。
这是我目前的代码和生成的 pcolormesh/heatmap:
import pandas as pd
import matplotlib.pyplot as plt
def DFPercentiles(df,bycols=True):
p=pd.DataFrame(index=df.index,columns=df.columns)
if bycols!=True:
for j in df.index:
for i in df.columns:
p.loc[j,i]=(df.loc[j,i]-min(df.loc[j,:]))/(max(df.loc[j,:])-min(df.loc[j,:]))
else:
for i in df.index:
for j in df.columns:
p.loc[i,j]=(df.loc[i,j]-min(df.loc[:,j]))/(max(df.loc[:,j])-min(df.loc[:,j]))
return p
def Heatmap(df,figsize='auto'):
if figsize=='auto':
figsize=[shape(df)[1],shape(df)[0]/2]
fig=figure(figsize=figsize)
pdf=array(DFPercentiles(df,bycols=True)).astype(float)[::-1]
plt.pcolormesh(pdf,cmap=cm.coolwarm,alpha=0.8)
plt.yticks(arange(0.5,len(df)),df.index[::-1])
plt.xticks(arange(0.5,len(df.columns)),df.columns)
for y in range(df.shape[0]):
for x in range(df.shape[1]):
plt.text(x + 0.5, y + 0.5, '%.3f' % df[::-1].iloc[y, x],
horizontalalignment='center',
verticalalignment='center',
)
return plt
hmap=Heatmap(mydf)
hmap.show()
结果:
我没有运气尝试为单独的字段获取多个颜色图。
【问题讨论】:
-
我们更喜欢将解决方案 not 附加到此处的问题中。请您将问题的这一部分移到自我回答中吗?谢谢!
标签: python matplotlib heatmap colormap