如何用基础Python绘制不同取值范围DataFrame列的非交互并排箱线图
解决方案
完全可以使用matplotlib的子图接口实现你需要的效果,输出纯静态的并排箱线图,每个子图独立适配对应参数的取值范围,布局和你之前用plotly实现的效果完全一致,没有多余交互元素。
实现代码
import matplotlib.pyplot as plt import numpy as np # 替换为你自己的待绘制字段列表 plot_cols = ['Current_Market_Cap', 'Last_Price', 'Alpha', "Beta"] # 创建1行多列的子图布局,sharey=False保证每个子图y轴独立缩放 fig, axes = plt.subplots( nrows=1, ncols=len(plot_cols), figsize=(4*len(plot_cols), 5), sharey=False ) for idx, col in enumerate(plot_cols): ax = axes[idx] # 绘制箱线主体 box_data = f_df[col].dropna() ax.boxplot(box_data, patch_artist=True, boxprops=dict(facecolor='#4C72B0', alpha=0.7)) # 叠加带抖动的原始散点,和原plotly代码的boxpoints='all', jitter=.3效果对齐 x_jitter = np.random.normal(loc=1, scale=0.04, size=len(box_data)) ax.scatter(x_jitter, box_data, alpha=0.5, s=10, color='#4C72B0') # 设置子图标题,隐藏无意义的x轴刻度 ax.set_title(col, fontsize=10) ax.set_xticks([]) # 自动调整子图间距,避免标签重叠 plt.tight_layout() # 展示图片,也可以调用plt.savefig("boxplot.png", dpi=300)直接保存为本地文件 plt.show()
效果说明
- 核心配置
sharey=False让每个子图的y轴独立适配当前字段的取值范围,彻底解决不同参数量级差异过大导致的展示变形问题 - 如果不需要展示原始散点,直接删除代码中
ax.scatter相关的两行即可,仅保留纯箱线图 - 可以通过修改
figsize参数调整整体画布的宽高,适配不同数量的绘制字段 - 输出为标准静态图片,可直接插入文档、报告使用,无任何交互控件。
内容的提问来源于stack exchange,提问作者Yellow_truffle
相关产品推荐
相关产品推荐

