如何用Seaborn将numpy类型变量列表绘制在同一张箱线图中?
没问题,我来帮你搞定这个多箱线图的绘制!你已经准备好了每个职业对应的年龄numpy数组列表occpuation_age,接下来用Seaborn可以轻松把它们画在同一张图里,我给你两种实用的方法:
方法一:转成DataFrame绘制(推荐,更贴合Seaborn风格)
Seaborn的绘图函数通常更适配长格式的DataFrame,这样后续调整样式、添加分组逻辑都会更方便。我们可以把现有的职业列表和年龄数组转成DataFrame:
首先导入需要的库:
import seaborn as sns import matplotlib.pyplot as plt import pandas as pd
然后把数据整理成结构化的DataFrame:
# 把职业和对应的年龄数据配对,生成每条记录对应一个用户的职业+年龄 plot_data = [] for job, age_group in zip(occupations, occpuation_age): for age in age_group: plot_data.append({"职业": job, "年龄": age}) # 转换为DataFrame格式 age_df = pd.DataFrame(plot_data)
接下来就可以绘制箱线图了:
# 设置Seaborn的绘图风格,让图表更美观 sns.set_style("whitegrid") # 创建画布,设置合适的大小避免标签重叠 plt.figure(figsize=(12, 7)) # 绘制箱线图,x轴是职业分类,y轴是年龄数据 sns.boxplot(x="职业", y="年龄", data=age_df, palette="Set2") # 添加标题和轴标签 plt.title("定期存款订阅用户各职业年龄分布", fontsize=14, pad=15) plt.xlabel("职业", fontsize=12) plt.ylabel("年龄", fontsize=12) # 旋转x轴标签45度,防止文字挤在一起,同时设置右对齐更美观 plt.xticks(rotation=45, ha="right") # 自动调整布局,避免标签被画布截断 plt.tight_layout() # 显示图形 plt.show()
方法二:直接用numpy数组列表绘制(快速简洁)
如果你不想转DataFrame,也可以直接用matplotlib的boxplot函数配合Seaborn的风格来绘制:
import seaborn as sns import matplotlib.pyplot as plt # 设置Seaborn的绘图风格 sns.set_style("whitegrid") # 创建画布 plt.figure(figsize=(12, 7)) # 直接传入numpy数组列表绘制箱线图 plt.boxplot(occpuation_age) # 设置x轴标签为职业名称,注意要从1开始对应每个箱线图的位置 plt.xticks(range(1, len(occupations)+1), occupations, rotation=45, ha="right") # 添加标题和轴标签 plt.title("定期存款订阅用户各职业年龄分布", fontsize=14, pad=15) plt.xlabel("职业", fontsize=12) plt.ylabel("年龄", fontsize=12) plt.tight_layout() plt.show()
小提示
- 如果某个职业对应的年龄数组是空的,绘制时可能会报错,建议提前检查:
[len(arr) for arr in occpuation_age],看看有没有长度为0的元素 - 可以通过
palette参数调整箱线图的配色,比如palette="viridis"或者自定义颜色列表 - 如果想突出某个职业的箱线图,可以单独设置它的颜色
内容的提问来源于stack exchange,提问作者akram malek
相关产品推荐
相关产品推荐

