无法使用coord_trans设置限制

Joh*_*lby 10 r ggplot2

我有一些数据显示几何关系,但有异常值.例如:

x = seq(0.1, 1, 0.01)
dat = data.frame(x=x, y=10^x)
dat[50:60, 2] = 10

qplot(x, y, data=dat, geom='line')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想使用对数变换绘制它,同时放大部分数据.我知道我可以用第一部分coord_trans(y='log10')或第二部分来做coord_cartesian(ylim=c(2,8)),但是我无法将它们组合起来.此外,我需要保持这些点,所以简单地剪切它们scale_y_continuous(limits=c(2,8))对我不起作用.

有没有办法实现这一点,而不必采取以下可怕的黑客攻击?也许是一种无法通过限制的无证方式coord_trans

pow10 <- function(x) as.character(10^x)

qplot(x, log10(y), data=dat, geom='line') +
  scale_y_continuous(breaks=log10(seq(2,8,2)), formatter='pow10') +
  coord_cartesian(ylim=log10(c(2,8)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

bde*_*est 4

这可能是一个稍微简单的解决方法:

library(ggplot2)

x = seq(0.1, 1, 0.01)
dat = data.frame(x=x, y=10^x)
dat[50:60, 2] = 10

plot_1 = ggplot(dat, aes(x=x, y=y)) +
         geom_line() +
         coord_cartesian(ylim=c(2, 8)) +
         scale_y_log10(breaks=c(2, 4, 6, 8), labels=c("2", "4", "6", "8"))

png("plot_1.png")
print(plot_1)
dev.off()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述