微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R ggridges 图 - 显示 y 轴刻度和标签

如何解决R ggridges 图 - 显示 y 轴刻度和标签

我正在尝试随时间生成叠加密度图,比较男性与女性的密度。这是我的输出

enter image description here

我关注的是来自 https://cran.r-project.org/web/packages/ggridges/vignettes/gallery.html 的澳大利亚运动员身高示例。 这是我的代码

ggplot(math_dat,aes(x = order_math,y = time,color = gender,point_color = gender,fill = gender)) +
  geom_density_ridges(
    jittered_points = TRUE,scale = .95,rel_min_height = .01,point_shape = "|",point_size = 3,size = 0.25,position = position_points_jitter(height = 0)
  ) +
  scale_y_discrete(expand = c(0,0)) +
  scale_x_continuous(expand = c(0,0),name = "Rankings") +
  scale_fill_manual(values = c("#D55E0050","#0072B250"),labels = c("female","male")) +
  scale_color_manual(values = c("#D55E00","#0072B2"),guide = "none") +
  scale_discrete_manual("point_color",values = c("#D55E00",guide = "none") +
  coord_cartesian(clip = "off") +
  guides(fill = guide_legend(
    override.aes = list(
      fill = c("#D55E00A0","#0072B2A0"),color = NA,point_color = NA)
  )
  ) +
  ggtitle("Ranks over time") +
  theme_ridges(center = TRUE)

我的问题是我无法生成任何 Y 轴刻度值,并且该示例也不显示任何值。任何想法如何让 Y 轴刻度线显示? 以下是一些类似于我的示例数据:

## generating dataset
order_math<-c(1,2,1,3,3)
gender<-c("M","F","M","F")
time<-c(1,1)
sample<-data.frame(order_math,gender,time)

更新: 在@Tomasu 的建议之后,我更新了我的代码,但它没有运行:

ggplot(math_dat,position = position_points_jitter(height = 0)
  ) +
  scale_y_reverse(limits = c(1000,500,100),expand = c(0,point_color = NA)
  )
  ) +
  ggtitle("Ranks over time") +
  theme_ridges(center = TRUE)+
  theme(
    axis.ticks = element_line(size=0.5),# turn ticks back on
    axis.ticks.length = grid::unit(5,"pt"),# set length
    axis.ticks.y = element_line(colour = "red"),# define tick line color
    axis.text.y = element_text(vjust = .4)       # center text with tick
  )

解决方法

此问题的一个简单解决方案是使用包含轴刻度的 theme_,因为 theme_ridges() 将它们关闭。只需一起删除该主题并使用基本的 ggplot2 主题即可达到预期的结果。

但是,假设我们仍然想使用 theme_ridges() 并重新打开刻度线。这可以通过在 theme() 之后进行 theme_ridges() 编辑 来实现。

我正在使用提供的链接中的示例,因为我无法让您的示例数据正常工作。

library(ggplot2)
library(ggplot2movies)
library(ggridges)

ggplot(movies[movies$year>1912,],aes(x = length,y = year,group = year)) +
  geom_density_ridges(scale = 10,size = 0.25,rel_min_height = 0.03) +
  theme_ridges() +
  theme(
    axis.ticks = element_line(size=0.5),# turn ticks back on
    axis.ticks.length = grid::unit(5,"pt"),# set length
    axis.ticks.y = element_line(colour = "red"),# define tick line color
    axis.text.y = element_text(vjust = .4)       # center text with tick
  ) +
  scale_x_continuous(limits = c(1,200),expand = c(0,0)) +
  scale_y_reverse(
    breaks = c(2000,1980,1960,1940,1920,1900),0)
  ) +
  coord_cartesian(clip = "off")

reprex package (v1.0.0) 于 2021 年 5 月 11 日创建

,

我认为您的问题是您需要指定组。

相关线程:geom_density_ridges requires the following missing aesthetics: y

扩展来自 user tomasu's answer +1 的代码

library(ggridges)
library(ggplot2)
order_math<-c(1,2,1,3,3)
gender<-c("M","F","M","F")
time<-c(1,1)
sample<-data.frame(order_math,gender,time)

ggplot(sample,aes(x = order_math,y = time,group = time,color = gender,point_color = gender,fill = gender)) +
  geom_density_ridges()  +
  theme(
    axis.ticks = element_line(size=0.5),# define tick line color
    axis.text.y = element_text(vjust = .4)       # center text with tick
  )
#> Picking joint bandwidth of 0.555

reprex package (v2.0.0) 于 2021 年 5 月 12 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。