【发布时间】:2019-03-19 10:38:29
【问题描述】:
给定以下数据:
DC,Mode,Mod,Ven,TY1,TY2,TY3,TY4,TY5,TY6,TY7,TY8
Intra,S,Dir,C1,False,False,False,False,False,True,True,False
Intra,S,Co,C1,False,False,False,False,False,False,False,False
Intra,M,Dir,C1,False,False,False,False,False,False,True,False
Inter,S,Co,C1,False,False,False,False,False,False,False,False
Intra,S,Dir,C2,False,True,True,True,True,True,True,False
Intra,S,Co,C2,False,False,False,False,False,False,False,False
Intra,M,Dir,C2,False,False,False,False,False,False,False,False
Inter,S,Co,C2,False,False,False,False,False,False,False,False
Intra,S,Dir,C3,False,False,False,False,True,True,False,False
Intra,S,Co,C3,False,False,False,False,False,False,False,False
Intra,M,Dir,C3,False,False,False,False,False,False,False,False
Inter,S,Co,C3,False,False,False,False,False,False,False,False
Intra,S,Dir,C4,False,False,False,False,False,True,False,True
Intra,S,Co,C4,True,True,True,True,False,True,False,True
Intra,M,Dir,C4,False,False,False,False,False,True,False,True
Inter,S,Co,C4,True,True,True,False,False,True,False,True
Intra,S,Dir,C5,True,True,False,False,False,False,False,False
Intra,S,Co,C5,False,False,False,False,False,False,False,False
Intra,M,Dir,C5,True,True,False,False,False,False,False,False
Inter,S,Co,C5,False,False,False,False,False,False,False,False
进口:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
要复制我的DataFrame,复制数据然后使用:
df = pd.read_clipboard(sep=',')
我想创建一个情节,传达与我的示例相同的信息,但不一定具有相同的形状(我愿意接受建议)。我还想将鼠标悬停在颜色上并显示适当的Ven(例如 C1,而不是 1)。:
编辑 2018-10-17:
目前提供的两种解决方案都很有帮助,并且每种解决方案都实现了我正在寻找的不同方面。但是,我想解决的关键问题(在此编辑之前没有明确说明)如下:
我想在不将Ven 转换为int 的情况下执行绘图;这种数字转换不适用于真实数据。所以问题的实际范围是用两个分类轴绘制所有分类数据。
我遇到的问题是数据是分类的,并且 y 轴是多索引的。
我已完成以下操作来转换DataFrame:
# replace False witn nan
df = df.replace(False, np.nan)
# replace True with a number representing Ven (e.g. C1 = 1)
def rep_ven(row):
return row.iloc[4:].replace(True, int(row.Ven[1]))
df.iloc[:, 4:] = df.apply(rep_ven, axis=1)
# drop the Ven column
df = df.drop(columns=['Ven'])
# set multi-index
df_m = df.set_index(['DC', 'Mode', 'Mod'])
绘制转换后的DataFrame 产生:
plt.figure(figsize=(20,10))
heatmap = plt.imshow(df_m)
plt.xticks(range(len(df_m.columns.values)), df_m.columns.values)
plt.yticks(range(len(df_m.index)), df_m.index)
plt.show()
这个图不是很精简,每个Ven 有四个轴值。这是数据的一个子集,因此包含所有数据的图表会很长。
【问题讨论】:
标签: python-3.x pandas matplotlib data-visualization bokeh