R图仅针对指定级别按级别对因子重新排序

时间:2019-09-09 18:11:49

标签: r sorting ggplot2 dplyr tidyverse

我正在尝试创建一个图形,其中x轴(一个因子)按y轴的降序(数值)重新排序,但是 另一个因素的两个层次。

最初,我尝试使用下面的代码:

reorder(factor1, desc(value1))

但是,此代码仅根据每个factor2下的两个值的总和(以降序排列)(我认为);而我只想对"A"下的一个级别( factor2)中的数据进行重组。

这里有一些示例数据可以更好地说明。

sampledata <- data.frame(factor1 = c("A", "A", "B", "B", "C", "C", "D", "D", "E", "E", 
                                     "F", "F", "G", "G", "H", "H", "I", "I", "J", "J"),
                         factor2 = c("A", "H", "A", "H", "A", "H", "A", "H", "A", "H",
                                     "A", "H", "A", "H", "A", "H", "A", "H", "A", "H"), 
                         value1 = c(1, 5, 6, 2, 6, 8, 10, 21, 30, 5, 
                                    3, 5, 4, 50, 4, 7, 15, 48, 20, 21))

这是我以前使用的:

sampledata %>%
   ggplot(aes(x=reorder(factor1, desc(value1)), y=value1, group=factor2, color=factor2)) + 
    geom_point()

我想reorder达到特定级别(例如factor2=="A")的原因是,我可以查看factor2=="H"的值与"A"的任何偏差点。

我希望使用tidyversedplyr作为解决此问题的方法。

1 个答案:

答案 0 :(得分:2)

library(ggplto2)
library(dplyr)

sampledata %>% 
  mutate(value2 = +(factor2=="A")*value1) %>% 
  ggplot(aes(x=reorder(factor1, desc(value2 + value1/max(value1))), y=value1, 
             group=factor2, color=factor2)) + 
  geom_point() +
  xlab("factor1")