px.line 非常适合高度多样性的数据集,例如跨越几大洲的一系列国家/地区的不同类别,因为您可以使用 color = 'country、line_dash = 'continent 等参数来区分类别,从而为它们分配颜色和形状。这是一个使用内置数据集px.data.gapminder()子集的示例
情节 1
代码 1
import plotly.express as px
from plotly.validators.scatter.marker import SymbolValidator
# data
df = px.data.gapminder()
df = df[df['country'].isin(['Canada', 'USA', 'Norway', 'Sweden', 'Germany'])]
# plotly
fig = px.line(df, x='year', y='lifeExp',
color='country',
line_dash = 'continent')
fig.show()
但您似乎也对标记的不同形状感兴趣,而且似乎没有像color 和line_shape。因此,接下来是一种循环使用可用标记形状并将其应用于不同国家的方法。您当然可以通过从marker styles 中挑选形状来定义自己的序列,例如:
['arrow-bar-left', 'asterisk', 'arrow-right', 'line-ne', 'circle-cross', 'y-left']
但您也可以根据raw_symbols = SymbolValidator().values 获取一堆样式,稍微改进这些发现并将其添加到例如国家名称中。
这是结果
你是这样做的:
import plotly.express as px
from itertools import cycle
# data
df = px.data.gapminder()
df = df[df['country'].isin(['Canada', 'USA', 'Norway', 'Sweden', 'Germany'])]
# plotly
fig = px.line(df, x='year', y='lifeExp',
color='country',
line_dash = 'continent')
# retrieve a bunch of markers
raw_symbols = SymbolValidator().values
namestems = []
namevariants = []
symbols = []
for i in range(0,len(raw_symbols),3):
name = raw_symbols[i+2]
symbols.append(raw_symbols[i])
namestems.append(name.replace("-open", "").replace("-dot", ""))
namevariants.append(name[len(namestems[-1]):])
markers = cycle(list(set(namestems)))
# set unique marker style for different countries
fig.update_traces(mode='lines+markers')
for d in fig.data:
d.marker.symbol = next(markers)
d.marker.size = 10
fig.show()