折线图给出颜色参数的不同轨迹

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

我有一个这种形式的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
值,但错误仍然存在。

任何帮助将不胜感激。

python plotly plotly-python
1个回答
0
投票

当您在 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()

© www.soinside.com 2019 - 2024. All rights reserved.