px bar 的日期问题而不是 px scatter

问题描述 投票:0回答:1

我在使用 px 创建条形图时遇到问题。我用 px 散点图进行了测试,所有内容都正确显示为散点图。

对于条形图:年份正确显示在悬停上但不是在轴上,每个增量是 40 年而不是一个月。月份在任何地方都正确显示。

背景:我有一个名称中包含 YYYYMM 的文件列表(202201 是 2022 年 1 月)。我在 Jupyter 上有一个代码来获取文件列表,以字符串格式获取日期部分,然后使用以下方法转换为 dt:

df['date'] = pd.to_datetime(df['dateSTR'], format = '%Y%m')

在条形图上,您可以看到月份是正确的,年份是错误的。如果我使用 df['date'].dt.year,我会得到正确的年份,悬停显示正确的年份,但轴的年份不正确。

如果我使用 xrange['2018-01-01','2024-01-01'] 更改轴的最小最大值,它会缩放到第一个数据元素,我可以看到每个增量是 40 年而不是1个月。

fig_1 = px.bar(df
       , x='countryCode', y='date', color='status', orientation='v'           
       , color_continuous_scale = ['white','#1b95e0']
      )
fig_1.update(layout_coloraxis_showscale=False)
fig_1.update_yaxes(tickformat="%b %Y")
fig_1.show()

Dataframe 这是数据(图 2)日期列是日期时间,dateSTR 列是字符串(两种情况下的行为相同)

BarPlot_issue

有什么想法吗?

python datetime plotly
1个回答
0
投票

我认为这个问题并不是真正的情节问题,而是这种类型的可视化(带有日期 y 轴的堆积条形图)根本不起作用。

我将根据您提供的代码使用代码示例来解释我的意思:

import pandas as pd
import plotly.express as px

df = pd.DataFrame({"countryCode": ["CO1", "CO1", "CO3"], "date": ["2022-01-01", "2022-01-01", "2022-03-03"]})
fig = px.bar(df, x='countryCode', y='date')
fig.show()

上面的代码给出了这个图:

在我在这里使用的虚拟日期中,我们有两个具有相同

x
y
的数据点。 Plotly 看到两个数据点具有相同的
x
值,因此它尝试堆叠条形图。第一个栏获得正确的日期(y 值),但由于第二个栏位于顶部,y 轴值上的日期对第二个栏没有意义。

具有数字 y 轴的堆叠条形图有效,因为堆叠在一起的条形高度与 y 轴相对应。

来自 plotly 文档的示例:

在这里使用散点图是可行的,因为点不会堆叠,如果有两个点具有相同的

x
y
,它只会显示一个点。

© www.soinside.com 2019 - 2024. All rights reserved.