ggplot2中的箭头标签方向 [英] Arrows Label Direction in 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屋!