我有一个来自文献调查的数据集,我们研究Metrics
了一组动物中 pH 值对某些参数 ( ) 的影响。因为实验是在不同的时间尺度上进行的,所以我将响应比除以时间。
这导致 1 左右的差异非常小(小于 1 有负面影响,大于 1 有正面影响),这仍然很有趣且重要(因为实际值除以时间)。问题是某些值要么非常低要么非常高,并且接近 1 的差异不可见。
由于值接近 1,y 轴刻度的对数变换没有帮助。如何转换 y 轴刻度,ggplot2
以便接近 1 的差异可见且直观?(读者可以不用想太多就能发现差异;我可以将值标准化为最小值,乘以 10000 并采用 log10 比例,但这不会导致可以理解的差异。)
df <- structure(list(Study = c(1, 1, 2, 2, 3), pH_control = c(8.06,
8.06, 8.01, 8.01, 7.99), pH_treatment = c(7.86, 7.75, 7.8, 7.8,
7.45), time = c(120, 120, 60, 150, 140), Metrics = structure(c(3L,
1L, 2L, 3L, 1L), .Label = c("Growth", "Metabolism", "Survival"
), class = "factor"), RR_per_time_unit = c(0.9998, 1.001, 1.002,
0.98, 0.9), CI.max = c(1, 1.003, 1.00003, 0.9999, 0.92), CI.min = c(0.9996,
0.9999, 1.004, 0.9789, 0.89), pH_diff = c(0.2, 0.31, 0.21, 0.21,
0.54)), .Names = c("Study", "pH_control", "pH_treatment", "time",
"Metrics", "RR_per_time_unit", "CI.max", "CI.min", "pH_diff"), row.names = c(NA,
-5L), class = "data.frame")
df$pH_diff <- df$pH_control - df$pH_treatment
library(ggplot2)
ggplot(df, aes(y = RR_per_time_unit, x = pH_diff, ymin = CI.min, ymax = CI.max)) +
geom_pointrange(aes(color = Metrics)) + geom_hline(aes(yintercept = 1)) + coord_trans(y = "log10")