Forzar a R para que deje de trazar etiquetas de eje abreviadas, por ejemplo, 1e + 00 en ggplot2


111

En ggplot2, ¿cómo puedo evitar que las etiquetas de los ejes se abrevian, por ejemplo, a lo 1e+00, 1e+01largo del eje x una vez trazadas? Idealmente, quiero forzar a R para que muestre los valores reales que en este caso serían 1,10.

Cualquier ayuda muy apreciada.

Respuestas:


134

Creo que estás buscando esto:

require(ggplot2)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))
# displays x-axis in scientific notation
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p

# displays as you require
require(scales)
p + scale_x_continuous(labels = comma)

2
Esto funcionó. Gracias. Por interés, ¿qué otras opciones de 'etiqueta' hay para los ejes en ggplot2 con el paquete de escalas?
JPD

3
Visite también esta página de ggplot2.org , fue muy útil para mí con un problema similar.
Marta Karas


35

Solo una actualización de lo que hizo @Arun, ya que lo probé hoy y no funcionó porque se actualizó para

+ scale_x_continuous(labels = scales::comma)

2
La respuesta de @ Arun debería funcionar bien tal como está, tal vez se olvidó de incluir el require(scales)? Esto importa el paquete que contiene la commabáscula. Como ha descubierto, también puede especificar el paquete al referirse a él en lugar de solicitarlo de antemano.
cincodenada

17

Como solución más general, puede utilizar scales::format_formatpara eliminar la notación científica. Esto también le brinda mucho control sobre cómo desea que se muestren exactamente sus etiquetas, en contraposición a lo scales::commaque solo hace las separaciones por comas de los órdenes de magnitud.

Por ejemplo:

require(ggplot2)
require(scales)
df <- data.frame(x=seq(1, 1e9, length.out=100), y=sample(100))

# Here we define spaces as the big separator
point <- format_format(big.mark = " ", decimal.mark = ",", scientific = FALSE)

# Plot it
p  <- ggplot(data = df, aes(x=x, y=y)) + geom_line() + geom_point()
p + scale_x_continuous(labels = point)

8

Existe una solución que no requiere biblioteca de escalas.

Puedes probar:

# To deactivate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on y-axis:

    p + scale_y_continuous(labels = function(x) format(x, scientific = TRUE))

# To deactivate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = FALSE))

# To activate scientific notation on x-axis:

    p + scale_x_continuous(labels = function(x) format(x, scientific = TRUE))

2

¿No es la solución general más simple establecer la penalización que usa R para la notación científica más alta?

es decir, establezca scipen()un número con el que se sienta cómodo.

Por ejemplo, si es probable que el máximo de su eje en los gráficos sea 100 000, la configuración scipen(200000)garantizará que R (y ggplot) utilizarán la notación estándar para todos los números por debajo de 200000 y no habrá ningún requisito para agregar líneas a la función ggplot.


0

Extender la pregunta original para que también comprenda fracciones, es decir, 1, 0.1, 0.01, 0.001, etc. y evitar ceros finales

p + scale_x_continuous(labels = function(x) sprintf("%g", x))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.