在提供两个端点的情况下,geom_segment可绘制线段,geom_curve可绘制曲线。两个函数用来确定线段/曲线端点的aes参数是x、y、xend、yend,分别代表起点X坐标、起点Y坐标、终点X坐标、终点Y坐标。用来确定图形属性的一般参数有:
●color、alpha、size、linetype、arrow、lineend、linejoin:请参考geom_line的说明。
●ncp:geom_curve专有,确定用来刻画曲线的点的数目。点越多,曲线越平滑。 curvature、angle:geom_curve专有,调整曲线的弯曲方式。读者需在实际过程中反复尝试,以便确定如何搭配这两个参数。curvature用来调整弯曲程度(默认值为0.5),绝对值越大,曲线越弯曲。一条从左画至右边的曲线,当curvature为正值时,向下弯曲,反之向上弯曲;而从右画至左边的曲线则刚好相反。angle用来控制曲线偏向某个端点的程度,取值为0至180(默认值为90,即无偏倚),当它小于90时,曲线偏向起点,反之偏向终点。注意:curvature的长度必须是1。
library(ggplot2)
L1=c(0, 1, 1, 1); L2=c(0, 2, 1, 2); L3=c(1, 3, 0, 3); L4=c(1, 4, 0, 4)
dat=data.frame(rbind(L1, L2, L3, L4))
colnames(dat)=c("x1", "y1", "x2", "y2")
p=ggplot(dat, aes(x=x1, y=y1, xend=x2, yend=y2))+coord_fixed(ylim=c(0, 5))
## 批量画线段
p+geom_segment(color=c("red", "orange", "green", "blue"), arrow=grid::arrow())
# 请观察不同curvature值的效果
p+geom_curve(color="red", arrow=grid::arrow(), curvature=0.5)+geom_curve(color="green", arrow=grid::arrow(), curvature=-0.5)
# 请观察不同angle值的效果
p+geom_curve(color=c("red", "orange", "green", "blue"), arrow=grid::arrow(), curvature=0.8, angle=c(45, 135, 45, 135))
我们可以用geom_segment绘制的线段来代替条形图。让我们以数据集oil. csv为例,它记录了美国、墨西哥等国家1971年至2017年以吨油当量计算的原油产量。
oil=read.csv("oil.csv", row.names=1) # 课件中的文件
dat=tapply(oil$Production, INDEX=list(oil$Year), sum) # 按年份求和
dat=data.frame(Year=as.numeric(names(dat)), Production=as. numeric(dat))
ggplot(dat)+theme(aspect.ratio=0.4)+(www.xing528.com)
geom_segment(aes(x=Year, y=0, xend=Year, yend=Production), size=1.2, color="orange")+
geom_point(aes(x=Year, y=Production), size=2)
#==========
# 练习:geom_diagonal
#==========
## ggforce包中的geom_diagonal可用来方便地绘制思维导图中的曲线连接线
# install.packages("ggforce")
library(ggforce)
x=0; y=0 # 中心点的坐标
xend=rep(5, 9); yend=-4: 4 # 右侧9个点的坐标
lab1="x"; lab2=paste("x", 1: 9, sep="") # 各点标签
# geom_diagonal除了拥有color、alpha等线条原本具有的参数外,还拥有n和strength两个参数。其中,n是绘制线条所使用的点的数目(默认值为100),点越多,线条越平滑;strength用来控制弯曲程度(默认值为0.5)
ggplot()+xlim(-1, 6)+ylim(-5, 5)+
geom_diagonal(show.legend=FALSE, aes(x=x, y=y, xend=xend, yend=yend, color=factor(yend)), arrow=grid::arrow(angle=14), n=40, strength=0.7)+
scale_color_manual(values=rainbow(9))+
geom_text(aes(0, 0, label=lab1), hjust="right", size=6)+
geom_text(aes(xend, yend, label=lab2), hjust="left", size=6)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。