简体   繁体   English

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

[英]R ggridges plot - Showing y axis ticks and labels

I am trying to generate overlay density plots over time, comparing densities of males vs. females.我正在尝试随时间生成叠加密度图,比较男性与女性的密度。 Here is my output:这是我的 output: 在此处输入图像描述

I am following the Australian athletes height example from https://cran.r-project.org/web/packages/ggridges/vignettes/gallery.html .我正在关注来自https://cran.r-project.org/web/packages/ggridges/vignettes/gallery.html的澳大利亚运动员身高示例。 Here is my code:这是我的代码:

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", "#0072B2"), 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)

My problem is I am unable to generate any Y axis tick values and the example doesn't display any either.我的问题是我无法生成任何 Y 轴刻度值,并且该示例也不显示任何值。 Any ideas how to get Y axis tick marks to display?任何想法如何让 Y 轴刻度线显示? Here is some sample data similar to mine:以下是一些类似于我的示例数据:

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

UPdate: After @Tomasu's suggestions I have updated my code, but it does not run:更新:在@Tomasu 的建议之后,我更新了我的代码,但它没有运行:

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_reverse(limits = c(1000, 500, 100),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", "#0072B2"), 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)+
  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
  )

An easy solution to this problem would be to use a theme_ that includes the axis ticks as theme_ridges() has them turned off.解决此问题的一个简单方法是使用包含轴刻度的theme_ ,因为theme_ridges()已将它们关闭。 Just removing that theme all together and using the base ggplot2 theme achieves the desired outcome.只需删除该主题并使用基本 ggplot2 主题即可达到预期的结果。

However, let's say we still want to use theme_ridges() and just turn ticks back on.但是,假设我们仍然想使用theme_ridges()并重新打开滴答声。 This can be achieved with a theme() edit after the theme_ridges() .这可以通过在theme_ridges()之后进行theme()编辑来实现。

I'm using the example in the link provided as I couldn't get your sample data to work properly.我正在使用提供的链接中的示例,因为我无法让您的示例数据正常工作。

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),
    expand = c(0, 0)
  ) +
  coord_cartesian(clip = "off")

Created on 2021-05-11 by the reprex package (v1.0.0)代表 package (v1.0.0) 于 2021 年 5 月 11 日创建

I think your problem is that you need to specify the group.我认为您的问题是您需要指定组。

Related thread: geom_density_ridges requires the following missing aesthetics: y相关线程: geom_density_ridges 需要以下缺失的美学:y

Extending on code from user tomasu's answer +1扩展来自用户 tomasu 的答案+1 的代码

library(ggridges)
library(ggplot2)
order_math<-c(1,2,1,2,3,3,1,2,3,1,2,3)
gender<-c("M","F","M","M","M","F","F","M","F","M","M","F")
time<-c(1,1,2,3,3,2,1,2,3,2,3,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),         # 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
  )
#> Picking joint bandwidth of 0.555

Created on 2021-05-12 by the reprex package (v2.0.0)代表 package (v2.0.0) 于 2021 年 5 月 12 日创建

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM