绘制相同 X 的多个 Y 值不会投影所需的值

Posted

技术标签:

【中文标题】绘制相同 X 的多个 Y 值不会投影所需的值【英文标题】:Plotly multiple Y values for the same X do not project the desired value 【发布时间】:2021-10-16 02:00:03 【问题描述】:

我正在分析 csv 文件中的一些数据(随时间变化的用电量)

数据可以包含同一个 X DATE 的多个 Y 值,例如:

TYPE,DATE,START TIME,END TIME,USAGE,UNITS,COST,NOTES
Electric usage,2021-04-08,00:00,00:59,0.93,kWh,$0.27,
Electric usage,2021-04-08,01:00,01:59,0.42,kWh,$0.12,
Electric usage,2021-04-08,02:00,02:59,0.49,kWh,$0.14,
Electric usage,2021-04-08,03:00,03:59,0.49,kWh,$0.14,

我在下面的脚本中注意到的是,这些值没有聚合为单个值,至少不正确。有没有办法做到这一点?

import plotly.express as px
import pandas as pd

df = pd.read_csv("data.csv")
fig = px.line(df, x="DATE", y="USAGE")

fig.show()

【问题讨论】:

【参考方案1】:

除了WolVes 提到需要对列中的值求和之外,您还需要至少有两个点才能形成一条线。如果您在 "DATE" 列上使用 groupby,您最终会得到共享数据的单行结果。

所以我建议在线上启用点标记,这样如果只有行结果,您仍然会在图表上看到一个点:

import plotly.express as px
import pandas as pd

df = pd.read_csv("data.csv").groupby("DATE")["USAGE"].sum().reset_index()
fig = px.line(df, x="DATE", y="USAGE")
fig.update_traces(mode="markers+lines")

fig.show()

一行结果:

两行结果:

【讨论】:

【参考方案2】:

对于您提供的数据,系统并不明显应该对这些值求和,您需要先提供一个求和的数据框才能聚合数据。

df = pd.read_csv("data.csv")
tmp = df.groupby("DATE")['USAGE'].sum().reset_index()
fig = px.line(tmp, x="DATE", y="USAGE")

fig.show()

【讨论】:

以上是关于绘制相同 X 的多个 Y 值不会投影所需的值的主要内容,如果未能解决你的问题,请参考以下文章

使用 matplotlib 绘图没有给出所需的日期时间格式

meshgrid方法

如何平滑和绘制 x 与 y 的加权平均值,由 x 加权?

在R中绘制具有相同名称的列

根据 R 中的值绘制条件颜色 [重复]

canvas(四) 绘制文字