You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly绘图中按样本前缀统一线条颜色的技术需求

实现相同前缀样本线条统一颜色的解决方案

要让具有相同前缀的样本使用统一颜色,你可以通过前缀-颜色映射字典绑定对应关系,在循环添加 trace 时根据样本名称的前缀匹配颜色即可,具体修改如下:

步骤1:定义前缀与颜色的映射关系

先创建字典,将需要分组的前缀和对应颜色关联起来。既可以自定义颜色,也可以直接用 Plotly 内置的定性色板快速分配:

# 自定义前缀-颜色映射(示例)
prefix_colors = {
    "SA": "#1f77b4",   # 蓝色
    "Bulk": "#ff7f0e", # 橙色
    "Continental": "#2ca02c" # 绿色
}

# 或用Plotly内置色板自动分配(更快捷)
from plotly.colors import qualitative
prefixes = ["SA", "SampleX", "GroupY"]
prefix_colors = {p: qualitative.Plotly[i] for i, p in enumerate(prefixes)}

步骤2:修改循环添加trace的逻辑

在遍历样本的循环中,提取当前样本的前缀,从映射字典中获取对应颜色,将其设置到线条的color参数中:

for i, age_value in enumerate(age):
    sample_name = samples[i]
    # 提取前缀:这里以"开头前2个字符"为例,可根据你的样本命名规则调整
    # 比如样本名是SA-123/SA_456,可改为 prefix = sample_name.split("-")[0] 或 split("_")[0]
    prefix = sample_name[:2]
    
    # 获取对应颜色,若前缀不在映射中则用灰色作为默认
    line_color = prefix_colors.get(prefix, "#7f7f7f")
    
    a = [sri[i], srm[i]]
    b = [-(age_value), 0]
    fig2.add_trace(go.Scatter(
        x=b, 
        y=a, 
        mode='lines', 
        name=sample_name,
        line=dict(color=line_color)  # 绑定线条颜色
    ))

完整修改后的代码

整合后的代码如下:

import plotly.graph_objects as go
import plotly.express as px
from plotly.colors import qualitative

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'))

# 定义前缀-颜色映射(根据你的实际样本前缀调整)
prefixes = ["SA", "OtherPrefix1", "OtherPrefix2"]
prefix_colors = {p: qualitative.Plotly[i] for i, p in enumerate(prefixes)}

for i, age_value in enumerate(age):
    sample_name = samples[i]
    # 提取前缀:根据你的样本命名规则修改提取逻辑
    prefix = sample_name[:2]
    line_color = prefix_colors.get(prefix, "#7f7f7f")
    
    a = [sri[i], srm[i]]
    b = [-(age_value), 0]
    fig2.add_trace(go.Scatter(
        x=b, 
        y=a, 
        mode='lines', 
        name=sample_name,
        line=dict(color=line_color)
    ))


fig2.update_layout(
    xaxis=dict(
        title='Age (Ga)',
        range=[-4.5, 0]
    ),
    yaxis=dict(
        title='87Sr/86Sr',
        range=[0.65, 0.9]
    )
)

fig2.update_layout(
    template=large_rockwell_template
)

fig2.show()

注意事项

  • 前缀提取逻辑需要根据你的实际样本命名规则调整:如果样本名是SA-123、SA-456,可以用sample_name.split("-")[0]提取前缀;如果是SA123、SA456,则用sample_name[:2]即可。
  • 如果有新增的前缀,只需在prefixes列表中添加,内置色板会自动分配新的颜色,无需手动指定。

内容的提问来源于stack exchange,提问作者guilherme loriato potratz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:43:22