Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用几何点()定位减淡,x=连续,y=系数_R_Ggplot2 - Fatal编程技术网

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()