Question Impossible de définir des limites avec coord_trans


J'ai des données qui montrent une relation géométrique, mais ont des valeurs aberrantes. Par exemple:

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

Je voudrais tracer cela en utilisant une transformation de journal et en zoomant sur une partie des données. Je sais que je peux faire la première partie avec coord_trans(y='log10'), ou la deuxième partie avec coord_cartesian(ylim=c(2,8)), mais je n'ai pas pu les combiner. Aussi, je dois garder ces points autour, donc simplement les écraser avec scale_y_continuous(limits=c(2,8)) ne fonctionnera pas pour moi

Y a-t-il un moyen d'y parvenir sans avoir à recourir au terrible hack suivant? Peut-être un moyen non documenté pour passer les limites à 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


10
2018-01-19 18:18


origine


Réponses:


Cela peut être un travail un peu plus simple:

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


4
2018-01-20 09:10



J'ai eu le même problème et lutté pour le résoudre jusqu'à regarder de plus près ?coord_trans (en v1.0.0 de ggplot2):

Usage

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

Vous pouvez donc définir les transformations et les limites en même temps, comme ceci:

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

1
2017-09-03 16:47