zl程序教程

您现在的位置是:首页 >  其他

当前栏目

R语言作图基础20230206

2023-03-07 09:03:40 时间

一、常用的可视化包

1)作图包

base:

ggplot2:

ggpubr:

2)拼图包

par里面的mfrow

grid.arrange

cowplot

customLayout

patchwork

二、基础包绘图函数

ps:高级绘图函数是指可以绘制出一张图,而低价绘图函数是指在图中添加的“零部件”,低级绘图函数必须在高级绘图函数的基础上才能绘制,二者都是base包的内容

eg:plot绘图

> plot(iris[,1],iris[,3],col=iris[,5]) #以iris表格第一列作为x轴,第三列作为y轴,根据品种来绘制不同颜色
> text(6.5,4,label="hello") #添加文字,并加上坐标

三、ggplot2绘图(最常用的绘图R包)

⚠️⚠️首先必须 library(ggplot2)

1)入门:映射

> ggplot(data = iris)+
      geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length))

1⃣️ggplot是绘制整个画板,data是用于画图的数据

2⃣️geom_point是绘制点图

3⃣️mapping=aes() 开始映射,即x轴的数据是Sepal.Length,y轴数据Petal.Length,不需要加引号

(以上代码的数据的映射放在了具体的geom_point函数中,如果整体映射是一致的,可以把映射放到ggplot()中,这样子如果没有特殊情况,后面的绘图函数不需要重新映射,但是如果映射在geom_开头的函数中,每一个函数都需要重新映射)

例如:

> ggplot(data=iris,mapping = aes(x = Sepal.Length,y = Petal.Length))+geom_point()

以上两种代码的写法,最后画出的图是一致的!!

2)手动设置相关属性

>ggplot(data = iris) + geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length),  
                                                             size = 5,     # 点的大小5mm   
                                                            alpha = 0.5,  # 透明度 50%             
                                                            shape = 8,   #点的形状            
                                                             color="blue") #颜色设置

shape=. 不同的数字代表不同点点的形状

3)通过映射来定义图的某个属性

ggplot(data = iris)+  geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length, color = Species))

对Species也进行映射,因此不同分组出现了不同的颜色,当然这部分颜色是默认的

Q1:‼️‼️如何指定映射的颜色 scale_color_manual(values= )函数

ggplot(data = iris)+  geom_point(mapping = aes(x = Sepal.Length,  y = Petal.Length, color = Species))
+ scale_color_manual(values = c("blue","grey","red"))

代码中颜色顺序和映射是一一对应的,可以通过改变代码中颜色顺序来调整分组的颜色

总结:映射可以根据某一列的内容分配颜色,手动设置是把图像设置为一个或多个颜色,与数据无关。

Q2:‼️‼️区分fill 和color两种属性

1)空心和实心的形状用color设置即可,因为只有一个颜色

2)有两种颜色的形状,color设置边框、fill设置填充

ggplot(data = iris)+  geom_point(mapping = aes(x = Sepal.Length,  y = Petal.Length, color = Species), 
                         shape = 24,fill = "black") 

边框的color是映射的,内部颜色由fill决定

4)分面(根据分组绘出多个图)facet_wrap( )

ggplot(data = iris) +  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length,color=Species))  
                    + facet_wrap(~ Species)

这个数据三个分组可以分三个图

5)双分面(把行也分组)

>dat = iris 
>dat$Group = sample(letters[1:5],150,replace = T) #不要更改内置数据集,可以把数据集赋值后修改
>ggplot(data = dat) +   geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) 
+   facet_grid(Group ~ Species)
第二行代码的意思是在dat数据集增加一列Group,随机命名为a~e中一个,便形成了五个分组

6)几何对象(可以叠加使用)

ggplot() 的映射可以在全局使用,geom_function的映射只能在局部使用

7)柱状图/直方图 (y轴无需映射)

ggplot(data = diamonds) +   geom_bar(mapping = aes(x = cut)) #常用于统计个数,y轴会根据x轴自动计算
#默认geom_bar不用映射y,如果要映射加stat = "identity"

也可以把count改成prop,计算百分比

>ggplot(data = diamonds) +   geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))

8)位置关系

a)点图设置

>ggplot(data = iris,mapping = aes(x = Species, y = Sepal.Width, fill = Species)) 
     +   geom_boxplot()+  geom_point()
使用geom_point() 发现点都在一条直线上,可能是不显示其他位置,只显示一条线
ggplot(data = iris,mapping = aes(x = Species, y = Sepal.Width,fill = Species)) 
     +   geom_boxplot()+  geom_jitter()
使用geom_jitter()绘制点图,可以把点都画出来

b)堆叠直方图

ggplot(data = diamonds) +   geom_bar(mapping = aes(x = cut,fill=clarity))
y轴是自动计数,不需要映射

c)并列直方图

ggplot(data = diamonds) +   geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")
添加position = "dodge"参数,把刚刚的堆叠直方图的堆叠部分单独变成一个柱子

9)坐标系

coord_flip( ). 翻转坐标系

coord_polar( ) 极坐标系

四、ggpubr绘图

与ggplot2类似,但是不用映射

ggpubr::ggboxplot(iris,x="Species",y="Sepal.Length",color = "Species",shape="Species",add="jitter")

ps:在ggplot2用geom_jitter() ,在ggpubr用add="jitter"

五、保存文件

1)ggplpot2包

ggsave( "example.png")

ggsave(p,filename="example_2.png"). #ggsave也可以保存ggpubr画的图片

2)ggpubr包

ggexport(filename="example_3.png") #ggexport是保存ggpubr的图片 png/pdf格式都可以

3)eoffice包(输出ppt的神器)

topptx(p,"example.pptx") #输出ppt格式的图片,图中的每一个元素都是独立可移动、可编辑