Plotly:如何使用 plotly express 为多条迹线设置标记符号形状?
Plotly: How to set marker symbol shapes for multiple traces using plotly express?
我一直在尝试更改 plotly 散点图中的标记形状,但似乎找不到正确的选项。 plotly 文件超过了大小和不透明度,但没有超过标记的形状。这是我的示例代码-
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()
是否有可能实现我尝试使用 Plotly 散点图所做的事情?我尝试按照本论坛中的讨论进行操作- https://community.plotly.com/t/getting-different-markers-shapes/9944
但我很难将它与我的问题联系起来
我正在使用 Python 3.8 和 Plotly 4.11.0
我想通了-
import plotly.graph_objects as go
from plotly.validators.scatter.marker import SymbolValidator
import plotly.offline as pyo
vals = SymbolValidator().values
def Setcolor (x):
if x == "a":
return "blue"
elif x == "b":
return "orange"
elif x == "c":
return "green"
else:
return "brown"
def Setshape (x):
vals = SymbolValidator().values
return vals[3*x]
plot1 = go.Scatter(
x=df['Date'], y=df['Metric1'],
marker = dict(color=list(map(Setcolor, df['Color'])), symbol = list(map(Setshape, df['Marker']))),
mode='markers',name='Show1', showlegend = True
)
fig = go.Figure(data=[plot1])
pyo.plot(fig,filename='final_plot.html')
现在我的情节没有显示图例。我很确定这是一个简单的修复,但无法弄清楚我遗漏了什么!
答案:
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'])
一些细节:
使用 plotly express,您只需指定:
symbol = df['Marker']
# or simply symbol = 'Marker' if df is specified in px.scatter
...其中 marker
不是 标记 type 而是一个将数据类别彼此分开的值。很像你的例子:
11 4
12 1
13 2
14 3
15 4
这会给你:
如果您对指定的符号不满意,可以通过以下方式分配您自己的符号:
symbols = ['square', 'circle-dot', 'circle', 'circle-open']
fig.px.scatter([...], symbol_sequence = symbols)
您可能已经知道可以在 plotly.com/python/marker-style/ 上找到完整的交易品种列表。要复制您的原始图形,仅通过完整的图例进行改进,分配您选择的颜色所需要做的就是:
colors = ['blue', 'orange', 'green', 'brown']
px.scatter([...], color_discrete_sequence = colors)
剧情:
完整代码:
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()
我一直在尝试更改 plotly 散点图中的标记形状,但似乎找不到正确的选项。 plotly 文件超过了大小和不透明度,但没有超过标记的形状。这是我的示例代码-
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()
是否有可能实现我尝试使用 Plotly 散点图所做的事情?我尝试按照本论坛中的讨论进行操作- https://community.plotly.com/t/getting-different-markers-shapes/9944 但我很难将它与我的问题联系起来 我正在使用 Python 3.8 和 Plotly 4.11.0
我想通了-
import plotly.graph_objects as go
from plotly.validators.scatter.marker import SymbolValidator
import plotly.offline as pyo
vals = SymbolValidator().values
def Setcolor (x):
if x == "a":
return "blue"
elif x == "b":
return "orange"
elif x == "c":
return "green"
else:
return "brown"
def Setshape (x):
vals = SymbolValidator().values
return vals[3*x]
plot1 = go.Scatter(
x=df['Date'], y=df['Metric1'],
marker = dict(color=list(map(Setcolor, df['Color'])), symbol = list(map(Setshape, df['Marker']))),
mode='markers',name='Show1', showlegend = True
)
fig = go.Figure(data=[plot1])
pyo.plot(fig,filename='final_plot.html')
现在我的情节没有显示图例。我很确定这是一个简单的修复,但无法弄清楚我遗漏了什么!
答案:
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'])
一些细节:
使用 plotly express,您只需指定:
symbol = df['Marker']
# or simply symbol = 'Marker' if df is specified in px.scatter
...其中 marker
不是 标记 type 而是一个将数据类别彼此分开的值。很像你的例子:
11 4
12 1
13 2
14 3
15 4
这会给你:
如果您对指定的符号不满意,可以通过以下方式分配您自己的符号:
symbols = ['square', 'circle-dot', 'circle', 'circle-open']
fig.px.scatter([...], symbol_sequence = symbols)
您可能已经知道可以在 plotly.com/python/marker-style/ 上找到完整的交易品种列表。要复制您的原始图形,仅通过完整的图例进行改进,分配您选择的颜色所需要做的就是:
colors = ['blue', 'orange', 'green', 'brown']
px.scatter([...], color_discrete_sequence = colors)
剧情:
完整代码:
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()