如何用Plotly绘制多饼图环形?支持自定义参数与悬停文本
如何绘制带悬停文本的Plotly分段环形图表?
给定以下示例数据,我们需要在每个(x,y)坐标点绘制由[a,b]参数决定比例的分段环形图,并为每个分段添加自定义悬停文本:
x = [1,2,3,4] y = [1,2,3,4] ab = [[1,1], [1,2], [3,7], [15,2]]
以下是可直接运行的解决方案,解决了原有方案无法添加悬停文本的问题:
import plotly.graph_objects as go import numpy as np def create_arc(x_center, y_center, radius, start_angle, end_angle, num_points=100): # 将角度转换为弧度 start_rad = np.deg2rad(start_angle) end_rad = np.deg2rad(end_angle) # 生成角度序列 angles = np.linspace(start_rad, end_rad, num_points) # 计算圆弧的x、y坐标 arc_x = x_center + radius * np.cos(angles) arc_y = y_center + radius * np.sin(angles) # 闭合圆弧(连接圆心) arc_x = np.concatenate([[x_center], arc_x, [x_center]]) arc_y = np.concatenate([[y_center], arc_y, [y_center]]) return arc_x, arc_y # 初始化图表 fig = go.Figure() # 环形半径 radius = 0.3 # 遍历每个数据点 for xi, yi, (a, b) in zip(x, y, ab): total = a + b # 计算两段圆弧的角度范围 angle_a = (a / total) * 360 # 添加a对应的分段 arc_x_a, arc_y_a = create_arc(xi, yi, radius, 0, angle_a) fig.add_trace(go.Scatter( x=arc_x_a, y=arc_y_a, fill='toself', hovertext=f"坐标: ({xi}, {yi})<br>数值: a={a}", hoverinfo='text', line=dict(color='white') )) # 添加b对应的分段 arc_x_b, arc_y_b = create_arc(xi, yi, radius, angle_a, 360) fig.add_trace(go.Scatter( x=arc_x_b, y=arc_y_b, fill='toself', hovertext=f"坐标: ({xi}, {yi})<br>数值: b={b}", hoverinfo='text', line=dict(color='white') )) # 设置布局 fig.update_layout( title='带悬停文本的分段环形图', xaxis=dict(range=[0, 5], showgrid=False, zeroline=False, tickmode='array', tickvals=x), yaxis=dict(range=[0, 5], showgrid=False, zeroline=False, tickmode='array', tickvals=y), showlegend=False, hovermode='closest' ) fig.show()
关键说明:
- 圆弧生成:通过
create_arc函数计算分段环形的坐标点,同时闭合圆弧(连接圆心)实现填充效果。 - 悬停文本:每个
Scatter轨迹直接设置hovertext属性,自定义显示坐标和对应数值,通过hoverinfo='text'确保只显示自定义文本。 - 样式调整:设置
line=dict(color='white')避免分段间的线条干扰,关闭网格线和刻度让图表更简洁。
内容的提问来源于stack exchange,提问作者hesoyami
相关产品推荐
相关产品推荐

