R语言可视化基础(1):初识ggplot2

初始R语言ggplot2绘图包,了解其绘图逻辑

ggplot2的一些术语

绘图是一种数据属性到视觉属性的“映射”(mapping),或者说对应

Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象)。

  1. 数据(data): 用于可视化的对象,包含变量(variables),变量存储在数据库(dataframe)的每一列。ggplot2要求数据必须存储在数据框中,且每个属性变量必须独立集中存储在一列。
  2. 变量类型:类别型变量称为离散型变量,数值型则称为连续型变量
  3. 几何对象 (geom):用于呈现数据的几何图形,如点、线、多边形等,如geom_point,geom_bar,geom_line,geom_histogram,geom_boxplot,geom_density等用来绘制散点图、柱状图、折线图等等
  4. 图形属性 (aesthetic):几何对象的视觉属性,如x yzuobiao ,线的颜色
  5. 映射函数(aes):数据中的变量值与图形的映射,如 aes(x =变量1 , y = 变量2,col=变量3)
  6. 标度 (scale):从值到图形的转换关系,一般使用三个单词用_连接,如scale_fill_gradient和cale_x_continuous第一个都是scale,第二个是color fill x y linetype shape size等可更改的参数,第三个是具体的类型
  7. 统计变换(Statistics):如 stat_summary(fun.y = mean, geom = "line")计算均值并添加线,stat_smooth添加拟合曲线。
  8. 分面 (facet):将数据拆开,进行分层画图
  9. 主题 (theme):主题设定,与数据无关的很多属性可以通过这个函数实现。如边距等,ggplot默认有两个主题theme_grey()和theme_bw(), 设置当前主题的函数是theme_set()
    1. 根据需求对图的外观、属性等进行精细调节,详细参考
  10. 引导元素 (guide):向看图者将视觉属性映射回数据空间,常用的引导元素包括刻度线、标签等
  11. 注释 (annotate): 在图上增增加的注释,文字、线、框等

ggplot2采用了图层的概念进行画图,先画好基础图,然后再往上一层一层叠加图层,所以在进行ggplot2画图的时候,代码中会有大量的“+”,这就是对于图层的叠加。

绘图步骤

参考,导入包及数据,然后设置数据集映射指标,然后进行各种图层的叠加和属性的修改,最后导出图片,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
library(ggplot2)
data("diamonds")
set.seed(300) #设置种子,保证可重复
diamonds=sample_n(diamonds,size = 300)
# 开始绘图
dev.new()# 新建独立窗口
p = ggplot(data=diamonds,aes(x=carat,y=price))+
geom_point(size=3,shape=23,aes(fill=cut))
p = p+ geom_smooth(method = "lm")+
labs(y="price",x="carct")+
annotate("text",x=2,y=20000,size=5,label=expression(paste(italic("p_value"),"=0.005")))

p = p+scale_y_continuous(expand = c(0,0),limits = c(0,20000))+
scale_x_continuous(expand = c(0,0),limits = c(0,3))+ #设置值的范围,同时让点与x,y轴没有间隙
scale_fill_manual(values =c('#B4B4B4','#F7BC08',"#E94335","#1194C2","#954B98") )#设置点的颜色范围

p = p+theme_classic()+
theme(axis.title= element_text(size=20,color="black",face="bold"),
axis.text = element_text(size=15,color="black",face="bold"),
axis.line = element_line (color = "black",size = 1, linetype = "solid"), #线的类型粗细和颜色,这里的线只有两个轴
axis.ticks = element_line(color = "black",size = 1),
axis.ticks.length = unit(5, "pt"),
legend.position = "top", #图例的位置
legend.text = element_text(size=15,color="black",face="bold"),
legend.title = element_blank()
)
p

了解初步思路之后视情况进行对应图形的调整即可

输出文件-ggsave

pdf

参考-https://r-graphics.org/recipe-output-vector

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 快捷使用。
# 生成图形
plot1 <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point()
# Default is inches, but you can specify unit
ggsave("myplot.pdf", plot1, width = 8, height = 8, units = "cm")

# 以下方式可以可以多页绘图
# width and height are in inches. 创建并打开一个文件
pdf("myplot.pdf", width = 4, height = 4)
# 如果按尺寸转换,8x8 cm,这里和Python中是一样的
pdf("myplot.pdf", width = 8/2.54, height = 8/2.54)
# 绘图
plot(mtcars$wt, mtcars$mpg)
print(ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point())
# 结束绘图并写出
dev.off()

svg

参考-https://r-graphics.org/recipe-output-vector-svg

1
2
3
4
5
6
7
library(svglite)
svglite("myplot.svg", width = 4, height = 4)
plot(...)
dev.off()

# With ggsave()
ggsave("myplot.svg", width = 8, height = 8, units = "cm")

png

参考-https://r-graphics.org/recipe-output-bitmap

1
2
3
4

ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
# Default dimensions are in inches, but you can specify the unit
ggsave("myplot.png", width = 8, height = 8, unit = "cm", dpi = 300)

参考

  • ggplot2|详解八大基本绘图要素:https://zhuanlan.zhihu.com/p/77875382

  • R数据可视化手册:https://r-graphics.org/index.html

  • ggplot2的绘图逻辑:其他1其他2

  • 如何在论文中画出漂亮的插图?https://www.zhihu.com/question/21664179/answer/2747278312