scale_x_reordered 不适用于 facet_grid

scale_x_reordered does not work in facet_grid

我是 R 的新手,想就使用 reorder_within 和 scale_x_reordered(库:tidytext)的可视化寻求您的建议。

我想按州显示每年的数据(按最大值到最小值排序)。这是用于说明目的的示例数据。

test <- data.frame(stateabb = rep(state.abb, each = 5, times = 1), 
                   year = seq(2001,2005,1),
                   value = sample(1:100, 250, replace = TRUE))

我使用以下代码成功创建了按州和年份的简单图表。

ggplot(test, aes(x = stateabb, y = value)) +
    geom_bar(stat = "identity") +
    facet_grid(year ~ ., scales = "free_x")

看这张图表,很难看出每年哪个州最好。因此,我决定每年使用 reorder_within.

对值进行排序
ggplot(test, aes(x = reorder_within(stateabb, -value, year), y = value)) +
    geom_bar(stat = "identity") +
    facet_grid(year ~ ., scales = "free_x") + 
    scale_x_reordered()

但是,我无法像在第一张图片中那样显示它。我以为 scale_x_reordered 可以解决,结果并没有达到我的预期。我也明白我需要自由设置 x 轴以显示每年的州顺序。但这样做并没有让我到任何地方。我在这里做错了什么?有没有其他合适的方式来按年显示这些州的顺序?任何正确显示此图表的建议或建议将不胜感激。提前非常感谢!

这行不通,因为 facet_grid 只会共享一个 x-axis。但是每个方面的顺序都不同。你想要facet_wrap。例如像这样:

library(ggplot); library(tidytext)
ggplot(test, aes(x = reorder_within(stateabb, -value, year), y = value)) +
    geom_bar(stat = "identity") + scale_x_reordered() +
    facet_wrap(year ~ ., ncol = 1, scales = "free_x", strip.position = "right")