绘制水平堆积条形图不适用于日期中的 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 轴的主要内容,如果未能解决你的问题,请参考以下文章