R&ggplot2:如何获取轴标签下的箭头?


我打算用R / ggplot2绘制比值比,并且我想在X轴标签的下面或旁边添加两个箭头。 一个指向左边,一个指向右边,表现出去/增加的影响力。 我尝试了很多东西,比如geom_path,geom_line,但没有取得很大的成功。 这是我的代码:

forest <- function(d, xlab="Odds Ratio", ylab="Influencing variables"){
require(ggplot2)
p <- ggplot(d, aes(x=ordered(x, levels=rev(x)), y=y, ymin=ylo, ymax=yhi)) +
geom_pointrange() +
geom_segment(aes(x = 0, xend = 0, y= 1, yend= 2)) +
coord_flip() +
geom_hline(aes(yintercept=1), lty=2) +
ylab(xlab) +
xlab(ylab) +
scale_y_log10() 
return(p)
}
##Test Data
data <- data.frame( x   = c("A","B","C","D","E","F","G","H","I"),
                y   = c(1.782,0.136,0.978,0.645,0.518,1.474,0.855,0.673,0.369))
data <- transform(data, ylo = (0.719,0.046,0.945,0.295,0.188,0.577,0.407,0.310,0.145), 
        yhi = c(4.420,0.398,1.012,1.411,1.424,3.768,1.798,1.460,0.940))
forest(data)

像geom_line(aes(x = 1),arrow = arrow(length = unit(0.15,“cm”)),color =“black”,size = 1)添加一行会带来一些箭头,但它们会与我的原始数据相冲突。
在此先感谢您的解决方案,帮助或提示!
渣子


这是一个相当古老的帖子,但是我认为我会分享另一个选择给任何绊倒这个的人。

我有一种情况,确实需要我在绘图区域之外有箭头(并且不关心涉及grid )。 如下所示,使用表达式和符号对于某些人来说可能是一个不错的选择:

p1 <- qplot(x = 0:12, y = 0:12, geom = "blank") 
p1 <- p1 + ylab(expression(symbol('256')))
p1 <- p1 + xlab(expression(symbol('256')))
p1 <- p1 + theme(axis.title.y = element_text(size = 30))
p1 <- p1 + theme(axis.title.x = element_text(size = 30))

p1  

主题修改不是绝对必要的,但您可能希望至少增加箭头的大小。

默认情况下, symbol()函数使用本文档中概述的Adobe Symbol代码:http://goo.gl/vRzpJU

如果你想添加一些文本到标签(只是添加到表达式可能会使它太大),下面应该让你开始:

grid.text(label="X", x = 0.645, y = 0.02)
grid.text(label="Y", x = 0.1, y = 0.5, rot=90)
grid.gedit("GRID.text", gp=gpar(fontsize=15))

这可以使用R expression(x <-> y)数学注释轻松完成。 可以在这里找到可用选项的表格。 expression也允许乳胶像数学符号。

p1 <- qplot(x = 1:10, y = 1:10, geom = "blank") 
p1 <- p1 + xlab(expression(decreasing %<->% increasing))
p1 <- p1 + ylab(expression(down %->% up))
p1 <- p1 + ggtitle(expression("Darcy's law" %->% q == -k*frac(Delta*h,Delta*l)))
p1 <- p1 + theme_bw(base_size=14)


我正在猜测你想要的是什么,因为我不确定你在用geom_segment尝试什么,无论这是你的数据的一部分,还是试图创建一个箭头。 但是,您可以在geom_segment上构建类似于您所描述的内容的东西:

#Your test data, with a small typo repaired
dd <- data.frame(x = c("A","B","C","D","E","F","G","H","I"),
                 y = c(1.782,0.136,0.978,0.645,0.518,1.474,0.855,0.673,0.369))
dd <- transform(dd, ylo = c(0.719,0.046,0.945,0.295,0.188,0.577,0.407,0.310,0.145), 
        yhi = c(4.420,0.398,1.012,1.411,1.424,3.768,1.798,1.460,0.940))

#Create a separate data frame for the arrow labels
arrowLab <- data.frame(lab = c("Increasing","Decreasing"),
                       x = c(0.15,0.15),y = c(10^0.25,10^(-0.25)))

ggplot(data = dd, aes(x=ordered(x, levels=rev(x)), y=y)) +
        geom_pointrange(aes(ymin=ylo, ymax=yhi)) +
        geom_segment(aes(x = 0, xend = 0, y= 1, yend= 2),
                         arrow=arrow(length=unit(0.2,"cm"))) +
        geom_segment(aes(x = 0, xend = 0, y= 1, yend= 10^(-0.25)),
                         arrow=arrow(length=unit(0.2,"cm"))) +
        geom_text(data = arrowLab,aes(x=x,y=y,label = lab),size = 3) +
        coord_flip() +
        geom_hline(aes(yintercept=1), lty=2) +
        scale_y_log10() 

在这里输入图像描述

请注意,我对定位的大部分进行了硬编码,因此您可能需要修改这些值以获得所需的值,或者可以尝试根据数据以编程方式选择它们。

链接地址: http://www.djcxy.com/p/86143.html

上一篇: R & ggplot2: How to get arrows under the axis label?

下一篇: Can't bind Ctrl+Alt+Shift+l in tmux