如何在R中按政权类型子集绘制Score和Rank的箱线图
嘿,这事儿好办!针对你的gov数据集,我给你准备了两种主流工具的实现方案——R(用ggplot2)和Python(用seaborn),你挑自己顺手的来:
方案一:用R的ggplot2绘制
要实现每种政权类型下四个变量的箱线图,核心是先把宽格式数据转成长格式,这样ggplot能更方便地分组绘图:
- 先加载必需的包:
library(ggplot2) library(tidyr) # 用于数据格式转换
- 将你的宽格式数据转为长格式:
# 假设你的数据集已经存为数据框gov gov_long <- gov %>% pivot_longer( cols = c(EstScore1, rank1, EstScore2, rank2), # 指定要转换的变量 names_to = "Variable", # 新列,存储原变量名 values_to = "Value" # 新列,存储对应变量的数值 )
- 绘制分面箱线图(每个政权类型一个子图,展示四个变量的分布):
ggplot(gov_long, aes(x = Variable, y = Value)) + geom_boxplot(fill = "lightblue", alpha = 0.7) + # 设置箱线图样式 facet_wrap(~ regime, ncol = 2) + # 按政权类型分面,每行2个图 labs( title = "Boxplots of Variables by Regime Type", x = "Variable Name", y = "Variable Value" ) + theme_bw() # 用简洁的白色背景主题
方案二:用Python的Seaborn绘制
Python这边思路和R一致,先转长格式再绘图:
- 加载所需库:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt
- 转换数据格式:
# 假设你的数据集已经读入为DataFrame gov gov_long = pd.melt( gov, id_vars=['regime'], # 保留的分组列 value_vars=['EstScore1', 'rank1', 'EstScore2', 'rank2'], # 要转换的变量 var_name='Variable', # 存储原变量名的列 value_name='Value' # 存储数值的列 )
- 生成分面箱线图:
# 绘制箱线图,按政权类型分面 sns.catplot( data=gov_long, x='Variable', y='Value', kind='box', col='regime', # 按regime列分面 col_wrap=2, # 每行显示2个分面 palette='light:#5A9' # 设置配色 ) plt.suptitle('Boxplots of Variables by Regime Type', y=1.02) # 调整标题位置避免被遮挡 plt.show()
如果想调整图的布局(比如改成每行3个分面),只需要修改facet_wrap(R)或col_wrap(Python)的参数值就行~
内容的提问来源于stack exchange,提问作者J_S_L
相关产品推荐
相关产品推荐

