大数跨境
0
0

科研图表 | ggplot2之坐标系

科研图表 | ggplot2之坐标系 R语言数据分析指南
2021-12-07
0
导读:· 坐标系 ·· 坐标系两大功能 ·1.将两个位置图像属性结合起来,在图像中形成2维方位系统。2.配合分面,

· 坐标系 ·


· 坐标系两大功能 ·


1.将两个位置图像属性结合起来,在图像中形成2维方位系统。

2.配合分面,坐标系将绘制坐标轴和面板背景。标度控制着坐标轴上出现的数值,并将数据映射到图像中的位置,然后通过坐标系将它们绘制出来。



· 分类 ·


1.线性坐标系。

2.非线性坐标系。


· 线性坐标系 ·


· 分类 ·


1.coord_cartesian()

2.coord_flip()

3.coord_fixed()


· coord_cartesian()放大图像 ·


坐标系范围限制与标度的范围限制参数的区别:

设置标度的范围限制的时候:

我们抛弃了所有范围以外的数据。


设置坐标系范围限制的时候:

我们仍然使用所有数据,只是只显示了图像的一小部分。


举例:


library(ggplot2)
base<-ggplot(mpg,aes(displ,hwy))+
  geom_point()+geom_smooth()
#完整的数据集
base
#标度改为5~7之间,抛弃了范围以外的数据
base+scale_x_continuous(limits= c(5,7))
#放大到5~7之间,保存着所有数据,不过只展示其中一部分
base+coord_cartesian(xlim = c(5,7))







· coord_flip()翻转坐标轴 ·


使用前提:

你对基于y条件下的x值感兴趣。


   以下将翻转坐标轴和交换x、y变量位置的效果进行了比较:



ggplot(mpg,aes(displ,cty))+
  geom_point()+geom_smooth()
#交换cty和displ,90°反转了图像,
#不过平滑曲线是对翻转后的数据进行了拟合的。
ggplot(mpg,aes(cty,displ))+
  geom_point()+geom_smooth()
#coord_flip()将平滑函数是对原来的数据进行了拟合,
#然后翻转了输出
ggplot(mpg,aes(displ,cty))+
  geom_point()+geom_smooth()+
  coord_flip()






· coord_fixed()固定相等标度 ·


   coord_fixed()固定了x轴和y轴的长度比例。默认的ratio确保了x轴和y轴有相同的标度。



· 非线性坐标系 ·


       与线性坐标系坐标系不同,非线性坐标系可以改变几何对象的形状。


以一条直线和一个矩形举例:


rect<-data.frame(x = 50,y = 50)
line<-data.frame(x = c(1,200),y = c(100,1))
base<-ggplot(mapping = aes(x,y))+
  geom_tile(data = rect,aes(width = 50,height = 50))+
  geom_line(data = line)+xlab(NULL)+ylab(NULL)
base
base + coord_polar("x")
base + coord_polar("y")





base + coord_flip()
base + coord_trans(y = "log10")
base + coord_fixed()






· 坐标系变换步骤 ·


1.首先把几何对象的参数改为只基于位置的表示方式。

2.下一步是转换每一个位置到新的坐标系中。



举例


1.首先,我们有一条直线,它由两个端点来定义:



df<-data.frame(r = c(0,1),theta = c(0,3/2*pi))
ggplot(df,aes(r,theta))+geom_line()+
  geom_point(size = 2,colour = "red")





2.我们把它分割成很多条线段,每条线段都有对应的端点:


interp<-function(rng,n) {seq(rng[1],rng[2],length = n)}
munched<-data.frame(r = interp(df$r,15),
                    theta = interp(df$theta,15))
ggplot(munched,aes(r,theta)) + geom_line() + 
  geom_point(size = 2,colour = "red")





3.我们把每一个部分的位置都进行变换:


transformed<-transform(munched,x = r * sin(theta),
                       y = r * cos(theta))
ggplot(transformed,aes(x,y)) + geom_path() + 
  geom_point(size = 2,colour = "red") + coord_fixed()




· coord_trans()变换 ·


    坐标系层次的变换发生在计算统计变换之后,而且确实会改变几何对象的形状。同时使用这两者使得我们可以在变换后的标度下对数据进行建模,然后把模型反变换回去来进行解读。



举例:


#默认的线性模型的拟合效果比较差
base<-ggplot(diamonds,aes(carat,price)) + stat_bin2d() + 
  geom_smooth(method = "lm") + xlab(NULL) + ylab(NULL) +
  theme(legend.position = "none")
base

#对数变换之后的拟合效果比较好,但解读更加困难
base + scale_x_log10() + scale_y_log10()
#对数变换下进行拟合,然后反变换回来原来的标度
#强调了大克拉数的昂贵钻石比较稀少
pow10<-scales::exp_trans(10)
base + scale_x_log10() + scale_y_log10() +
  coord_trans(x = pow10,y = pow10)






· coord_polar()极坐标系 ·


可生成图形的种类:

饼图,玫瑰图,雷达图


作用对象:

环形数据


缺点:

角度在小的半径中比在大的半径中更难感知


改善方法:

通过设置参数theta决定哪个变量被映射为角度,哪个被映射为半径


举例:


base<-ggplot(mtcars,aes(factor(1),fill = factor(cyl))) + 
  geom_bar(width = 1) +
  theme(legend.position = "none") + 
  scale_x_discrete(NULL,expand = c(0,0)) + 
  scale_y_continuous(NULL,expand = c(0,0))

#堆叠的条形图
base
#饼图
base + coord_polar(theta = "y")
#牛眼图
base + coord_polar()





· coord_map()地图投影 ·


原因:

地图是球形数据的展示。


举例:

通过coord_quickmap()函数快速粗略的画图。


#准备好新西兰的地图
nzmap<-
  ggplot(map_data("nz"),aes(long,lat,group =group)) + 
  geom_polygon(fill = "white",colour = "black") + 
  xlab(NULL) + ylab(NULL)

#在直角坐标系画出此地图
nzmap
#使用宽高比近似算法
nzmap + coord_quickmap()







通过coord_map函数精美的画图


world<-map_data("world")
worldmap<-ggplot(world,aes(long,lat,group = group)) + 
  geom_path() + 
  scale_y_continuous(NULL,
                     breaks = (-2:3) * 30,labels = NULL) + 
  scale_x_continuous(NULL,
                     breaks = (-4:4) * 45,labels = NULL)


worldmap + coord_map()
#一些更加疯狂的投影
worldmap + coord_map("ortho"
worldmap + coord_map("stereographic",orientation = c(-90,0,0))








作者:袁铭凡
编辑:袁铭凡
校审:宋新宇


【声明】内容源于网络
0
0
R语言数据分析指南
R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
内容 1180
粉丝 0
R语言数据分析指南 R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
总阅读222
粉丝0
内容1.2k