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

如何为Plotly柱状图的每个条形单独设置透明度?

为Plotly柱状图的每个条形单独设置透明度

Plotly Express的opacity参数是全局配置项,仅支持单个数值,无法通过列表为每个条形单独设置透明度,所以你传入[1, 1, 0.1, 0.1]时只会生效第一个值。下面提供两种可行的解决方法:

方法一:使用Plotly Graph Objects手动构建图表

Plotly Graph Objects(plotly.graph_objects)支持更精细的元素控制,可以为每个条形(对应一个trace)单独定义颜色和透明度:

import plotly.graph_objects as go
import pandas as pd

df1 = pd.DataFrame(dict(score=[93.3, 93.3, 92, 88], model=['model1', 'model2', 'model3', 'model4']))

# 定义每个模型对应的颜色和透明度
color_map = {
    "model1": "gray",
    "model2": "rgb(255, 10, 10)",
    "model3": "rgb(255, 10, 10)",
    "model4": "rgb(255, 10, 10)"
}
opacity_list = [1, 1, 0.1, 0.1]

fig = go.Figure()

# 逐个添加条形trace
for idx, row in df1.iterrows():
    fig.add_trace(go.Bar(
        x=[row['score']],
        y=[row['model']],
        marker=dict(
            color=color_map[row['model']],
            opacity=opacity_list[idx]
        ),
        name=row['model']
    ))

# 设置布局
fig.update_layout(
    xaxis_range=[80, 100],
    xaxis_title='Score',
    yaxis_title='',
    barmode='stack'  # 保持横向条形的排列方式,和px.bar一致
)

fig.show()

方法二:修改Plotly Express生成的图表对象

先用px.bar生成基础图表,再通过遍历图表的data属性(每个元素对应一个条形的trace),单独设置每个trace的透明度:

import plotly.express as px
import pandas as pd

df1 = pd.DataFrame(dict(score=[93.3, 93.3, 92, 88], model=['model1', 'model2', 'model3', 'model4']))
fig = px.bar(df1, x='score', y='model', color='model',
             color_discrete_map={
                "model1": "gray",
                "model2": "rgb(255, 10, 10)",
                "model3": "rgb(255, 10, 10)",
                "model4": "rgb(255, 10, 10)"})

# 为每个trace设置对应透明度
opacity_list = [1, 1, 0.1, 0.1]
for i, trace in enumerate(fig.data):
    trace.marker.opacity = opacity_list[i]

fig.update_layout(xaxis_range=[80,100], xaxis_title='Score', yaxis_title='')
fig.show()

内容的提问来源于stack exchange,提问作者Connor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:25:13