Python 提高Pandas数据透视图的可读性
我有一个包含[910行x1列]的透视表。使用熊猫图绘制时,可读性不好。请看下图。我想得到一个Excel数据透视图。我的意思是,如果我点击图表中的一个特定点,它应该会显示所有细节[设备ID、温度等] 请参阅我的数据框(透视表) 你能告诉我怎样才能提高可读性吗 我想知道有没有办法把它打印成excel文件Python 提高Pandas数据透视图的可读性,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个包含[910行x1列]的透视表。使用熊猫图绘制时,可读性不好。请看下图。我想得到一个Excel数据透视图。我的意思是,如果我点击图表中的一个特定点,它应该会显示所有细节[设备ID、温度等] 请参阅我的数据框(透视表) 你能告诉我怎样才能提高可读性吗 我想知道有没有办法把它打印成excel文件 针对一个类似于问题的多指标综合数据 使用plotly作为打印后端工具提示是解决方案的一部分 目前不支持多索引,所以我改为串联索引来演示 使用plotly-API进行多索引 需要将多个索引合并
- 针对一个类似于问题的多指标综合数据
- 使用plotly作为打印后端工具提示是解决方案的一部分
- 目前不支持多索引,所以我改为串联索引来演示
- 需要将多个索引合并到x
- 从你的评论中,我假设也有多个专栏。为每列生成绘图仪散点
一个可能的答案是使用plotly而不是matplotlib。。。它确实有工具提示和交互。如果您以文本形式提供示例数据,则演示会简单得多。粘贴到此处非常困难。它并不像预期的那样出现。我可以给你发电子邮件。我会试试这个,让你知道。谢谢你的时间。我试过这个代码“data=[go.Scatter(x=multi_index.index,y=multi_index.values,mode='lines',name='Noise Level')]layout=go.layout(title='Noise Level')figure=go.figure(data=data,layout=layout=layout)pyo.plot(figure)”我得到了一条直线。我不知道在这里把pivot表列放在我更新的代码中-仍然需要以处理约束的方式构造多索引multi_index=pd.pivot_表(df_new,index=['Device_ID','Temp','Supply',columns='Frequency',values='NoiseLevel',)--这是我的pivot表,#这是我的代码:不知道在哪里放置“columns='Frequency'”数据=[go.Scatter(x=multi_index.index,y=multi_index.values,mode='lines',name='Noise Level')],用于下一个SO问题或关于这个问题的任何其他迭代。最好遵循SO指南,并为您的问题提供一个具有代表性的数据集。我仍然不知道我所模拟的是否与您正在使用的匹配
Frequency 0.8 1.6
Device_ID Temp Supply
FF_2649 -40.0 1.65 -100.72 -101.35
1.71 -100.61 -101.74
1.80 -100.74 -101.64
1.89 -100.63 -101.69
3.60 -100.60 -101.46
... ... ...
TT_2441 85.0 1.65 -94.99 -94.97
1.71 -94.85 -95.24
1.80 -95.02 -94.97
1.89 -94.69 -96.20
3.60 -94.90 -94.91
import pandas as pd
import numpy as np
df = pd.DataFrame(index=pd.MultiIndex.from_product([list("abcd"), list("efgh"), list("xyz")], names=["cat1","cat2","cat3"]))
df["value"] = np.random.randint(1,200, len(df))
pd.options.plotting.backend = "plotly"
df.reset_index().pipe(lambda d: d.set_index(d.cat1+d.cat2+d.cat3)).loc[:,"value"].plot()
import pandas as pd
import numpy as np
import plotly.graph_objects as go
s = 100000
df_new = pd.DataFrame({"Device_ID":np.random.choice(["FF_2649","FF_2700","FF_2800","TT_2000","TT_2100","TT_2441"], s),
"Temp":np.random.randint(-8, 19, s)*5,
"Supply":np.random.choice([1.65,1.71,1.80,1.89,3.60], s),
"Frequency":np.random.choice([0.8,1.6], s),
"NoiseLevel":np.random.uniform(-102,-94, s)
})
multi_index = pd.pivot_table(df_new, index = ['Device_ID', 'Temp' ,'Supply'],columns = 'Frequency', values = 'NoiseLevel',)
# given data is randmoly generated, give it some order...
multi_index.loc[:,[0.8,1.6]] = multi_index.assign(p=lambda d: (d[0.8]*2)+(d[1.6]*.5)).sort_values("p").drop(columns="p").values
# pivot gives a column per frequency. SO question did not indicate this....
# generate a line for each column in pivot table. concat values of multi-index to make it work with plotly
data = [go.Scatter(x=[" ".join([str(p) for p in x]) for x in multi_index.index], y=multi_index[c],
mode='lines+markers', name=f'Noise Level {c}', marker={"size":10},line={"dash":"dot"})
for c in multi_index.columns]
layout=go.Layout(title='Noise Level')
figure=go.Figure(data=data,layout=layout)
figure