2
votes

ggplot2, introduire des pauses sur une échelle x log

J'ai un tracé comme celui-ci:

 p<-ggplot() +
 geom_line(data= myData, aes(x = myData$x , y = myData$y)) +
 scale_x_log10()+
 scale_y_log10()

Ma valeur x est seq (9880000, 12220000, 10000)

Il n'y a que une cassure sur l'axe des abscisses du tracé, que dois-je faire pour obtenir au moins 3 pauses sur l'axe des x du tracé?


2 commentaires

Pensez à ajouter des exemples de données pour rendre votre question "reproductible", ce qui signifie que nous devrions être en mesure d'exécuter votre code publié dans une nouvelle session R et de reproduire le problème dont vous avez besoin.


En général, c'est une mauvaise pratique d'utiliser l'indexation $ à l'intérieur de aes () même si cela semble parfois fonctionner correctement. Essayez plutôt aes (x = x, y = y) (en supposant que votre data.frame myData a des colonnes nommées x et y ).


3 Réponses :


0
votes

Ajoutez ceci entre vos parenthèses: breaks = seq ( spécifiez, breaks, ici )

Par exemple, si vous vouliez une pause à 0, 10, 100: scale_x_log10 ((pauses = seq (0,10,100))


1 commentaires

Je suppose que vous vouliez probablement dire breaks = c (0, 10, 100) plutôt que seq () ?



2
votes

J'ajoute: scale_x_log10 (breaks = seq (9880000, 12220000, 1000000)) .

Voici mon exemple reproductible:

library(random)
library(ggplot2)

z <- randomStrings(n=235, len=5, digits=TRUE, upperalpha=TRUE, loweralpha=TRUE, unique=TRUE, check=TRUE)
x <- seq(9880000, 12220000, 10000)
y <- randomNumbers(n=235, min=9880000, max=12220000, col=1)

df <- data.frame(z, x, y)

head(df)
     V1       x     V1.1
1 378VO 9880000 11501626
2 AStRK 9890000 10929705
3 sotp4 9900000 11305700
4 AS4DR 9910000 11302110
5 7iFdk 9920000 11611918
6 HIS7z 9930000 11175074

p<-ggplot() + geom_line(data= df, aes(x = df$x , y = df$V1.1)) + scale_y_log10()
p + scale_x_log10(breaks=seq(9880000, 12220000, 1000000))

J'espère que c'est utile ...


0 commentaires

1
votes

Voici un exemple entièrement reproductible du problème de l'affiche originale où un graphique à l'échelle logarithmique n'affiche qu'une seule valeur de rupture sur l'axe des x. Je montre trois solutions possibles ci-dessous.

library(ggplot2)

# Create a reproducible example data.frame using R functions.
x = seq(9880000, 12220000, 10000)

# Use set.seed() so that anyone who runs this code
# will get the same sequence of 'random' values.
set.seed(31415) 
y = cumsum(runif(n=length(x), min=-1e5, max=1e5)) + 1e6

dat = data.frame(x=x, y=y)

# Original poster's plot.
p1 = ggplot(data=dat, aes(x=x, y=y)) + 
     geom_line() +
     scale_x_log10() +
     scale_y_log10() +
     labs(title="1. Plot has only one x-axis break.")

# Add extra x-axis breaks manually.
x_breaks = c(10^7.0, 10^7.04, 10^7.08)
p2 = ggplot(data=dat, aes(x=x, y=y)) + 
     geom_line() +
     scale_x_log10(breaks=x_breaks) +
     scale_y_log10() +
     labs(title="2. Add some x-axis breaks manually.")


# Add extra x-axis breaks in semi-automated manner.
x_breaks = 10^pretty(log10(x))
x_labels = formatC(x_breaks, format = "e", digits = 2)
p3 = ggplot(data=dat, aes(x=x, y=y)) + 
     geom_line() +
     scale_x_log10(breaks=x_breaks, labels=x_labels) +
     scale_y_log10() +
     labs(title="3. Create x-axis breaks with R functions.")



# Skip the log10 scale because the x-values don't span multiple orders of magnitude.
p4 = ggplot(data=dat, aes(x=x, y=y)) + 
     geom_line() +
     scale_y_log10() +
     labs(title="4. Check appearance without log10 scale for x-axis.")


library(gridExtra)
ggsave("example.png", plot=arrangeGrob(p1, p2, p3, p4, nrow=2),
       width=10, height=5, dpi=150)

entrez la description de l'image ici


0 commentaires