我想使用 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')
示例:
您可以在
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)
阅读有关日期格式和时间序列的文档,似乎plotly会自动将格式化为日期的数据...转换为日期。
您应该重新格式化您的数据,例如“2018-08-04”变为“2018/08/04”。但您将得到一个更基本的条形图,这意味着 X 间隔的格式看起来不像现在那么好。
您始终可以手动重命名 x 轴,但这对于您想要做的事情来说可能有点过头了。为此,我建议您执行
pd.date_range()
操作,以便获得具有绘图日期格式的日期列表,然后手动设置 x 标签。另一种方法是使用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()