该内容已被发布者删除 该内容被自由微信恢复
文章于 4月1日 上午 4:30 被检测为删除。
查看原文
被用户删除
其他

R语言绘图 | 双Y轴+柱状图+折线图

小陈的R语言笔记 小陈的R语言笔記 2024-04-01

写在前面

今天给大家推荐一下双Y轴图,因为有小伙伴问我怎么做,顺便更新一下。

准备数据

# 加载R包
library(ggplot2)

# 创建虚拟数据data1
data1 <- data.frame(
  supp=letters[1:5],  # 字母序列的前5个字母作为'supp'列的值
  value=sample(seq(50,120),5),  # 从50到120的序列中随机选择5个数字作为'value'列的值
  se= sample(seq(1,10),5) # 标准差
)

# 创建虚拟数据data2
data2 <- data.frame(
  supp=letters[1:5],  # 字母序列的前5个字母作为'supp'列的值
  value=sample(seq(3,7),5)  # 从3到7的序列中随机选择5个数字作为'value'列的值
)

#设置新罗马字体
windowsFonts(A=windowsFont("Times New Roman"),
             B=windowsFont("Arial"))
data1
data2

绘图

#绘图
p <- ggplot(data1, aes(supp, value)) +  # 创建 ggplot 对象,设置数据和映射
  geom_bar(aes(fill = supp),  # 添加柱形图层,按照 supp 变量填充颜色
           stat = "identity",  # 使用原始数据作为统计量
           color="black",  # 设置柱形边框颜色
           size=0.8,  # 设置柱形边框宽度
           position = position_dodge(0.9),  # 设置柱形分组间距
           width = 0.7,  # 设置柱形宽度
           alpha=0.5,  # 设置透明度
           data=data1) +  # 指定数据集
  geom_errorbar(  # 添加误差线
    aes(ymin = value-se,  # 指定误差下限
        ymax = value+se,  # 指定误差上限
        group = supp),  # 按照 supp 变量分组
    width = 0.3,  # 设置误差线宽度
    size=0.8,  # 设置误差线线条宽度
    position = position_dodge(0.9),  # 设置误差线分组间距
    data=data1  # 指定数据集
  ) +  # 结束误差线层
  scale_fill_manual(values = c("#223e9c","#b12b23","#aebea6","#edae11","#0f6657" )) +  # 设置填充颜色手动调整
  scale_y_continuous(limits = c(0,140),  # 设置 Y 轴范围
                     breaks = seq(0,140,20),  # 设置 Y 轴刻度
                     expand = c(0,0),  # 设置轴向空间扩展
                     sec.axis = sec_axis(~./17.5,  # 设置辅助 Y 轴,将原始值除以 17.5
                                         name = 'Y1',  # 设置辅助 Y 轴标签
                                         breaks = seq(0,8,2))) +  # 设置辅助 Y 轴刻度
  labs(x='X',y='Y2') +  # 设置坐标轴标签
  geom_point(data = data2,  # 添加点图层
             aes(x=supp,
                 value*17.5,  # 将值乘以 17.5
                 color="black"),  # 设置点的颜色为黑色
             size=4) +  # 设置点的大小
  geom_line(data = data2,  # 添加线图层
            aes(x=supp,
                value*17.5,  # 将值乘以 17.5
                color="black",  # 设置线的颜色为黑色
                group=1),  # 指定分组
            cex=1.3) +  # 设置线图元素的缩放比例
  scale_color_manual(values = c("black" )) +  # 设置线的颜色为黑色
  theme_bw() +  # 设置主题为白底
  theme(axis.ticks.length=unit(-0.25, "cm"),  # 设置刻度线长度
        axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")),  # 设置 X 轴文本的边距
        axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")) ) +  # 设置 Y 轴文本的边距
  theme(text=element_text(family="A",  # 设置字体
                          size=20))  # 设置字体大小
p  # 显示图形

完整版代码如下

# 加载R包
library(ggplot2)

# 创建虚拟数据data1
data1 <- data.frame(
  supp=letters[1:5],  # 字母序列的前5个字母作为'supp'列的值
  value=sample(seq(50,120),5),  # 从50到120的序列中随机选择5个数字作为'value'列的值
  se= sample(seq(1,10),5) # 标准差
)

# 创建虚拟数据data2
data2 <- data.frame(
  supp=letters[1:5],  # 字母序列的前5个字母作为'supp'列的值
  value=sample(seq(3,7),5)  # 从3到7的序列中随机选择5个数字作为'value'列的值
)

#设置新罗马字体
windowsFonts(A=windowsFont("Times New Roman"),
             B=windowsFont("Arial"))


#绘图
p <- ggplot(data1, aes(supp, value)) +  # 创建 ggplot 对象,设置数据和映射
  geom_bar(aes(fill = supp),  # 添加柱形图层,按照 supp 变量填充颜色
           stat = "identity",  # 使用原始数据作为统计量
           color="black",  # 设置柱形边框颜色
           size=0.8,  # 设置柱形边框宽度
           position = position_dodge(0.9),  # 设置柱形分组间距
           width = 0.7,  # 设置柱形宽度
           alpha=0.5,  # 设置透明度
           data=data1) +  # 指定数据集
  geom_errorbar(  # 添加误差线
    aes(ymin = value-se,  # 指定误差下限
        ymax = value+se,  # 指定误差上限
        group = supp),  # 按照 supp 变量分组
    width = 0.3,  # 设置误差线宽度
    size=0.8,  # 设置误差线线条宽度
    position = position_dodge(0.9),  # 设置误差线分组间距
    data=data1  # 指定数据集
  ) +  # 结束误差线层
  scale_fill_manual(values = c("#6a73cf","#edd064","#0eb0c8","#f2ccac","#a1d5b9" )) +  # 设置填充颜色手动调整
  scale_y_continuous(limits = c(0,140),  # 设置 Y 轴范围
                     breaks = seq(0,140,20),  # 设置 Y 轴刻度
                     expand = c(0,0),  # 设置轴向空间扩展
                     sec.axis = sec_axis(~./17.5,  # 设置辅助 Y 轴,将原始值除以 17.5
                                         name = 'Y1',  # 设置辅助 Y 轴标签
                                         breaks = seq(0,8,2))) +  # 设置辅助 Y 轴刻度
  labs(x='X',y='Y2') +  # 设置坐标轴标签
  geom_point(data = data2,  # 添加点图层
             aes(x=supp,
                 value*17.5,  # 将值乘以 17.5
                 color="black"),  # 设置点的颜色为黑色
             size=4) +  # 设置点的大小
  geom_line(data = data2,  # 添加线图层
            aes(x=supp,
                value*17.5,  # 将值乘以 17.5
                color="black",  # 设置线的颜色为黑色
                group=1),  # 指定分组
            cex=1.3) +  # 设置线图元素的缩放比例
  scale_color_manual(values = c("black" )) +  # 设置线的颜色为黑色
  theme_bw() +  # 设置主题为白底
  theme(axis.ticks.length=unit(-0.25, "cm"),  # 设置刻度线长度
        axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")),  # 设置 X 轴文本的边距
        axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")) ) +  # 设置 Y 轴文本的边距
  theme(text=element_text(family="A",  # 设置字体
                          size=20))  # 设置字体大小
p  # 显示图形



继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存