我正在尝试可视化一些数据,这些数据包含嵌套在国家/地区的区域的优势比和置信区间。我正在使用geom_pointrange选项,它一般很好用。
我的问题是,由于优势比(和上限置信区间)可以获得相当高的值,因此绘制了曲线的轴以适应这一点。结果是,介于0和1之间的置信区间不够清晰。我通过这个社区找到的一个选项是将值更改为因子,并且对于每个测量,它们之间的距离将被视为相同。这适用于优势比(仍然需要调整轴刻度线)但是当涉及较低和较高置信区间的值时,位置是完全错误的并且置信区间不包括点估计。我试图通过将所有值包含在因子的水平来解决这个问题,但这似乎并没有解决问题。
我要做的是能够“放大”图形中0到1之间的区域,同时保持绘图区域的其余部分不变或设法使ggplot正确放置置信区间比值比。
下面我列出了我的数据的简化版本以及我用于重新生成的代码。
dat <- data.frame(region = rep(LETTERS[1:5], 2),
country = rep(c("A1", "A2"), each = 5),
or = c(6.459578, 1.696221, 0.895115, 3.393235, 2.325510,
4.457805, 0.407111, 22.760861, 3.354883, 2.214915),
lower = c(5.768999699, 0.237062909, 0.347443105, 0.369881529,
0.010233696, 1.020315696, 0.004419494, 3.87391259,
0.808667764, 0.874415935),
upper = c(7.2328221, 12.1367207, 2.3060778, 31.1290104,
28.4497981, 19.4763489, 0.750188, 337.2960785,
13.9182469, 5.610429))
library(ggplot2)
ggplot(dat, aes(x = region, y = or, ymin = lower, ymax = upper))+
geom_pointrange() +
geom_hline(yintercept = 1, linetype = 2) +
theme_bw() +
theme(plot.margin = unit(c(1, 1, 1, 4), "lines"),
axis.title = element_blank(),
axis.ticks.y = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.position="none") +
facet_wrap(~ country) +
coord_flip(ylim = c(0, 100))
# Change numeric variable into factors
f.levels <- c(dat$or, dat$lower, dat$upper)
f.levels <- unique(f.levels)
f.levels <- as.character(f.levels[order(f.levels)])
dat$or <- factor(dat$or, levels = f.levels)
dat$lower <- factor(dat$lower, levels = f.levels)
dat$upper <- factor(dat$upper, levels = f.levels)
ggplot(dat, aes(x = region, y = or, ymin = lower, ymax = upper))+
geom_pointrange() +
geom_hline(yintercept = 1, linetype = 2) +
theme_bw() +
theme(plot.margin = unit(c(1, 1, 1, 4), "lines"),
axis.title = element_blank(),
axis.ticks.y = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.position="none") +
facet_wrap(~ country) +
coord_flip(ylim = c(0, 30))
我对ggplot比较新,所以请原谅任何新手的错误。 对此问题的任何建议都非常感谢。
谢谢!
答案 0 :(得分:3)
我认为这个问题的标准解决方案是以log(10)的比例绘制OR。有关简洁的解释,请参阅https://blogs.sas.com/content/iml/2015/07/29/or-plots-log-scale.html
ggplot(dat, aes(x = region, y = or, ymin = lower, ymax = upper)) +
geom_pointrange() +
geom_hline(yintercept = 1, linetype = 2) +
scale_y_log10() + ### This is the line that makes the transfomation
theme_bw() +
theme(plot.margin = unit(c(1, 1, 1, 4), "lines"),
axis.title = element_blank(),
axis.ticks.y = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.position="none") +
facet_wrap(~ country) +
coord_flip()