繁体   English   中英

将对数刻度应用于y轴以使用ggplot2可视化比例

[英]Applying log scale to y-axis for visualizing proportions with ggplot2

我试图从R中的一篇研究文章中重新创建一些图,并且遇到了将对数刻度应用于y轴的问题。 我尝试重新创建的可视化效果是: 带有y对数比例的参考图

我目前有一个工作版本,没有将对数刻度应用于y轴:

  Proportion_Mean_Plot <- ggplot(proportions, aes(days2, 
                                 proportion_mean, group = observation)) +
  geom_point(aes(shape = observation)) + 
  geom_line() +
  scale_x_continuous(breaks = seq(0,335,20)) +
  scale_y_continuous(breaks = seq(0,6,.5)) +
  theme_tufte() + 
  geom_rangeframe() +
  theme(legend.position="none") +
  theme(axis.line.x = element_line(colour = "black", size = 0.5, linetype = 1),
        axis.line.y = element_line(colour = "black", size = 0.5, linetype = 1)) +
  labs(title = "Proportion of Baseline Mean",
       subtitle = "Daily steps within each intervention phase",
       x = "DAYS", 
       y = "PROPORTION OF BASELINE \n(MEAN)") +
  geom_vline(xintercept = 164.5) +
  geom_hline(yintercept = 1) +
  annotate("text", x = c(82, 246), y = 5,
           label = c("Intervention 1", "Intervention 2")) +
  geom_segment(aes(x = 0, y = mean, xend = end, yend = mean),
               data = proportion_intervention1_data) +
  geom_segment(aes(x = start, y = mean, xend = end, yend = mean),
               data = proportion_intervention2_data, linetype = 4) 

这样可以很好地表现原始图像: 通常按比例缩放的y轴图

我想尝试应用对数缩放以使其更接近匹配。 任何帮助表示赞赏。

根据Richard的建议,这是一个简单的示例,说明如何使用scale_y_log10

suppressPackageStartupMessages(library(tidyverse))
set.seed(123)
# generate some data
proportions <- tibble(interv_1 = pmax(0.4, rnorm(160, mean = 1.3, sd = 0.2)),
                      interv_2 = pmax(0.01, rnorm(160, mean = 1.6, sd = 0.5)))

proportions <- proportions %>% 
  gather(key = observation, value = proportion_mean) %>% 
  mutate(days2 = 1:320)

# create the plot
ggplot(proportions, aes(days2, proportion_mean, group = observation)) +
  geom_point(aes(shape = observation)) + 
  geom_line() +
  scale_x_continuous(breaks = seq(0,335,20), expand = c(0, 0)) +
  scale_y_log10(breaks = c( 0.1, 0.5, 1, 2, 3, 4, 5), limits = c(0.1, 5)) +
  # theme_tufte() + 
  # geom_rangeframe() +
  theme(legend.position="none") +
  theme(axis.line.x = element_line(colour = "black", size = 0.5, linetype = 1),
        axis.line.y = element_line(colour = "black", size = 0.5, linetype = 1)) +
  labs(title = "Proportion of Baseline Mean",
       subtitle = "Daily steps within each intervention phase",
       x = "DAYS", 
       y = "PROPORTION OF BASELINE \n(MEAN)") +
  geom_vline(xintercept = 164.5) +
  geom_hline(yintercept = 1) +
  annotate("text", x = c(82, 246), y = 5,
           label = c("Intervention 1", "Intervention 2")) +
  # plugged the values for the means of the two distributions
  geom_segment(aes(x = 0, y = 1.3, xend = 164.5, yend = 1.3)) +
  geom_segment(aes(x = 164.5, y = 1.6, xend = 320, yend = 1.6), linetype = 4)

暂无
暂无

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

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