R 用几何点()定位减淡,x=连续,y=系数
我制作了一个函数,可以一次绘制多因素分析的荷载,也可以在其变量没有完全重叠(或根本没有重叠)的情况下绘制。它工作得很好,但有时分析中的因子载荷是相同的,这意味着这些点被绘制在彼此的顶部R 用几何点()定位减淡,x=连续,y=系数,r,ggplot2,R,Ggplot2,我制作了一个函数,可以一次绘制多因素分析的荷载,也可以在其变量没有完全重叠(或根本没有重叠)的情况下绘制。它工作得很好,但有时分析中的因子载荷是相同的,这意味着这些点被绘制在彼此的顶部 library(pacman) p_load(devtools, psych, stringr, plotflow) source_url("https://raw.githubusercontent.com/Deleetdk/psych2/master/psych2.R") loadings.plot2 =
library(pacman)
p_load(devtools, psych, stringr, plotflow)
source_url("https://raw.githubusercontent.com/Deleetdk/psych2/master/psych2.R")
loadings.plot2 = function(fa.objects, fa.names=NA) {
fa.num = length(fa.objects) #number of fas
#check names are correct or set automatically
if (length(fa.names)==1 & is.na(fa.names)) {
fa.names = str_c("fa.", 1:fa.num)
}
if (length(fa.names) != fa.num) {
stop("Names vector does not match the number of factor analyses.")
}
#merge into df
d = data.frame() #to merge into
for (fa.idx in 1:fa.num) { #loop over fa objects
loads = fa.objects[[fa.idx]]$loadings
rnames = rownames(loads)
loads = as.data.frame(as.vector(loads))
rownames(loads) = rnames
colnames(loads) = fa.names[fa.idx]
d = merge.datasets(d, loads, 1)
}
#reshape to long form
d2 = reshape(d,
varying = 1:fa.num,
direction="long",
ids = rownames(d))
d2$time = as.factor(d2$time)
d2$id = as.factor(d2$id)
colnames(d2)[2] = "fa"
print(d2)
#plot
g = ggplot(reorder_by(id, ~ fa, d2), aes(x=fa, y=id, color=time, group=time)) +
geom_point(position=position_dodge()) +
xlab("Loading") + ylab("Indicator") +
scale_color_discrete(name="Analysis",
labels=fa.names)
return(g)
}
#Some example plots
fa1 = fa(iris[-5])
fa2 = fa(iris[-c(1:50),-5])
fa3 = fa(ability)
fa4 = fa(ability[1:50,])
loadings.plot2(list(fa1,fa1,fa2))
在这里,我已经绘制了两次相同的对象,只是为了显示效果。该图没有红点,因为fa.2
中的绿色点位于顶部。相反,我希望它们在y轴上被回避。但是,具有各种设置的position=“dodge”
似乎没有什么区别
然而,position=“jitter”
可以工作,但它是随机的,因此有时它工作得不好,并且使绘图看起来很混乱
如何使点在y轴上闪避?显然,您只能侧向闪避,但有一个解决方法。诀窍是翻转你的x和y,做位置闪避,然后做坐标翻转()
reorder\u by
是修复级别顺序所必需的,否则它们的顺序将不正确(它们将按字母顺序排列,因为这是ggplot2喜欢的)。它位于plotflow包中(由p\u load()
加载)。在你的回答中,顺序是相反的。好主意,我将尝试使用coord\u flip()
,看看是否能找到一个可接受的解决方案。是的,但您是手动执行的,因此如果我尝试在另一个数据集上使用您的代码,它(可能)将无法正常工作。但是,您似乎在ggplot2代码的第一行中出错。您已经指定了数据
参数两次。如果使用g=ggplot(按(id,~fa,d2),aes(x=id,y=fa,color=time,group=time)对u进行重新排序)+
就我所知,这张图的工作原理应该是回避。
g = ggplot(data = reorder_by(id, ~ fa, d2), aes(x=id, y=fa, color=time, group=time)) +
geom_point(position=position_dodge(width = .5)) +
xlab("Loading") + ylab("Indicator") +
scale_color_discrete(name="Analysis",
labels=fa.names) +
coord_flip()