我通常在ggplot文本对象的位置美学中使用无限值,使标签出现在图的角落,而不管数据比例如何。我主要在制作多面板图形时使用它,每个面板中应该有字母来标识图例中的每个面板。但是,如果我希望标签出现在左侧或底部,这似乎不适用于日志比例,因为显然转换日志(-Inf)会返回NaN。这有一个简单的解决方案吗?我可以做一个长期的解决方法,但我希望有一些更容易的事情。示例如下:
notlogdata <- data.frame(x = 1:3,y = 1:3)
ggplot(notlogdata, aes(x = x,y = y)) +
geom_point() +
geom_text(data = data.frame(x = -Inf, y = Inf, l = 'a'), aes(label = l), hjust = -0.5, vjust = 1)
logdata <- data.frame(x = 10^(1:3), y = 10^(1:3))
ggplot(logdata, aes(x = x,y = y)) +
geom_point() +
geom_text(data = data.frame(x = -Inf, y = Inf, l = 'a'), aes(label = l), hjust = -0.5, vjust = 1) +
scale_x_log10() +
scale_y_log10()
第二个图没有标签并返回警告:
警告讯息:
1:在自我$ trans $ transform(x)中:NaNs产生了 2:删除了包含缺失值的1行(geom_text)。
答案 0 :(得分:1)
答案 1 :(得分:0)
似乎不可能在对数转换轴上使用负定位美学,包括-Inf
。这是一个使用牛皮图的解决方案,如zx8754
library(cowplot)
notlogdata <- data.frame(x = 1:3,y = 1:3)
notlogplot <- ggplot(notlogdata, aes(x = x,y = y)) +
geom_point()
logdata <- data.frame(x = 10^(1:3), y = 10^(1:3))
logplot <- ggplot(logdata, aes(x = x,y = y)) +
geom_point() +
scale_x_log10() +
scale_y_log10()
plot_grid(notlogplot, logplot, labels=c('a','b'), hjust=-8)
这将输出以下图表: