如何像散点图一样为Plotly箱线图添加悬停文本标签?
Plotly 箱线图直接传入text参数默认不会自动绑定到悬停内容,通过自定义悬停模板即可实现需求,两种常用场景的实现方式如下:
方案1:仅异常值显示对应销售人员信息
适配「查看异常值对应采购记录销售人员」的核心需求,保留默认箱线图仅突出异常值的样式,只需要给go.Box增加hovertemplate参数,把销售人员字段嵌入悬停内容即可。
修正后的可运行代码:
import plotly.offline as pyo import plotly.graph_objs as go import pandas as pd purchase={'date':['11/03/2021','12/03/2021','14/03/2021','11/03/2021'], 'price':[300, 400,200, 200], 'currency':['eur', 'usd','usd','usd'], 'qty':[200, 300, 400, 500], 'salesman':['AC', 'BC', "CC", 'DC']} pur=pd.DataFrame(purchase) x = pur['date'] y = pur['price'] data = [ go.Box( y=y, x=x, text=pur['salesman'], # 自定义悬停内容格式,<extra></extra>用于隐藏悬停框默认的轨迹名后缀 hovertemplate='日期: %{x}<br>价格: %{y}<br>销售人员: %{text}<extra></extra>' ) ] layout = go.Layout( title = '带异常值销售人员信息的箱线图' ) fig = go.Figure(data=data, layout=layout) fig.show()
运行后鼠标悬停在箱体、须线、中位数线等统计元素上时,会展示对应日期分组的价格统计值;悬停在异常值点上时,会自动展示该条异常记录对应的销售人员信息。
方案2:所有原始数据点悬停都显示销售人员信息
如果需要展示所有采购记录点,而非仅显示异常值,只需要增加boxpoints相关参数,开启全量点显示即可:
data = [ go.Box( y=y, x=x, text=pur['salesman'], boxpoints='all', # 显示所有原始数据点 jitter=0.3, # 增加横向抖动避免同价位点重叠 pointpos=0, # 控制点相对于箱体的横向位置 hovertemplate='日期: %{x}<br>价格: %{y}<br>销售人员: %{text}<extra></extra>' ) ]
该模式下所有原始采购点都会渲染在图上,任意点悬停都能看到对应销售人员信息。
内容的提问来源于stack exchange,提问作者Zaur
相关产品推荐
相关产品推荐

