使用ggplot2绘图的小伙伴都了解ggplot2的优势是基于一套图形语法,让我们在绘图时将图形添加至不同的图层,大大增强了我们对数理统计绘图的可控性。我们常常通过看书或借鉴前人在网络上发布的绘图模板、教程等方式学习使用ggplot2,就会发现大家使用这套图形语法各有各的风格。新手接触各种逻辑不同的绘图模板就会云里雾里,反而加重了对ggplot2使用的不理解,可以说是日抛代码。
为了让学习曲线更平滑,同时也加深ggplot2的学习记忆,我用了一个简单的双坐标轴绘图来解说如何进行图层控制。
首先展示双坐标轴绘图的结果,然后再一步步分析如何实现该结果的图层控制步骤。也算是以后给自己再绘图时候的模板。
一个简单的双坐标轴绘图。
值得说明的是,这张图由两个数据集构成。主数据data集用于生成直方图,另一个数据集num根据主数据集计算得到百分比(折线图)。因为在我的测试中也尝试过在ggplot中使用group_by计算并映射,但是没有成功。后续工作中学习到新的方法再进行修改。不过这个代码也可以作为一张图要使用两个数据集共同绘制的例子。
p <- ggplot() + #先用函数,后续再使用+的方式添加图层
geom_bar(data = data, aes(x = year, fill = dummy), stat="count") + #绘制直方图
guides(fill = guide_legend(keywidth = 0.5, keyheight = 0.1, default.unit='inch')) + #添加直方图的图例
theme( legend.position = c(0.05, 1),
legend.justification = c("left", "top"),
legend.box.just = "left",
legend.text = element_text(size = 14)) + #控制图例位置和大小
scale_fill_hue(" ", breaks = c('FALSE','TRUE'),labels = c('样本a','样本b')) + #修改图例标签
geom_line(data = num, aes(x = year,y = percent*4000), size=1, colour = 'black') + #添加折线图,注意,折线图用了另一个数据集。由于折线图和直方图的数据含义倍数为1:4000,所以要相应的乘上倍数
geom_point(data = num, aes(x = year,y = percent*4000), size=3, colour = 'black') + #添加散点图,也就是折线图上的点,使点更明显
scale_y_continuous(sec.axis = sec_axis( ~./40, name = 'b在a+b中的占比 [%]')) + #添加右侧副坐标轴
scale_x_continuous(breaks = seq(2005, 2014, 1)) + #添加x轴的年份数字
geom_text(data = num_port, aes(x = year, label = countall, y = countall+70), size = 4.5) + #添加直方图第一行的数字标签,y=countall+70是为了控制标签的高度
geom_text(data = num, aes(x = year, label = co_invest, y = co_invest-60), size = 4.5, colour = 'white') + #添加直方图中间的标签
geom_text(data = num, aes(x = year, label = round(percent*100, 2), y = percent*4000+120), size = 4.5) + #添加折线图代表的百分比的标签
theme(plot.title = element_text(size = 22, hjust = 0.5), axis.text = element_text(size = 14), #修改图主题,定义主标题大小和位置
axis.title.x =element_text(size = 20), axis.title.y = element_text(size = 20),
panel.grid = element_blank()) + #定义主坐标轴的大小和位置
labs(title = '2005年-2014 a和b数量变化',
x = '时间',
y = '数量') #最后增加主要的坐标轴信息
p
其中的一个注意点:添加折线图时,由于折线图反映的百分比和直方图的数据倍数为1:4000,所以要相应的乘上倍数。可以看到geom_line那行的percent变量乘上了4000。
来源:CSDN
作者:谁是比亚
链接:https://blog.csdn.net/qq_39775142/article/details/104061394