2

我有一个包含长度(整数)和年份(因子)的数据集,我想使用ggridges. 这是一个包含整数和因子数据的类似数据集。如何更改 y 轴上的物种顺序(即因子)?

library(ggplot2)
library(ggridges)
library(viridis)
library(datasets)

order <- c("setosa", "versicolor", "virginica")

ggplot(iris, aes(x = Sepal.Length, y = Species, fill = ..x..), order(Species)) + 
  geom_density_ridges_gradient(scale = 3, rel_min_height = 0.01) +
  scale_fill_viridis(name = "Sepal.Length", option = "A") +
  theme_ridges() +
  labs(title = 'Sepal Length distributions for irises')

在这里,order(Species)或者order(order)不起作用。

我试过了:

scale_y_reverse(breaks=order), expand = c(0.01, 0))

但后来意识到这是针对连续变量的(尝试将年份作为数字 - 没有用)。

4

1 回答 1

1

这是你想要的吗?我添加mutate(Species = factor(Species, levels = rev(myorder)))到你的代码

library(dplyr)
library(ggplot2)
library(ggridges)
library(viridis)
library(datasets)

myorder <- c("setosa", "versicolor", "virginica")
iris <- iris %>% 
  mutate(Species = factor(Species, levels = rev(myorder)))

ggplot(iris, aes(x = Sepal.Length, y = Species, fill = ..x..), Species) + 
  geom_density_ridges_gradient(scale = 3, rel_min_height = 0.01) +
  scale_fill_viridis(name = "Sepal.Length", option = "A") +
  theme_ridges() +
  labs(title = 'Sepal Length distributions for irises')
#> Picking joint bandwidth of 0.181

编辑:另一种更简单的方法是fct_rev()forcats包中使用

library(forcats)
library(ggplot2)
library(ggridges)

ggplot(iris, aes(x = Sepal.Length, y = fct_rev(Species), fill = ..x..), Species) + 
  geom_density_ridges_gradient(scale = 3, rel_min_height = 0.01) +
  scale_fill_viridis_c(name = "Sepal.Length", option = "A") +
  theme_ridges() +
  labs(title = 'Sepal Length distributions for irises')
#> Picking joint bandwidth of 0.181

reprex 包(v0.2.1.9000)于 2018 年 9 月 27 日创建

于 2018-09-27T18:04:45.977 回答