· 坐标系 ·
· 坐标系两大功能 ·
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))

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

