根据另一个变量的值控制颜色的顺序

我想根据另一个变量的值控制点/线的颜色顺序。

一个解释我想要做什么的例子:

library(tidyverse)
set.seed(12345) 

# example data 
df <- data.frame(
  country = rep(c("India", "Sweden", "Germany", "Finland", "NZ", "Aus"), each = 4),
  year = rep(2010:2013, 6),
  value = sample(1:100, 24)
)

# create a rank column
df <- df %>% 
  group_by(year) %>% 
  mutate(rank = rank(value, ties.method = "random")) 

# plot
ggplot(df, aes(year, rank, color = country)) +
  geom_point(size = 5) +
  geom_line(size = 2) +
  scale_colour_viridis_d(direction = 1) +
  scale_y_reverse()

viridis 调色板是有序的,默认情况下,排序是根据颜色变量(countires)的字母顺序设置的,例如澳大利亚最暗(紫色)到瑞典最亮(黄色)。

有没有办法根据rank2010年的变量更改要订购的颜色,例如印度 = 最暗(紫色)到芬兰最亮(黄色)?

在我的真实数据集中有超过 6 个国家,所以我不想手动为国家/地区级别分配颜色。

回答

这应该对你有用。基本上,您想让您的国家/地区名称成为一个有序因素。


library(tidyverse)
set.seed(12345) 

# example data 
df <- data.frame(
  country = rep(c("India", "Sweden", "Germany", "Finland", "NZ", "Aus"), each = 4),
  year = rep(2010:2013, 6),
  value = sample(1:100, 24)
)

# create a rank column
df <- df %>% 
  group_by(year) %>% 
  mutate(rank = rank(value, ties.method = "random")) %>%
  arrange(year, rank) %>%
  # Arranging first is important because as_factor creates a factor ordered
  # by the order in which the values appear in the dataframe
  mutate(country = as_factor(country))

# plot
ggplot(df, aes(year, rank, color = country)) +
  geom_point(size = 5) +
  geom_line(size = 2) +
  scale_colour_viridis_d(direction = 1) +
  scale_y_reverse()


以上是根据另一个变量的值控制颜色的顺序的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>