如何为含Code与Measure的pandas DataFrame生成分组箱线图?
如何按Code分组生成多个箱线图?
我懂你的问题啦——你想要针对Code的两个取值(1002和1200),分别画出Measure的箱线图(包含25分位、中位数、75分位这些统计量),但现在只生成了一个箱线,这是因为你没告诉pandas要按Code列来分组绘制。
下面给你两种简单的解决方法:
方法一:用Pandas自带的Boxplot指定分组参数
直接在boxplot()方法里加上by='Code',同时指定要绘制的数值列column='Measure',就能让pandas自动按Code的不同值分组生成箱线图。如果需要横向展示(和你原来的代码一致),保留vert=False即可:
import pandas as pd import matplotlib.pyplot as plt # 先构造你的DataFrame data = { 'Measure': [55.122, 49.166, 49.263, 59.156, 49.353, 43.000], 'Code': [1200, 1002, 1002, 1002, 1200, 1200] } ds = pd.DataFrame(data) # 生成分组箱线图的代码 fig, ax = plt.subplots(figsize=(10,5)) ds.boxplot(column='Measure', by='Code', vert=False, ax=ax) plt.subplots_adjust(left=0.25) plt.title('') # 去掉pandas自动生成的分组标题,让图更整洁 plt.suptitle('Measure分布按Code分组') # 添加自定义总标题 plt.show()
这段代码会生成两个独立的箱线,分别对应Code=1002和Code=1200的Measure数据,每个箱线都会自动计算并展示25th percentile、中位数、75th percentile等统计信息。
方法二:用Seaborn绘制更美观的分组箱线图
如果你想要更美观的可视化效果,可以用Seaborn库的boxplot(),它默认支持按列分组,参数也更直观:
import seaborn as sns import matplotlib.pyplot as plt # 构造你的DataFrame data = { 'Measure': [55.122, 49.166, 49.263, 59.156, 49.353, 43.000], 'Code': [1200, 1002, 1002, 1002, 1200, 1200] } ds = pd.DataFrame(data) plt.figure(figsize=(10,5)) sns.boxplot(x='Code', y='Measure', data=ds, orient='h') # orient='h'设置为横向展示 plt.subplots_adjust(left=0.25) plt.title('Measure分布按Code分组') plt.show()
Seaborn的默认样式会让箱线图看起来更清晰,同时也能完美实现你要的分组效果。
核心思路其实很简单:只要告诉绘图工具按Code列进行分组,就能生成对应每个Code值的独立箱线,而不是把所有数据混在一起画一个箱线。
内容的提问来源于stack exchange,提问作者Fluxy
相关产品推荐
相关产品推荐

