绘制水平堆积条形图不适用于日期中的 x 轴

Posted

技术标签:

【中文标题】绘制水平堆积条形图不适用于日期中的 x 轴【英文标题】:plotly horizontal stacked bar chart not working with x-axis in dates 【发布时间】:2021-05-01 00:03:29 【问题描述】:

我正在尝试使用 彩色水平条形图 部分下https://plotly.com/python/horizontal-bar-charts/ 提供的示例之一。但是我使用的是日期而不是数字

代码

import plotly.graph_objects as go

fig = go.Figure()
fig.add_trace(go.Bar(
    y=['giraffes', 'orangutans', 'monkeys'],
    x=['2012-02-02', '2012-02-01', '2012-02-01'],
    name='SF Zoo',
    orientation='h',
    marker=dict(
        color='rgba(246, 78, 139, 0.6)',
        line=dict(color='rgba(246, 78, 139, 1.0)', width=3)
    )
))
fig.add_trace(go.Bar(
    y=['giraffes', 'orangutans', 'monkeys'],
    x=['2012-02-10', '2012-02-06', '2012-02-28'],
    name='LA Zoo',
    orientation='h',
    marker=dict(
        color='rgba(58, 71, 80, 0.6)',
        line=dict(color='rgba(58, 71, 80, 1.0)', width=3)
    )
))

fig.update_layout(barmode='stack')
fig.show()

我尝试使用 datetime.datetime(2012, 2, 2, 0, 0),仍然给我一个完全错误的图表。我尝试使用布局格式,但仍然无法解决此问题

剧情:

【问题讨论】:

您期待什么样的条形图?您希望日期为每个条的高度吗? 使用日期作为每个条形的高度是有问题的,因为从情节上讲 0 高度在日期方面的含义是令人困惑的。您可能需要使用参数 x 之类的解决方法,输入一个包含自月初以来的天数的列表,例如 x=[2, 1, 1]x=[10,6,28],然后自己将自定义 xlabels 添加到轴 @vestland 我认为这是 Plotly 文档中修改后的示例,所以绘制的是数据集 @DerekO 你是对的!我已经习惯于看到没有数据的问题,所以我默认要求它。 @DerekO o 是的,你是对的,这是有道理的,需要日期的起始参考。我也想到了天数,但我的数据集跨越了多年。读起来会很混乱。有没有办法设置起始参考?我尝试为 x 添加一个无效的范围 【参考方案1】:

一种解决方案是使用Gantt Chart,它可以更好地处理日期(尤其是定义开始和结束的位置)。

这是一个工作示例:

import plotly.express as px
import pandas as pd

df = pd.DataFrame([
    dict(Task="LA Zoo", Start='2012-02-02', Finish='2012-02-10', Resource="giraffes"),
    dict(Task="LA Zoo", Start='2012-02-01', Finish='2012-02-6', Resource="orangutans"),
    dict(Task="LA Zoo", Start='2012-02-01', Finish='2012-02-28', Resource="monkeys"),
    dict(Task="SF Zoo", Start='2012-02-10', Finish='2012-02-17', Resource="giraffes"),
    dict(Task="SF Zoo", Start='2012-02-6', Finish='2012-02-22', Resource="orangutans"),
    dict(Task="SF Zoo", Start='2012-02-28', Finish='2012-03-07', Resource="monkeys")
])

fig = px.timeline(df, x_start="Start", x_end="Finish", y="Resource", color="Task")
fig.show()

【讨论】:

以上是关于绘制水平堆积条形图不适用于日期中的 x 轴的主要内容,如果未能解决你的问题,请参考以下文章

在悬停时在堆积条形图上绘制水平线(图表 js)

修改 x 轴下方凌乱和重叠的日期标签的最优雅方法? (Seaborn,条形图)

使用 R 中的正 x 轴为两组水平绘制条形图

在Seaborn中绘制堆积条形图以显示聚类[重复]

Pandas一行代码绘制25种美图

将堆积条形图转换为 100% 比例堆积条形图