在plotly中分组线条

0 投票
1 回答
29 浏览
提问于 2025-04-14 16:43

我用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]))

撰写回答