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

如何用Python制作计数准确的Plotly柱状图并自定义颜色与悬停信息

解决Plotly柱状图的颜色与悬停计数问题

我来帮你搞定这几个问题,咱们一步步来:

问题根源分析

你原来的代码fig = px.bar(df, x=df["label"])其实是把每一行数据都当成了单独的柱子,所以每个标签下会有多个高度为1的小柱子,悬停时显示的count=1就是单个数据点的计数,颜色暗淡则是因为Plotly默认给同一类别的不同实例分配了相近的色调。

完整解决方案代码

首先我们先统计标签的实际计数,再基于统计结果画图,同时自定义颜色和悬停内容:

import pandas as pd
import plotly.express as px

# 构造你的示例数据
data = {"label": ["negative", "negative", "negative", "positive", "positive", "negative", "positive"]}
df = pd.DataFrame(data)

# 1. 先统计每个标签的总计数
counts_df = df["label"].value_counts().reset_index()
counts_df.columns = ["label", "count"]  # 重命名列,方便后续调用

# 2. 绘制柱状图,自定义颜色和显示内容
fig = px.bar(
    counts_df,
    x="label",
    y="count",  # 用统计后的计数作为y轴
    color="label",  # 按标签区分颜色
    color_discrete_map={"negative": "red", "positive": "blue"},  # 自定义颜色映射
    title="正负标签计数统计",
    labels={"count": "总计数"}  # 重命名y轴标签
)

# 3. 自定义悬停模板,显示正确的计数
fig.update_traces(
    hovertemplate="<b>标签类型:</b> %{x}<br><b>总计数:</b> %{y}<extra></extra>"
)

# 可选:调整柱子之间的间距
fig.update_layout(bargap=0.2)

fig.show()

关键步骤说明

  1. 统计计数:用value_counts()得到每个标签的实际总数,转换成结构化的DataFrame,这样Plotly就能直接画出对应高度的柱子,而不是每个数据点一个柱子。
  2. 自定义颜色:通过color_discrete_map参数精准指定negative为红色、positive为蓝色,完全符合你的需求。
  3. 修正悬停内容:用hovertemplate自定义悬停时显示的文本,把默认的count=1替换成实际的总计数%{y},<extra></extra>用来去掉默认的系列名称。

这样画出来的图就是两个并排的柱子,红色对应negative(计数4),蓝色对应positive(计数3),悬停时也能正确显示实际的总数值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:59:08