Plotly/Python中hovertemplate多字体设置及trace名称移除问题
Plotly堆叠条形图悬停文本问题解决方案
1. 给悬停文本第一行设置不同字体
Plotly支持在悬停文本中嵌入HTML标签,借助这一特性可以给第一行单独定义字体样式。具体操作:
- 用HTML的
<span>标签包裹第一行文本,通过style属性设置字体大小、粗细等样式; - 将trace的
hoverinfo设为'text',确保仅渲染自定义的HTML文本内容。
示例代码:
import plotly.graph_objects as go # 模拟《罗密欧与朱丽叶》角色台词数据 characters = ["罗密欧", "朱丽叶", "茂丘西奥", "劳伦斯神父"] act_counts = { "第一幕": [22, 15, 18, 10], "第二幕": [30, 25, 8, 12], "第三幕": [28, 20, 0, 15] } fig = go.Figure() for act, counts in act_counts.items(): hover_texts = [] for idx, (char, cnt) in enumerate(zip(characters, counts)): total = sum([act_counts[act][idx] for act in act_counts]) # 第一行设置加粗、放大字体,其余行保持默认样式 hover_content = ( f"<span style='font-size:16px; font-weight:bold;'>{char}</span><br>" f"幕次: {act}<br>" f"台词数量: {cnt}<br>" f"总占比: {round(cnt/total*100, 1)}%" ) hover_texts.append(hover_content) fig.add_trace(go.Bar( x=characters, y=counts, name=act, hovertext=hover_texts, hoverinfo='text' # 仅显示自定义文本,屏蔽默认信息 )) fig.update_layout(barmode='stack', title="《罗密欧与朱丽叶》各角色分幕台词数量") fig.show()
2. 移除悬停时显示的trace名称
要去掉悬停时侧边的trace名称,核心是让Plotly不渲染默认的trace标识,通过设置hoverinfo参数即可实现:
- 将每个trace的
hoverinfo设为'text'(如上述代码所示),此时只会显示你自定义的悬停文本,不会附带trace名称; - 若需要保留y轴数值等信息但去掉名称,可设置
hoverinfo='y+text',明确排除'name'字段。
如果是用plotly.express创建图表,也可以通过custom_data结合hover_data参数自定义悬停内容,同样能避免显示trace名称。
内容的提问来源于stack exchange,提问作者elnukakujo
相关产品推荐
相关产品推荐

