python 绘图日期轴作为字符串而不是日期

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

我想使用 pythonplotly 创建一个条形图,其中 x 轴日期作为字符串/类别。由于某种原因,plotly 不断将字符串转换为日期。我的 x 轴是日期的连续“时间线”,而不是我期望的类别。

我的问题:如何构建一个条形图,将我的日期作为类别而不是日期处理?

最小示例:

d = {'date': ['2018-08-04', '2018-08-02','2018-08-03', '2018-08-11','2018-08-11'], 'score': [3, 4, 6, 2,8]}
df = pd.DataFrame(data=d)

data = [go.Bar(
            x=df['date'],
            y=df['score']
    )]

offline.iplot(data, filename='basic-bar')

示例:

python plotly
3个回答
5
投票

您可以在

type
设置中指定轴
layout
。 Plotly 自动检测日期,但您可以通过设置
type='category'
来覆盖它。

import pandas as pd
import plotly

plotly.offline.init_notebook_mode()

d = {'date': ['2018-08-04', '2018-08-02','2018-08-03', '2018-08-11','2018-08-11'], 
     'score': [3, 4, 6, 2,8]}
df = pd.DataFrame(data=d)

data = plotly.graph_objs.Bar(x=df['date'],
                             y=df['score'])

#the magic happens here
layout = plotly.graph_objs.Layout(xaxis={'type': 'category'})

fig = plotly.graph_objs.Figure([data], layout)
plotly.offline.iplot(fig)

3
投票

阅读有关日期格式和时间序列的文档,似乎plotly会自动将格式化为日期的数据...转换为日期。

  1. 您应该重新格式化您的数据,例如“2018-08-04”变为“2018/08/04”。但您将得到一个更基本的条形图,这意味着 X 间隔的格式看起来不像现在那么好。

  2. 您始终可以手动重命名 x 轴,但这对于您想要做的事情来说可能有点过头了。为此,我建议您执行

    pd.date_range()
    操作,以便获得具有绘图日期格式的日期列表,然后手动设置 x 标签。


0
投票

另一种方法是使用plotlyexpress 来做到这一点。

import pandas as pd
import plotly.express as px

d = {'date': ['2018-08-04', '2018-08-02','2018-08-03', '2018-08-11','2018-08-11'], 'score': [3, 4, 6, 2,8]}

df = pd.DataFrame(data=d)

fig = px.bar(df, x='date', y='score')
fig.update_layout(xaxis=dict(type='category')) # type update to category
fig.show()
© www.soinside.com 2019 - 2024. All rights reserved.