Plotly:如何使用plotlyexpress设置多条迹线的标记符号形状?

Dee*_*pak 11 python plotly plotly-python

我一直在尝试更改散点图中的标记形状,但我似乎找不到正确的选项。绘图文档涵盖了大小和不透明度,但没有涵盖标记形状。这是我的示例代码-


import pandas as pd
import plotly.express as px

d = {'Date': ['01/01/1990','01/01/1990','01/01/1990','01/01/1990',
             '01/01/2000','01/01/2000','01/01/2000','01/01/2000',
             '01/01/2010','01/01/2010','01/01/2010','01/01/2010',
             '01/01/2020','01/01/2020','01/01/2020','01/01/2020'
             ]}
df = pd.DataFrame(data=d)

df['Metric1']=[100, 110, 120, 130,
 200, 210, 220, 230,
 300, 310, 320, 330,
 400, 410, 420, 430]
df['Marker']=[1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]
df['Color']=['a', 'b', 'c', 'd',
 'a', 'b', 'c', 'd',
 'a', 'b', 'c', 'd',
 'a', 'b', 'c', 'd']
fig = px.scatter(df, x='Date', y='Metric1', color = 'Color', hover_data = ["Color", "Marker"])
fig.show()
Run Code Online (Sandbox Code Playgroud)

是否可以实现我想要用 Plotly 散点图做的事情?我尝试遵循此论坛中的讨论 - https://community.plotly.com/t/getting- Different-markers-shapes/9944 但我是很难将其与我的问题联系起来我正在使用 Python 3.8 和 Plotly 4.11.0

ves*_*and 14

答案:

fig = px.scatter(df, x='Date', y='Metric1',
                 color = 'Color', hover_data = ["Color", "Marker"],
                 symbol = df['Marker'],
                 symbol_sequence= ['circle-open', 'circle', 'circle-open-dot', 'square'],
                 color_discrete_sequence = ['blue', 'orange', 'green', 'brown'])
Run Code Online (Sandbox Code Playgroud)

一些细节:

使用plotlyexpress,你所要做的就是指定:

symbol = df['Marker']
# or simply symbol = 'Marker' if df is specified in px.scatter
Run Code Online (Sandbox Code Playgroud)

...其中marker不是标记类型,而是将数据类别彼此分开的值很像你的例子:

11    4
12    1
13    2
14    3
15    4
Run Code Online (Sandbox Code Playgroud)

这会给你:

在此输入图像描述

如果您对指定的符号不满意,可以通过以下方式分配自己的符号:

symbols = ['square', 'circle-dot', 'circle', 'circle-open']
fig.px.scatter([...], symbol_sequence = symbols)
Run Code Online (Sandbox Code Playgroud)

您可能已经知道可以在plotly.com/python/marker-style/上找到完整的符号列表。要复制您的原始图形,仅通过完全工作的图例进行改进,您所要做的就是分配您选择的颜色:

colors = ['blue', 'orange', 'green', 'brown']
px.scatter([...], color_discrete_sequence = colors)
Run Code Online (Sandbox Code Playgroud)

阴谋:

在此输入图像描述

完整代码:

import pandas as pd
import plotly.express as px

d = {'Date': ['01/01/1990','01/01/1990','01/01/1990','01/01/1990',
             '01/01/2000','01/01/2000','01/01/2000','01/01/2000',
             '01/01/2010','01/01/2010','01/01/2010','01/01/2010',
             '01/01/2020','01/01/2020','01/01/2020','01/01/2020'
             ]}
df = pd.DataFrame(data=d)

df['Metric1']=[100, 110, 120, 130,
                 200, 210, 220, 230,
                 300, 310, 320, 330,
                 400, 410, 420, 430]
df['Marker']=[1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]
df['Color']=['a', 'b', 'c', 'd',
             'a', 'b', 'c', 'd',
             'a', 'b', 'c', 'd',
             'a', 'b', 'c', 'd']

symbols = ['circle-open', 'circle', 'circle-open-dot', 'square']
colors = ['blue', 'orange', 'green', 'brown']

fig = px.scatter(df, x='Date', y='Metric1', color = 'Color', hover_data = ["Color", "Marker"],
                 symbol = df['Marker'],
                 symbol_sequence=symbols,
                 color_discrete_sequence = colors
                )
fig.show()
Run Code Online (Sandbox Code Playgroud)