Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 提高Pandas数据透视图的可读性_Python_Pandas_Matplotlib - Fatal编程技术网

Python 提高Pandas数据透视图的可读性

Python 提高Pandas数据透视图的可读性,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个包含[910行x1列]的透视表。使用熊猫图绘制时,可读性不好。请看下图。我想得到一个Excel数据透视图。我的意思是,如果我点击图表中的一个特定点,它应该会显示所有细节[设备ID、温度等] 请参阅我的数据框(透视表) 你能告诉我怎样才能提高可读性吗 我想知道有没有办法把它打印成excel文件 针对一个类似于问题的多指标综合数据 使用plotly作为打印后端工具提示是解决方案的一部分 目前不支持多索引,所以我改为串联索引来演示 使用plotly-API进行多索引 需要将多个索引合并

我有一个包含[910行x1列]的透视表。使用熊猫图绘制时,可读性不好。请看下图。我想得到一个Excel数据透视图。我的意思是,如果我点击图表中的一个特定点,它应该会显示所有细节[设备ID、温度等]

请参阅我的数据框(透视表)

你能告诉我怎样才能提高可读性吗

我想知道有没有办法把它打印成excel文件

  • 针对一个类似于问题的多指标综合数据
  • 使用plotly作为打印后端工具提示是解决方案的一部分
  • 目前不支持多索引,所以我改为串联索引来演示

使用plotly-API进行多索引
  • 需要将多个索引合并到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