根据 geom_tile() 热图中的两个列值对行重新排序
Reorder rows according to two column values in geom_tile() heatmap
library(tidyverse)
df <- data.frame(country = c("USA", "USA", "USA",
"UK", "UK", "UK",
"Japan", "Japan", "Japan",
"Germany", "Germany", "Germany",
"Sweden","Sweden","Sweden",
"Norway","Norway","Norway"),
year = c(2000, 2001, 2002,
2000, 2001, 2002,
2000, 2001, 2002,
2000, 2001, 2002,
2000, 2001, 2002,
2000, 2001, 2002),
value = c(0,1,1,
1,1,1,
0,0,0,
0,0,1,
0,1,1,
0,1,0))
ggplot(df, aes(year, country, fill = factor(value)))+
geom_tile(color = "white", size = 1)+
theme_minimal()
这是我得到的数据、代码和原始图。
有没有一种方法可以同时按 value
值和 year
对国家/地区行进行重新排序?
我的目标:国家/地区行将按 year
s 中的第一个 value
=1 排序。
问题:因为我也希望图例是因子,而不是连续的。这会在订购时造成问题。
理想顺序:
- 第一行:英国
- 第 2 行:瑞典或美国(因为它们具有相同的值)
- 第 3 行:瑞典或美国(因为它们具有相同的值)
- 第 4 行:挪威
- 第 5 行:德国
- 第 6 行:日本
您可以使用包 forcats
中的 fct_relevel
,如果这是您要找的。
library(tidyverse)
library(forcats)
ro <- c('Japan', 'Germany', 'Norway', 'USA','Sweden', 'UK')
df %>%
mutate(country= fct_relevel(country, ro)) %>%
ggplot(aes(year, country, fill = factor(value))) +
geom_tile(color = "white", size = 1)+
theme_minimal()
library(tidyverse)
df <- data.frame(country = c("USA", "USA", "USA",
"UK", "UK", "UK",
"Japan", "Japan", "Japan",
"Germany", "Germany", "Germany",
"Sweden","Sweden","Sweden",
"Norway","Norway","Norway"),
year = c(2000, 2001, 2002,
2000, 2001, 2002,
2000, 2001, 2002,
2000, 2001, 2002,
2000, 2001, 2002,
2000, 2001, 2002),
value = c(0,1,1,
1,1,1,
0,0,0,
0,0,1,
0,1,1,
0,1,0))
ggplot(df, aes(year, country, fill = factor(value)))+
geom_tile(color = "white", size = 1)+
theme_minimal()
这是我得到的数据、代码和原始图。
有没有一种方法可以同时按 value
值和 year
对国家/地区行进行重新排序?
我的目标:国家/地区行将按 year
s 中的第一个 value
=1 排序。
问题:因为我也希望图例是因子,而不是连续的。这会在订购时造成问题。
理想顺序:
- 第一行:英国
- 第 2 行:瑞典或美国(因为它们具有相同的值)
- 第 3 行:瑞典或美国(因为它们具有相同的值)
- 第 4 行:挪威
- 第 5 行:德国
- 第 6 行:日本
您可以使用包 forcats
中的 fct_relevel
,如果这是您要找的。
library(tidyverse)
library(forcats)
ro <- c('Japan', 'Germany', 'Norway', 'USA','Sweden', 'UK')
df %>%
mutate(country= fct_relevel(country, ro)) %>%
ggplot(aes(year, country, fill = factor(value))) +
geom_tile(color = "white", size = 1)+
theme_minimal()