2012-09-17 16 views
5

Estoy intentando crear un plot de densidad simple en R en ggplot2. Aquí está mi código que funciona muy bien.R ggplot2 - Gráfico simple: no se pueden especificar los límites del eje de registro

d <- ggplot(result, aes(x=result$baseMeanA)) 
d + geom_density(colour="darkgreen", size=2, fill="darkgreen") + 
scale_x_log10() + scale_y_continuous(limits = c(0, 0.45)) 

El problema es que no puedo ajustar el eje x como me gustaría, en números negativos.

scale_x_log10(limits= c(1, 10000)) 

funciona muy bien, pero

scale_x_log10(limits= c(-1, 10000)) 

no funciona en absoluto! Me da este error:

Error in if (zero_range(range)) { : missing value where TRUE/FALSE needed

¡Ayuda!

+1

Simplemente adivinando, pero quizás quiera que los límites en la escala original vayan de 0.1 a 10000 (es decir, log10 (x) va de -1 a 5)? Es de suponer que no quiere que log10 (x) pase de -1 a 10000, porque el límite superior sería entonces de 10^10000 (un * muy * gran valor, ya que hay alrededor de 10^80 átomos en el universo observable http : //en.wikipedia.org/wiki/Observable_universe ...) Si estoy en lo cierto, entonces quiere 'scale_x_log10 (limits = c (0.1,1e5))' –

+0

Sí, creo que lo entiendo ahora. No puedo usar números negativos en una escala de registro ... Gracias. Ahora veo lo que tengo que hacer, necesito agregar un pseudonúmero como 1 o 0.1 al resultado, para que se vea correctamente, de lo contrario perderé todos los números muy pequeños de alguna manera. – user1678000

Respuesta

2

Lo que estás tratando de hacer no tiene mucho sentido, ¿o sí? El registro de números negativos no es algo que podamos representar en R

R> log(-1) 
[1] NaN 
Warning message: 
In log(-1) : NaNs produced 

Entonces, ¿dónde debería dibujar R el eje?

+0

Sí, tienes razón, probablemente. No sabía eso. Creo que ahora sé que para resolver mi problema necesito agregar un pseudonúmero a mi resultado para que pueda verlo visualmente. – user1678000

3

Si el rango de los límites debe ser en parte por debajo de cero, se podría transformar su log10-variable y especificar los límites de una escala continua:

ggplot(result, aes(x=log10(baseMeanA))) + 
    geom_density(colour="darkgreen", size=2, fill="darkgreen") + 
    scale_x_continuous(limits = c(-1, 10000) + 
    scale_y_continuous(limits = c(0, 0.45)) + 
1

e^y no puede ser negativo. La constante exponencial e es positiva, y y es solo un exponente. y por definición matemática:

log (x) = y < ==> x = e^y

Esta es precisamente la razón por R no puede calcular log (x) si x es negativo. Va en contra de la definición matemática.

Espero que esto ayude a entender por qué esta trama le está causando problemas.

Cuestiones relacionadas