【问题标题】:GGPlot reorder variables between facetsGGPlot 在构面之间重新排序变量
【发布时间】:2018-02-01 17:33:19
【问题描述】:

我有一个数据框(长格式),其中包含来自个性自我报告的数据。我使用 ggplot2 绘制了我之前运行的探索性因子分析。下面,我创建了原始数据框的一个子集。

Here,Dan Mirman 博士提出了一种绘制此类数据的好方法,我想这样做。所以,我已经修改了他的代码,但是,正如你从图片中看到的那样,情节有问题。 y 轴上的刻度按字母顺序倒序排列。但是,我想根据它们在每个因素上的负载来订购这些秤。例如,我认为最好的顺序可能是第一个“A”和“IdP”,因为它们在 Factor1 上加载很强,然后是“R”和“Ca”,因为它们在 Factor 2 上加载,“InP”因为它在 Factor 上加载3,以及“Co”,因为它加载到因子 4。在底部,“S”,因为它在多个尺度上显示出相似的加载。

谁能帮帮我?我真的很感激!

library(ggplot2)
Scale <- c("A", "IdP", "R", "Ca", "S", "InP", "Co", "A", "IdP", "R", "Ca", "S", "InP", "Co", "A", "IdP", "R", "Ca", "S", "InP", "Co", "A", "IdP", "R", "Ca", "S", "InP", "Co")
Factor <- c("Factor1", "Factor1", "Factor1", "Factor1", "Factor1", "Factor1", "Factor1", "Factor2", "Factor2", "Factor2", "Factor2", "Factor2", "Factor2", "Factor2", "Factor3", "Factor3", "Factor3", "Factor3", "Factor3", "Factor3", "Factor3", "Factor4", "Factor4", "Factor4", "Factor4", "Factor4", "Factor4", "Factor4")
loading.db <- c(0.93, 0.71, -0.15,  0.00, 0.34, 0.08, 0.04, 0.02, 0.13, 0.79, 0.74, 0.43, 0.03, 0.06, -0.02, 0.30, -0.06, 0.25, 0.08, 0.66, -0.03, 0.09, -0.03, 0.18, -0.01, 0.37, -0.06, 0.62)

db <- data.frame(Scale, Factor, loading.db)

ggplot(db, aes(Scale, abs(loading.db), fill = loading.db)) + 
  facet_wrap(~ Factor, nrow = 1) +
  geom_bar(stat = "identity") +
  coord_flip() +
  scale_fill_gradient2(name = "Loading", 
                       high = "green", mid = "white", low = "yellow", 
                       midpoint = 0, guide = F) +
  xlab("Test scales") + 
  ylab("Loading Strength") +
  theme_bw(base_size = 10)

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    你只需要重新排列你的因子水平(用levels(db$Scale)查看它们。例如,在这里我通过查看哪些大于0.5来对它们进行排序(按照因子1、...、4的顺序),然后添加最后缺少的那些(在这种情况下为S)。

    lvls <- as.character(unique(db$Scale[db$loading.db > 0.5]))
    lvls <- c(lvls, unique(levels(db$Scale)[!(levels(db$Scale) %in% lvls)]))
    
    db$Scale <- factor(db$Scale, rev(lvls))
    
    ggplot(db, aes(Scale, abs(loading.db), fill = loading.db)) + 
      facet_wrap(~ Factor, nrow = 1) +
      geom_bar(stat = "identity") +
      coord_flip() +
      scale_fill_gradient2(name = "Loading", 
                           high = "green", mid = "white", low = "yellow", 
                           midpoint = 0, guide = F) +
      xlab("Test scales") + 
      ylab("Loading Strength") +
      theme_bw(base_size = 10)
    

    给予

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多