ggplot2中的箭头标签方向 [英] Arrows Label Direction in ggplot2

查看:742
本文介绍了ggplot2中的箭头标签方向的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用这个 R 代码生产了双胞胎:

  set。种子(12345)
要求(ggplot2)
AData < - data.frame(Glabel = LETTERS [1:7],A = rnorm(7,mean = 0,sd = 1),B = rnorm(7,mean = 0,sd = 1))
TData < - data.frame(Tlabel = LETTERS [11:20],A = rnorm(10,mean = 0,sd = 1) =数据(数据= AData,aes(AData [,i] = rnorm(10,平均= 0,sd = 1))
i < - 2
j < - 3
p < - ggplot ,AData [,j]))+ geom_point()+ theme_bw()
p <-p + geom_text(aes(data = AData,label = Glabel),size = 3,vjust = 1.25,color =black )
p <-p + geom_segment(data = TData,aes(xend = TData [,i],yend = TData [,j]),
x = 0,y = 0,color =黑色,
arrow =箭头(角度= 25,长度=单位(0.25,cm)))
p <-p + geom_text(data = TData,aes(x = TData [,i ],y = TData [,j],label = Tlabel),size = 3,vjust = 1.35,color =black)

输出



除箭头标签外,一切都很好。我想在箭头的结尾处标出标签,并且与箭头方向相同。任何想法和/或解决方案。

解决方案

两种可能性:

  p <-p + geom_text(data = TData,aes(x = 1.2 * TData [,i],
y = 1.2 * TData [,j],
label = Tlabel ),size = 3,vjust = 0,color =black)
p
#------------------------- ----------
p < - p + geom_text(data = TData,aes(x = TData [,i] + .1 * sign(TData [,i]),
y = TData [,j] + .1 * sign(TData [,j]),
label = Tlabel),size = 3,vjust = 0,color =black)
p

第一个标签离开箭头的距离随强度而变化,而第二个标签距离固定在图形绘图比例尺上(可能是首选的解决方案和下图所示)。



最后一个完全三角化的vers离子将会使标签与箭头完全相同。 (符号(。)参数的相同性是arctangent值的惯例的结果,雅做雅加塔做的事情):

 <$ c (数据= AData,aes(AData [,i],AData [,j]))+ geom_point()+ theme_bw()
p <-p + geom_text =数据= TData,aes(xend = TData [,i],yend = TData),其中, [,j]),
x = 0,y = 0,color =black,
arrow = arrow(angle = 25,length = unit(0.25,cm)))$ b $ (数据= TData,
aes(x = TData [,i] + .1 * cos(atan(TData [,j] / TData [,i]))* sign [,i]),
y = TData [,j] + .1 * sin(atan(TData [,j] / TData [,i]))* sign(TData [,i]),
label = Tlabel),size = 3,vjust = 0,color =red)


I produced biplot with this R code:

set.seed(12345)
require(ggplot2)
AData <- data.frame(Glabel=LETTERS[1:7], A=rnorm(7, mean = 0, sd = 1), B=rnorm(7, mean = 0, sd = 1))
TData <- data.frame(Tlabel=LETTERS[11:20], A=rnorm(10, mean = 0, sd = 1), B=rnorm(10, mean = 0, sd = 1))
i <- 2
j <- 3
p <- ggplot(data=AData, aes(AData[, i], AData[, j])) + geom_point() + theme_bw()
p <- p + geom_text(aes(data=AData, label=Glabel), size=3, vjust=1.25, colour="black")
p <- p + geom_segment(data = TData, aes(xend = TData[ ,i], yend=TData[ ,j]),
              x=0, y=0, colour="black",
              arrow=arrow(angle=25, length=unit(0.25, "cm")))
p <- p + geom_text(data=TData, aes(x=TData[ ,i], y=TData[ ,j], label=Tlabel), size=3, vjust=1.35, colour="black")

Output

Everything is fine except the arrows labels. I'd like to have the labels at the end of the arrows and in the same direction as arrows. Any idea and/or solution. Thanks in advance.

解决方案

Two possibilities:

p <- p + geom_text(data=TData, aes(x=1.2*TData[ ,i], 
                                   y=1.2*TData[ ,j], 
                  label=Tlabel), size=3, vjust=0, colour="black")
p
#-----------------------------------
p <- p + geom_text(data=TData, aes(x=TData[ ,i] +.1*sign(TData[ ,i]), 
                                   y=TData[ ,j]+.1*sign(TData[ ,j]), 
                  label=Tlabel), size=3, vjust=0, colour="black")
p

First one leaves labels away from the arrows a distance that varies with the "strengths" while the second one a fixed distance on the graphics plotting scale (probably the preferred solution and the one illustrated below).

And finally a fully "trigonometricized "version that will get the labels exactly in the same vector as the arrows. (The sameness of the sign(.) argument is a result of the conventions for arctangent values. Ya do what ya gatta do.) :

p <- ggplot(data=AData, aes(AData[, i], AData[, j])) + geom_point() + theme_bw()
p <- p + geom_text(aes(data=AData, label=Glabel), size=3, vjust=1.25, colour="black")
p <- p + geom_segment(data = TData, aes(xend = TData[ ,i], yend=TData[ ,j]),
              x=0, y=0, colour="black",
              arrow=arrow(angle=25, length=unit(0.25, "cm")))
p <- p + geom_text(data=TData, 
            aes(x=TData[ ,i] +.1*cos(atan(TData[ ,j]/TData[ ,i]))*sign(TData[ ,i]), 
                y=TData[ ,j] +.1*sin(atan(TData[ ,j]/TData[ ,i]))*sign(TData[ ,i]), 
            label=Tlabel), size=3, vjust=0, colour="red")

这篇关于ggplot2中的箭头标签方向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆