[英]R: Add a arrow on a circular barplot with ggplot2
我正在尝试使用 ggplot2 制作物候图,目前看起来像这样: Circular barplot
现在我想添加一个表示平均角度的箭头(“o = 角度”和“r = 幅度”),如下图所示( Dahua-Machoa 等人,2018 年,第 70 页)。 我找到了一种方法来使用 geom_vline() 和线性插值来添加一条线,以正确的角度绘制它,但我找不到一种方法来修改它的长度并给它一个类似箭头的形式。
可以用 ggplot2 来做吗?
提前致谢。
这是我的代码。
Mes<-c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"
, "Dec")
mess<-(seq(1,12,1))
FlbudBr<-c(0,12,25,44,32,5,12,1,4,56,11,10)
dg<-c(15, 45,75,105,135,165,195,225,255,285,315,345)
data<-data.frame(Mes,mess,FlbudBr,dg)
library(NISTunits)
data$cos<-cos(NISTdegTOradian(data$dg))
data$sin<-sin(NISTdegTOradian(data$dg))
x<-sum(data$FlbudBr*data$cos)/sum(data$FlbudBr)
y<-sum(data$FlbudBr*data$sin)/sum(data$FlbudBr)
r<-sqrt((x)^2+(y)^2)
o<-180-NISTradianTOdeg(acos(x/r))
library(ggplot2)
library(ggthemes)
ggplot(data, aes(mess, FlbudBr)) +
coord_polar() +
geom_bar(stat = "identity", fill = "#F8C471", color ="black", width = 0.8) +
scale_x_continuous(breaks = 1:12, labels = data$Mes, expand = c(.007,0)) +
geom_hline(yintercept = seq(0, 15, by = 5), color = "gray90", alpha= 0.4) +
geom_vline(xintercept= ((139.57-135)/(150-135)*(5.5-5)+5))+
ylab("Fl bud Br")+
theme_bw()+
theme(panel.grid.minor = element_blank(), axis.title.x = element_blank(),
panel.border = element_blank())
使用annotate
。 使用yend
指定行长度。 arrow = arrow()
将添加箭头。
p <- ggplot(data, aes(mess, FlbudBr)) +
coord_polar() +
geom_bar(stat = "identity", fill = "#F8C471", color ="black", width = 0.8) +
scale_x_continuous(breaks = 1:12, labels = data$Mes, expand = c(.007,0)) +
geom_hline(yintercept = seq(0, 15, by = 5), color = "gray90", alpha= 0.4) +
ylab("Fl bud Br")+
theme_bw()+
theme(panel.grid.minor = element_blank(), axis.title.x = element_blank(),
panel.border = element_blank())
arrow_x <- ((139.57-135)/(150-135)*(5.5-5)+5)
p + annotate(
"segment",
x = arrow_x,
xend = arrow_x,
y = 0,
yend = 25,
colour = "red",
size = 1,
arrow = arrow()
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.