# 导入所需的R库
library(ggplot2) # 用于数据可视化
library(dplyr) # 用于数据处理和操作
library(forcats) # 用于因子(分类变量)操作
library(viridis) # 提供颜色盲友好的颜色选项
# 从GitHub读取数据集
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/10_OneNumSevCatSubgroupsSevObs.csv", header=T, sep=",") %>%
mutate(tip = round(tip/total_bill*100, 1)) # 读取数据并计算小费占总账单的百分比
# 对数据进行分组处理
data %>%
mutate(day = fct_reorder(day, tip)) %>% # 根据小费百分比重新排序星期x
mutate(day = factor(day, levels=c("Thur", "Fri", "Sat", "Sun"))) %>% # 明确星期天的顺序
ggplot(aes(fill=sex, y=tip, x=day)) + # 创建一个ggplot对象,设置填充颜色为性别,y轴为小费百分比,x轴为星期天
geom_violin(position="dodge", alpha=0.5, outlier.colour="transparent") + # 绘制小提琴图,调整位置,设置透明度,并使异常值透明
scale_fill_viridis(discrete=T, name="") + # 使用viridis颜色方案,适用于离散变量
theme_bw() +
xlab("") + # 不显示x轴标签
ylab("Tip (%)") + # 设置y轴标签为“小费百分比”
ylim(0,40) # 设置y轴的范围从0到40
结果展示: