在plotly中分组线条
我用Plotly做了下面这个图,但我每个样本都只有一种颜色。我希望相同首字母的样本能用相同的颜色。比如:所有以SA开头的样本都应该是同一种颜色。
fig2 = px.scatter()
fig2.add_trace(go.Scatter(x=x1, y=y1,
mode='lines',
name='Mantle Growth Curve', ))
fig2.add_trace(go.Scatter(x=x2, y=y2,
mode='lines',
name='Bulk Earth'))
fig2.add_trace(go.Scatter(x=x3, y=y3,
mode='lines',
name='Continental crust Rb/Sr = 0.17'))
for i, age_value in enumerate(age):
# Adicionar traço (trace) ao gráfico
a = [sri[i], srm[i]]
b = [-(age_value), 0]
fig2.add_trace(go.Scatter(x=b, y=a, mode='lines', name=samples[i]))
fig2.update_layout(
xaxis=dict(
title='Age (Ga)',
range=[-4.5, 0] # Definindo os valores mínimo e máximo do eixo X
),
yaxis=dict(
title='87Sr/86Sr',
range=[0.65, 0.9] # Definindo os valores mínimo e máximo do eixo Y
)
)
fig2.update_layout(
template=large_rockwell_template# Definindo a cor de fundo do gráfico
)
fig2.show()
我希望这些线条能根据相同的首字母用相同的颜色分组。
1 个回答
0
你需要找到一种方法,根据样本的前缀来定义颜色。你可以对前缀进行哈希处理,然后根据这个哈希值来获取一个颜色索引,下面的代码展示了这个过程。
import plotly.express as px
colors = px.colors.qualitative.Set1
for i, age_value in enumerate(age):
prefix = samples[i].split("-")[0]
color_index = hash(prefix) % len(colors)
a = [sri[i], srm[i]]
b = [-(age_value), 0]
fig2.add_trace(go.Scatter(x=b, y=a, mode='lines', name=samples[i], line=dict(color=colors[color_index]))