首页 文章

在ggplot2中更改构面网格中的标签[复制]

提问于
浏览
0

这个问题在这里已有答案:

我的数据框如下

> dput(dat2)
structure(list(School = structure(c(2L, 2L, 2L, 1L, 1L, 1L, 3L, 
3L, 3L), .Label = c("School1", "School2", "School3"), class = "factor"), 
    Year = c(2015L, 2014L, 2013L, 2015L, 2014L, 2013L, 2015L, 
    2014L, 2013L), Rate = c(80L, 90L, 11L, 70L, 50L, 30L, 60L, 
    50L, 40L), Order = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), 
    Order2 = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), Order3 = structure(c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_), .Label = c("School2", 
    "School1", "School3"), class = "factor")), .Names = c("School", 
"Year", "Rate", "Order", "Order2", "Order3"), row.names = c(NA, 
-9L), class = c("tbl_df", "tbl", "data.frame"))

  School   Year  Rate Order Order2
  <fct>   <int> <int> <int>  <int>
1 School2  2015    80     1      1
2 School2  2014    90     1      2
3 School2  2013    11     1      3
4 School1  2015    70     2      1
5 School1  2014    50     2      2
6 School1  2013    30     2      3
7 School3  2015    60     3      1
8 School3  2014    50     3      2
9 School3  2013    40     3      3

我使用两个名为Order和Order2的列来指定我的数据绘制方式 . 我使用以下代码创建一个构面网格 .

p <- ggplot(dat2, aes(x=reorder(Year,Order2), Rate)) + geom_bar(stat = "identity", width = 0.5)
p + facet_grid(. ~Order)

它给出了以下网格 .

enter image description here

这是我想要的顺序(基于订单变量的值)School2 - > School1 - > School3 .

我正在尝试修改构面标签以显示学校名称而不是Order列中的值 . 如果我在facet_grid中使用了School这样的列

p <- ggplot(dat2, aes(x=reorder(Year,Order2), Rate)) + geom_bar(stat = "identity", width = 0.5)
p + facet_grid(. ~School)

我得到以下图表 .
enter image description here

所以标签正是我想要的,但顺序不是基于Order列中的值,而是基于School列的字母顺序 .

请帮助我了解如何使用Order列中的值保留facet的顺序,如第一个图表所示,但是将facet标签更改为School列中的值 . 我还看了一些使用贴标机功能的例子,但它们都依赖于手动指定标签 . 这个数据集是一个示例,实际将有更多的数据,所以我不想硬编码标签值,并探讨ggplot2 / facet_grid中是否有一个函数可能允许我为facet_grid标签指定一列 .

1 回答

  • 0

    使用 forcatsdplyr

    library(dplyr)
     library(forcats)
     dat2 %>%
         mutate(School = fct_relevel(School, c("School2","School1","School3"))) %>%
         ggplot(aes(x=reorder(Year,Order2), Rate), labels = c("School1","School2","School3")) +
         geom_bar(stat = "identity", width = 0.5) +
         facet_grid(. ~School)
    

    enter image description here

相关问题