Невозможно установить лимиты с помощью Coord_trans

У меня есть некоторые данные, которые показывают геометрические отношения, но имеют выбросы. Например:

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')

enter image description here

Я хотел бы построить это, используя преобразование журнала, и увеличив часть данных. Я знаю, что я могу сделать первую часть с 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)))

enter image description here

Ответ 1

Это может быть несколько более простая работа:

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()

enter image description here

Ответ 2

У меня была такая же проблема и я попытался ее решить, пока не посмотрел более внимательно на ?coord_trans (в версии 1.0.0 ggplot2):

Использование

coord_trans (xtrans = "identity", ytrans = "identity", limx = NULL, limy = NULL)

Таким образом, вы можете одновременно устанавливать преобразования и пределы, например:

ggplot(dat, aes(x=x, y=y)) + geom_line() +
  coord_trans(ytrans="log10", limy=c(2,8))