pandas之折线图(plot)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas之折线图(plot)相关的知识,希望对你有一定的参考价值。
参考技术A 大家在做数据分析时,通过技术分析出数据,然后绘制出图表。不管是Excel、还是tableau、FineBI等等,折线图是最常见及图形之一,下面讲解一下 利用pandas 通过groupby分析数我们所需的数据 ,然后在利用Matplotlib最著名的绘图库,它主要用于二维绘图首先, 模块引用 :
第二,数据初始化:
第三,利用pandas,groupby 汇总数据:
对字段“Date”进行分组,求出字段“Data3”的数据之和
第四,制作折线图:
第五,打印出折线图:
具体展示:
好啦,就到这里了,谢谢
如何使用 plotly express 创建线图,其中可以通过下拉菜单选择 pandas 数据框?
【中文标题】如何使用 plotly express 创建线图,其中可以通过下拉菜单选择 pandas 数据框?【英文标题】:How can I create a line plot with plotly_express, where a pandas dataframe can be selected over a drop down menu? 【发布时间】:2021-08-19 14:31:59 【问题描述】:我想创建一个线图,可以在其中通过下拉菜单选择基础数据。数据在 pandas 数据框中,我正在使用 plotly_express。
我尝试使用此post 作为基础,但它不使用 plotly_express 并且数据不在 pandas 数据框中。
我有这段代码,我在其中定义了data1
和data2
,然后将它们放入按钮中。我正在将这些数据帧转换为字典,因为如果不是,我将遇到数据帧不是“json-able”的错误。
# making two new dataframes out of the all-data dataframe (for drop down select)
dfe_deworming=dfe.loc['Deworming needed'].reset_index()
dfe_anemia=dfe.loc['Anemia'].reset_index()
# making the parameters for each button
#button 1
data1=dict(dfe_deworming)
x1=dfe_deworming.Month
y1=dfe_deworming.Count
color1=dfe_deworming.Facility
#button2
data2=dict(dfe_anemia)
x2=dfe_anemia.Month
y2=dfe_anemia.Count
color2=dfe_anemia.Facility
#initial plot
fig_deworming = px.line(data_frame=data1,x=x1,y=y1,color=color1)
# update menus
updatemenus = [
'buttons': [
'method': 'restyle',
'label': 'Deworming needed',
'args': [
'data_frame':[data1],'x': [x1],'y':[y1],'color':[color1],
]
,
'method': 'restyle',
'label': 'Anemia',
'args': [
'data_frame':[data2],'x': [x2],'y':[y2],'color':[color2],
]
],
'direction': 'down',
'showactive': True,
]
fig_deworming.update_layout(
updatemenus=updatemenus
)
fig_deworming.update_traces(mode='markers+lines')
fig_deworming.show()
在初始状态下,它看起来不错。但是,如果我尝试选择一个选项,所有行都会得到完全相同的数据集。它可能是所有不同数据集的组合。
这些图片说明了问题:
First option of the drop down menu after first selection
Second option of the drop down menu after second selection
【问题讨论】:
回答我需要dfe
数据框的样本
这是一个类似问题的答案:***.com/questions/65710352/…
【参考方案1】:
从根本上说,您需要为 updatemenus
使用 graph object 参数结构 已生成与您的结构相匹配的数据框 使用 plotly express 创建图表 生成 updatemenu,这些参数是您将传递给 go.Scatter 的参数 使用了列表理解,因为每个菜单都完全相同 终于解决了 plotly express 为hovertemplate
生成的跟踪问题
import numpy as np
import pandas as pd
import plotly.express as px
# generate a dataframe that matches structure in question
dfe = (
pd.DataFrame(
"Month": pd.date_range("1-jan-2020", freq="M", periods=50).month,
"Facility": np.random.choice(["Deworming needed", "Anemia"], 50),
"Count": np.random.randint(5, 20, 50),
)
.groupby(["Facility", "Month"], as_index=False)
.agg("Count": "sum")
)
# the line plot with px...
fig = px.line(
dfe.loc[dfe.Facility.eq("Deworming needed")], x="Month", y="Count", color="Facility"
)
# fundametally need to be working with graph object parameters not express parameters
updatemenus = [
"buttons": [
"method": "restyle",
"label": f,
"args": [
"x": [dfe.loc[dfe.Facility.eq(f), "Month"]],
"y": [dfe.loc[dfe.Facility.eq(f), "Count"]],
"name": f,
"meta": f,
,
],
for f in ["Deworming needed", "Anemia"] # dfe["Facility"].unique()
],
"direction": "down",
"showactive": True,
]
fig = fig.update_layout(updatemenus=updatemenus)
# px does not set an appropriate hovertemplate....
fig.update_traces(
hovertemplate="Facility=%meta<br>Month=%x<br>Count=%y<extra></extra>",
meta="Deworming needed",
)
【讨论】:
以上是关于pandas之折线图(plot)的主要内容,如果未能解决你的问题,请参考以下文章