这个问题在这里已有答案:
我的数据框如下
> 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)
它给出了以下网格 .
这是我想要的顺序(基于订单变量的值)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)
我得到以下图表 .
所以标签正是我想要的,但顺序不是基于Order列中的值,而是基于School列的字母顺序 .
请帮助我了解如何使用Order列中的值保留facet的顺序,如第一个图表所示,但是将facet标签更改为School列中的值 . 我还看了一些使用贴标机功能的例子,但它们都依赖于手动指定标签 . 这个数据集是一个示例,实际将有更多的数据,所以我不想硬编码标签值,并探讨ggplot2 / facet_grid中是否有一个函数可能允许我为facet_grid标签指定一列 .
1 回答
使用
forcats
和dplyr
: