如何用Plotly Express绘制含均值与标准差的联合分布椭圆图?
用Plotly Express绘制基于均值与标准差的联合分布椭圆图
现有数据与已实现功能
变量统计数据
x_stats = {'count': 100.0, 'mean': -0.19, 'std': 0.23, 'min': -0.67, '25%': -0.38, '50%': -0.15, '75%': -0.02, 'max': 0.34} y_stats = {'count': 100.0, 'mean': 0.34, 'std': 0.08, 'min': 0.15, '25%': 0.28, # Q1 '50%': 0.34, # Q2 '75%': 0.38, # Q3 'max': 0.62}
已实现的箱线图代码
import plotly.graph_objects as go fig = go.Figure() fig.add_trace(go.Box()) fig.update_traces(q1=[x_stats.get('25%'), y_stats.get('25%')], median=[x_stats.get('50%'), y_stats.get('50%')], q3=[x_stats.get('75%'), y_stats.get('75%')], lowerfence=[x_stats.get('min'), y_stats.get('min')], upperfence=[x_stats.get('max'), y_stats.get('max')], mean=[x_stats.get('mean'), y_stats.get('mean')], sd=[x_stats.get('std'), y_stats.get('std')], ) fig.show()
需求
需要绘制仅包含坐标轴与一个椭圆的图形,展示两个变量的联合分布:椭圆中心为(x均值, y均值),椭圆的长短轴分别对应X变量的标准差、Y变量的标准差,以此体现两个变量的均值与离散程度。
解决方案
Plotly Express没有直接生成椭圆的API,我们可以先通过参数方程生成椭圆坐标点,再用Plotly Express的绘图函数实现需求:
代码实现
import plotly.express as px import numpy as np # 提取核心统计参数 mean_x = x_stats['mean'] std_x = x_stats['std'] mean_y = y_stats['mean'] std_y = y_stats['std'] # 生成椭圆轮廓的坐标点 theta = np.linspace(0, 2 * np.pi, 100) x_ellipse = mean_x + std_x * np.cos(theta) y_ellipse = mean_y + std_y * np.sin(theta) # 绘制椭圆 fig = px.line(x=x_ellipse, y=y_ellipse, labels={'x': 'X变量', 'y': 'Y变量'}, title='X-Y变量联合分布椭圆') # 添加均值点标记 fig.add_scatter(x=[mean_x], y=[mean_y], mode='markers', marker=dict(color='red', size=8), name='均值点') # 调整坐标轴比例,避免椭圆变形 fig.update_layout(xaxis=dict(scaleanchor="y", scaleratio=1), xaxis_title='X变量', yaxis_title='Y变量') fig.show()
关键说明
- 利用椭圆参数方程生成100个坐标点,确保椭圆轮廓平滑;
- 通过
px.line绘制椭圆轮廓,add_scatter添加均值位置的红色标记点; - 设置
scaleanchor和scaleratio保证坐标轴比例一致,避免椭圆因坐标轴缩放出现变形。
内容的提问来源于stack exchange,提问作者acciolurker
相关产品推荐
相关产品推荐

