当前位置: 首页 > article >正文

go.Bar如何在lengend超长时候显示省略号,但是在hover时候显示完整值

Plotlygo.Bar 图中,图例 (legend) 的显示内容过长时,可以通过以下方式实现:

  1. 在图例中显示省略号(通过限制图例名称长度)。
  2. 当用户将鼠标悬停在图例上时,通过悬停提示显示完整的名称。

虽然 Plotly 没有直接提供“自动省略图例并在悬停时显示完整值”的功能,但可以通过以下步骤实现这个效果:


方法 1:手动截断图例名称并自定义悬停提示

我们可以将 name 参数设置为截断的名称,并使用 hoverlabelcustomdata 配合悬停时显示完整值。

代码示例
import plotly.graph_objects as go

# 长名称
full_names = ["This is a very long legend label for Group A", "Another extremely long legend for Group B"]
truncated_names = [name[:20] + "..." for name in full_names]  # 手动截断为 20 个字符并添加省略号

# 创建图表
fig = go.Figure()

# 添加第一个数据集
fig.add_trace(go.Bar(
    x=["A", "B", "C"],
    y=[10, 20, 15],
    name=truncated_names[0],  # 图例显示为截断名称
    customdata=[full_names[0]],  # 将完整名称存入 customdata
    hovertemplate='%{customdata}<br>Value: %{y}<extra></extra>'  # 悬停显示完整名称
))

# 添加第二个数据集
fig.add_trace(go.Bar(
    x=["A", "B", "C"],
    y=[5, 15, 10],
    name=truncated_names[1],  # 图例显示为截断名称
    customdata=[full_names[1]],  # 将完整名称存入 customdata
    hovertemplate='%{customdata}<br>Value: %{y}<extra></extra>'  # 悬停显示完整名称
))

# 显示图表
fig.show()
实现效果
  1. 图例中显示截断的名称(带省略号)。
  2. 鼠标悬停在柱子上时,会显示完整的名称和对应的值。

方法 2:自定义 HTML 样式控制图例文本的宽度

可以通过 layout.legend 中的 title 和 CSS 样式来限制图例的显示宽度,并让过长的文字自动显示省略号。

代码示例
import plotly.graph_objects as go

fig = go.Figure()

# 添加数据
fig.add_trace(go.Bar(
    x=["A", "B", "C"],
    y=[10, 20, 15],
    name="This is a very long legend label for Group A",
    hovertemplate='Group A<br>Value: %{y}<extra></extra>'
))

fig.add_trace(go.Bar(
    x=["A", "B", "C"],
    y=[5, 15, 10],
    name="Another extremely long legend for Group B",
    hovertemplate='Group B<br>Value: %{y}<extra></extra>'
))

# 设置图例样式
fig.update_layout(
    legend=dict(
        title="Legend Title",
        x=0.1,  # 图例在图表中的位置
        y=1.0,
        font=dict(size=12),  # 图例字体大小
        itemsizing='constant'
    )
)

fig.show()

方法 3:动态调整显示长度

如果需要自动调整长度,可以写一个函数动态计算截断的位置。以下示例将图例名称限制为 10 个字符加省略号,鼠标悬停时显示完整值:

def truncate_name(name, max_length=10):
    return name if len(name) <= max_length else name[:max_length] + "..."

# 使用函数生成截断名称
names = ["This is a very long legend label for Group A", "Another extremely long legend for Group B"]
truncated_names = [truncate_name(name, max_length=15) for name in names]

然后将 truncated_nameshovertemplate 结合使用,如方法 1。


总结

  • 图例显示省略号:通过截断字符串(如 name[:20] + "...")。
  • 完整值显示:使用 hovertemplatecustomdata 将完整值显示在鼠标悬停时。

hovertemplate如何不显示name值

Plotlyhovertemplate 中,可以通过自定义模板控制悬停时显示的内容,并通过 <extra></extra> 标签来隐藏默认显示的 name 值。

默认情况下,Plotly 会在悬停框中显示图例名称(即 name 的值)。如果不希望显示它,可以使用以下方法。


隐藏 name 值的方法

关键点:
  1. 使用 hovertemplate 自定义悬停文本。
  2. 添加 <extra></extra> 标签到模板中,可以完全隐藏 name 值。

示例代码

import plotly.graph_objects as go

fig = go.Figure()

# 添加第一个柱状图
fig.add_trace(go.Bar(
    x=["A", "B", "C"],
    y=[10, 20, 15],
    name="Group A",  # 图例名称
    hovertemplate='Value: %{y}<extra></extra>'  # 自定义悬停显示内容并隐藏 name
))

# 添加第二个柱状图
fig.add_trace(go.Bar(
    x=["A", "B", "C"],
    y=[5, 15, 10],
    name="Group B",  # 图例名称
    hovertemplate='Value: %{y}<extra></extra>'  # 隐藏 name 值
))

# 显示图表
fig.show()

效果说明

  1. 悬停显示内容

    • 只会显示 Value: 10(或其他对应值)。
    • name(如 Group AGroup B)将不会出现在悬停提示中。
  2. <extra></extra> 的作用

    • 默认情况下,Plotly 在悬停框中会自动附加 name 的值。
    • <extra></extra> 用于清除这一附加内容。

灵活性:只隐藏 name,保留其他内容

如果需要完全定制显示内容(例如显示 X 值和 Y 值,但隐藏 name),可以通过 hovertemplate 定义。以下是一个例子:

fig.add_trace(go.Bar(
    x=["A", "B", "C"],
    y=[10, 20, 15],
    name="Group A",
    hovertemplate='X: %{x}<br>Y: %{y}<extra></extra>'  # 显示 X 和 Y,但不显示 name
))
悬停效果:
X: A
Y: 10

与其他属性配合

  1. 保留自定义数据
    如果需要额外显示一些自定义数据,可以使用 customdata

    fig.add_trace(go.Bar(
        x=["A", "B", "C"],
        y=[10, 20, 15],
        name="Group A",
        customdata=["Custom 1", "Custom 2", "Custom 3"],
        hovertemplate='Custom Data: %{customdata}<br>Value: %{y}<extra></extra>'
    ))
    
    悬停效果:
    Custom Data: Custom 1
    Value: 10
    
  2. 完全自定义悬停框
    如果需要在悬停框中展示多行数据或格式化内容,可以通过 HTML 样式实现。例如:

    hovertemplate = '<b>Custom Title</b><br>X: %{x}<br>Y: %{y}<extra></extra>'
    

总结

  • 使用 hovertemplate 来完全控制悬停提示的内容。
  • 使用 <extra></extra> 标签隐藏默认的 name 值。
  • 可以结合 customdata 或其他字段实现更加个性化的显示内容。

http://www.kler.cn/a/461641.html

相关文章:

  • 【Domain Generalization(2)】领域泛化在文生图领域的工作之——PromptStyler(ICCV23)
  • 微服务实战——购物车模块实战
  • 【可实战】需求分析-测试计划↓-测试设计-测试执行-测试总结↓(包含测试计划、测试总结模板,以公司要求为准)
  • const修饰指针
  • 电子电气架构 --- 中央处理器HPC及软件架构
  • vue2实现excel文件预览
  • Leetcode 10-正则表达式匹配/ 剑指 Offer 19. 正则表达式匹配
  • redis - 集群知识
  • Vue强制渲染组件部分:技巧详解与实战应用
  • 水库水雨情监测系统:水位、雨量、流量等参数全天候实时监测
  • ubuntu安装qt creator 并配置交叉编译环境
  • 生物信息-linux-centos8-安装blast
  • PageView组件的用法
  • Java开发-后端请求成功,前端显示失败
  • Scrapy和Selenium结合使用完整步骤
  • [微服务] - MQ入门
  • 19704 团建
  • Arduino 小白的 DIY 空气质量检测仪(3)- TVOC模块、CO2模块
  • Ungoogled Chromium127编译指南 Linux篇 - Docker简介(五)
  • R语言入门笔记:第一节,快速了解R语言——文件与基础操作
  • [C#] 「Unity」「游戏开发」如何在Canvas下的Button控件下实例化Image元素
  • 【Python】 glob批处理模块的学习
  • 如何使用C++ 实现类似 Qt 的信号与槽机制
  • 碰一碰矩阵发视频的技术开发,支持OEM
  • I.MX6ULL-GPT实现延时
  • 亚矩阵云手机技术形态与应用方向