该内容已被发布者删除 该内容被自由微信恢复。
文章于 4月1日 上午 4:30 被检测为删除。
被用户删除
其他
R语言绘图 | 双Y轴+柱状图+折线图
写在前面
❝今天给大家推荐一下双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"))
绘图
#绘图
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 # 显示图形