我有一个这种形式的df:
{'content': {175: nan,
176: nan,
177: 'Address not Found',
178: 'Delivery delayed-transport issues',
179: nan,
180: 'Parcel returned',
181: 'Parcel lost in mail',
182: 'Parcel received',
183: 'Return requested',
184: 'Repeat order placed},
'sales': {175: 7.0,
176: 7.0,
177: 9.0,
178: 13.0,
179: 11.0,
180: 9.0,
181: 19.0,
182: 14.0,
183: 9.0,
184: 9.0},
'order_date': {175: Timestamp('2019-08-28 16:30:00'),
176: Timestamp('2019-08-30 11:55:53'),
177: Timestamp('2019-09-06 14:51:14'),
178: Timestamp('2019-09-06 15:03:22'),
179: Timestamp('2019-09-06 15:46:11'),
180: Timestamp('2019-09-06 16:08:03'),
181: Timestamp('2019-09-06 17:13:01'),
182: Timestamp('2019-09-16 21:38:29'),
183: Timestamp('2019-09-25 12:35:29'),
184: Timestamp('2019-09-25 22:22:51')}}
这是参考这个问题:这里
我想绘制一个以
color
和symbol
为内容列的折线图。但是,当我这样做时:
fig = px.line(df, x='order_date', y='sales',color='content',symbol='content', color_discrete_sequence=px.colors.qualitative.Pastel,
markers=True, line_shape='hvh')
我得到的内容是分开的线,其中一些只是图中的点:没有连接,我不确定为什么会这样。我尝试用
Nan
替换None
值,但错误仍然存在。
任何帮助将不胜感激。
当您在 plotly express 中使用
px.line
时,指定 color
或 symbol
将导致 plotly 按每种独特的颜色(或符号)拆分您的数据,并将它们绘制为单独的轨迹。线条仅在具有相同颜色的迹线之间绘制。
想象一下您的数据看起来像
{'time': [1,2,3,4,5], 'values':[10,20,30,40,50], 'color': [a,b,c,a,b]}
。当你定义fig = px.line(df, x='time', y='values', color='color'
时,plotly会从a点到a点,b点到b点绘制一条线,并将c点渲染为一个点。相反,您想要的是按 time
. 顺序连接所有点的单线
一种可能的解决方法是创建
fig1
我们使用 px.line 只绘制没有标记的线。然后创建 fig2
我们使用 px.scatter 仅绘制标记(带有颜色和符号)。然后将两个图的数据组合成fig3
.
下面是一个例子:
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
Timestamp = pd.Timestamp
nan = float("nan")
data = {'content': {175: nan,
176: nan,
177: 'Address not Found',
178: 'Delivery delayed-transport issues',
179: nan,
180: 'Parcel returned',
181: 'Parcel lost in mail',
182: 'Parcel received',
183: 'Return requested',
184: 'Repeat order placed'},
'sales': {175: 7.0,
176: 7.0,
177: 9.0,
178: 13.0,
179: 11.0,
180: 9.0,
181: 19.0,
182: 14.0,
183: 9.0,
184: 9.0},
'order_date': {175: Timestamp('2019-08-28 16:30:00'),
176: Timestamp('2019-08-30 11:55:53'),
177: Timestamp('2019-09-06 14:51:14'),
178: Timestamp('2019-09-06 15:03:22'),
179: Timestamp('2019-09-06 15:46:11'),
180: Timestamp('2019-09-06 16:08:03'),
181: Timestamp('2019-09-06 17:13:01'),
182: Timestamp('2019-09-16 21:38:29'),
183: Timestamp('2019-09-25 12:35:29'),
184: Timestamp('2019-09-25 22:22:51')}}
df = pd.DataFrame(data=data)
df.sort_values(by='order_date')
fig1 = px.line(df, x='order_date', y='sales').update_traces(line_color='lightgrey')
fig2 = px.scatter(df, x='order_date', y='sales',color='content',symbol='content', color_discrete_sequence=px.colors.qualitative.Pastel)
fig3 = go.Figure(data=fig1.data + fig2.data)
fig3.show()