0
df <- data.frame(Country = c("Indonesia","Indonesia","Brazil","Colombia","Mexico","Colombia","Costa Rica" ,"Mexico","Brazil","Costa Rica"),
            Subject = c("Boys", "Girls","Boys","Boys","Boys","Girls","Boys","Girls","Girls","Girls"),
            Value = c(358.000,383.000,400.000,407.000,415.000,417.000,419.000,426.000,426.000,434.000))

我正在尝试绘制 Country vs Value 的图,但仅按 Boys 行的 Value 升序对点进行排序。我知道我可以使用类似的东西:

df %>% 
  ggplot(aes(reorder(Country, Value), Value)) +
  geom_point()

这不考虑主题列中的仅男孩行。我该怎么做呢?

编辑:可以在 ggplot 之外进行排序,如下所示:

df <- df %>% 
  arrange(Value, Subject)

但是,我还不能在 ggplot 重新排序中复制它。包括有问题的数据的一个例子。

4

1 回答 1

1

排列数据框不会改变列Country在 x 轴上的排序方式。离散变量轴上的顺序的优先级是:

  • 如果您在 中提供reorder或最终规格aes(),请使用该排序
  • 如果该列是一个因子,则使用该因子的levels顺序
  • 如果列不是因素,请按字母数字顺序

据我所知,您只能指定要使用 inreorder()的一列,因此下一步是转换为因子并指定levels. 项目在数据框中出现的顺序无关紧要,因为列的处理与它们在数据框中出现的顺序完全分开。事实上,这就是映射背后的整个想法。

因此,如果您想要此特定顺序,则必须将Country列转换为因子并指定levels. 您可以单独执行此操作,也可以使用mutate(). 请注意,我们必须指定使用列的unique()值,Country以确保我们只按照它们在排序数据框中出现的顺序提供每个级别一次。

# color and size added for clarity on the sorting
df %>%
  arrange(Subject, Value) %>%
  mutate(Country=factor(Country, levels=unique(Country))) %>%
  ggplot(aes(Country, Value, color=Subject)) + geom_point(size=3)

在此处输入图像描述

于 2021-03-30T17:11:32.550 回答