Usando ggplot2, ¿puedo insertar un corte en el eje?

Quiero hacer un diagtwig de barras donde uno de los valores es mucho más grande que todos los demás valores. ¿Hay alguna manera de tener un eje y discontinuo? Mis datos son los siguientes:

df <- data.frame(a = c(1,2,3,500), b = c('a1', 'a2','a3', 'a4')) p <- ggplot(data = df, aes(x = b, y = a)) + geom_bar() p <- p + opts(axis.text.x=theme_text(angle= 90, hjust=1)) + coord_flip() p 

enter image description here

¿Hay alguna manera de hacer que mi eje funcione desde 1 a 10, luego a 490 a 500? No puedo pensar en otra forma de trazar los datos (aparte de transformarlos, lo que no quiero hacer)

Como se señaló en otra parte, esto no es algo que ggplot2 manejará bien, ya que los ejes rotos generalmente se consideran cuestionables.

Otras estrategias a menudo se consideran mejores soluciones para este problema. Brian mencionó algunas (facetas, dos ttwigs centradas en diferentes conjuntos de valores). Otra opción que las personas a menudo pasan por alto, especialmente para los diagtwigs de barras, es hacer una tabla :

enter image description here

Al observar los valores reales, ¡el 500 no oscurece las diferencias en los otros valores! Por alguna razón, las tablas no reciben suficiente respeto como datos una técnica de visualización. Puede objetar que sus datos tienen muchas, muchas categorías que se vuelven difíciles de manejar en una tabla. Si es así, es probable que su gráfico de barras tenga demasiadas barras para ser sensato también.

Y no estoy discutiendo por tablas todo el tiempo. Pero definitivamente son algo a considerar si está haciendo gráficos de barras con relativamente pocos compases. Y si está haciendo diagtwigs de barras con toneladas de barras, puede que tenga que replantearse de todos modos.

Finalmente, también está la función axis.break en el paquete plotrix que implementa ejes rotos. Sin embargo, por lo que veo, tendrás que especificar las tags de los ejes y las posiciones tú mismo, a mano.

No, no usando ggplot. Consulte la discusión en el hilo en http://groups.google.com/group/ggplot2/browse_thread/thread/8d2acbfc59d2f247 donde Hadley explica por qué no es posible, pero ofrece una alternativa sugerida (diagtwigs con facetas, uno con todos los datos, uno zoom en una región en particular).

No con ggplot, pero con plotrix puedes hacer eso fácilmente:

 library(plotrix) gap.barplot(df$a, gap=c(5,495),horiz=T) 

no, desafortunadamente no

El temor es que permitir ejes discontinuos conduzca al engaño de la audiencia. Sin embargo, hay casos en que no tener un eje discontinuo conduce a la distorsión.

Por ejemplo, si el eje está truncado, pero generalmente se encuentra dentro de algún intervalo (digamos [0,1]), el público puede no notar el truncamiento y hacer conclusiones distorsionadas sobre los datos. En este caso, un eje discontinuo explícito sería más apropiado y transparente.

Comparar:

Ejemplo de buen uso de eje discontinuo versus continuo

Dudo que haya algo fuera de lo común en R, pero podrías mostrar los datos como una serie de cubos parciales 3D. 500 es solo 5 * 10 * 10, por lo que se escalaría bien. El valor exacto podría ser una etiqueta.

Esto probablemente solo debería usarse si debe tener una representación gráfica por algún motivo.