首页 理论教育 ggplot政经数据可视化|画线段和曲线,控制端点和曲线形状

ggplot政经数据可视化|画线段和曲线,控制端点和曲线形状

时间:2023-11-19 理论教育 版权反馈
【摘要】:在提供两个端点的情况下,geom_segment可绘制线段,geom_curve可绘制曲线。两个函数用来确定线段/曲线端点的aes参数是x、y、xend、yend,分别代表起点X坐标、起点Y坐标、终点X坐标、终点Y坐标。点越多,曲线越平滑。一条从左画至右边的曲线,当curvature为正值时,向下弯曲,反之向上弯曲;而从右画至左边的曲线则刚好相反。angle用来控制曲线偏向某个端点的程度,取值为0至180,当它小于90时,曲线偏向起点,反之偏向终点。

ggplot政经数据可视化|画线段和曲线,控制端点和曲线形状

在提供两个端点的情况下,geom_segment可绘制线段,geom_curve可绘制曲线。两个函数用来确定线段/曲线端点的aes参数是x、y、xend、yend,分别代表起点X坐标、起点Y坐标、终点X坐标、终点Y坐标。用来确定图形属性的一般参数有:

coloralphasizelinetypearrowlineendlinejoin请参考geom_line的说明

ncpgeom_curve专有确定用来刻画曲线的点的数目点越多曲线越平滑curvatureanglegeom_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除了拥有coloralpha等线条原本具有的参数外还拥有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)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈