5 votos

Cómo visualizar dos gráficos de barras con escalas muy distintas sin mirar redundante

Más una cuestión estética que ver con la presentación de los datos estadísticos, digamos que tiene 2 conjuntos de datos,

 velocidad peso
2.2 500
b 4.7 222
c 7.3 999
d 3.1 1000

Así que si se hace una gráfica de las velocidades y pesos en el mismo gráfico de barras, usted recibirá blandos y pequeños bares para todos los valores de velocidad (haciéndolos ilegibles). Los datos deben ser vistos juntos, aunque, debido a que existe una cierta relación entre la velocidad y el peso que usted está tratando de mostrar.

Lo que se me ocurrió fue adyacentes gráficos de barras:

enter image description here

Pero parece redundante, con el repetido ejes allí.

9voto

erik Puntos 3923

Está bien tener dos gráficos que comparten un eje.

enter image description here

Pero es mejor evitar una gráfica con dos escalas en la misma dimensión. Hay mucho potencial para una lectura errónea (principalmente suponiendo que la alineación lleva algún significado). Ver el Stephen Pocos artículo Dual de la Escala de los Ejes de los Gráficos: Son Siempre la Mejor Solución?.

2voto

Sean Hanley Puntos 2428

En general, si usted tiene dos mediciones diferentes en cada uno de un conjunto de observaciones, y se sospecha que puede haber una relación entre ellos, creo que es mejor para visualizarlos con un diagrama de dispersión. No sé si usted usa R, pero aquí es un código muy simple y una muestra de la parcela:

speed  = c(2.2, 4.7, 7.3, 3.1)
weight = c(500, 222, 999, 1000)

windows()
  plot(speed, weight)

enter image description here Esta trama no parece muy emocionante, sobre todo porque sólo tiene 4 puntos de datos.

Otra forma de visualizar los datos es usar un dotplot. Esta es una buena manera de ver los datos que representan simple magnitudes, que es lo que tiene, si se busca en sólo una de las variables. Tenga en cuenta que esto es lo mismo que un gráfico de barras proporciona, es sólo que dotplots han demostrado ser más fácil para la gente para extraer la información. La pregunta es, ¿puede usted mirar dos variables al mismo tiempo de tal manera que quizás podría ver las relaciones, pero sin redundancia?

Una manera de lidiar con este problema general es la trama de dos variables en la misma parcela (en este caso, el mismo dotplot). Este tipo de cosas es muy comúnmente se realiza con datos de series de tiempo en economía (he aquí que yo he encontrado a través de Google). El truco es encontrar una manera de conseguir dos escalas diferentes en la misma parcela. Esto puede ser hecho por un reescalado una de las variables en términos de la otra; además, debe ajustar la escala del eje de valores de la otra variable en los términos de la primera. Estos 'rescalings' debe ser lineal transformaciones a fin de no cambiar los datos de una manera significativa. El siguiente es el R código que hace esto de una manera que es increíblemente kluge-y, pero que espero sean fáciles de seguir:

sM  = mean(speed);     wM  = mean(weight)
sSD = sd(speed);       wSD = sd(weight)

weightZ     = (weight-wM)   / wSD
convertedW  = (weightZ*sSD) + sM

sTicks      = c(0:8)
sTicksZ     = (sTicks-sM)    / sSD
convertedST = (sTicksZ*wSD)  + wM
convertedST = round(convertedST)

sY = seq(from=1.1, to=4.1, by=1)
wY = seq(from=0.9, to=3.9, by=1)


windows()
  plot(speed, sY, pch=1, col="red", axes=F, xlab="", ylab="", ylim=c(0.5, 4.5), xlim=c(0,8))
  points(convertedW, wY, pch=2, col="blue")
  abline(h=c(1:4), lty="dashed", col="lightgray")

  box()
  axis(side=2, at=c(1:4), labels=c("a","b","c","d"))
  axis(side=3, at=sTicks,                          col="red")
  axis(side=1, at=sTicks, labels=convertedST,      col="blue")

  mtext("Speed",  side=3, line=2.5, cex=1.5, col="red")
  mtext("Weight", side=1, line=2.5, cex=1.5, col="blue")

  legend("bottomright", legend=c("Speed", "Weight"), pch=c(1,2), col=c("red","blue"))

enter image description here
Con pequeñas cantidades de datos, como los que tenemos aquí, este puede ser más informativo.

2voto

Curro Puntos 530

Usted también podría transformar absoluta escalas en relación al uso de z-transformación (o cualquier otro que usted piensa que es más adecuado).

speed  = c(2.2, 4.7, 7.3, 3.1)
weight = c(500, 222, 999, 1000)
speed=scale(speed)
weight=scale(weight)
rng=extendrange(range(c(speed,weight)))

plot(speed, type="b", col="red", ylim=rng,ylab="z-values",xlab="",xaxt="n",bty="n")
points(weight, type="b",col="blue")
legend("topleft",legend=c("speed","weight"),col=c("red","blue"),lty=1, bty="n",pch=1)
axis(1, at=lbls, labels=lbls)

enter image description here

La característica interesante de este enfoque es que puede ser utilizado en más de dos escalas. Y aunque no es tan informativo sobre los valores de los puntos individuales, hace que las escalas más comparables.

0voto

ran8 Puntos 34

Dado que los conjuntos de datos son diferentes órdenes de magnitud podría desear utilizar una escala logarítmica para su eje-x (o tomar el registro de todas las muestras antes de trazar.) De esa manera usted todavía puede ver la variación dentro del mismo orden de magnitud relativamente bien, mientras que el espacio vacío entre los conjuntos se condensa.

Ejemplo R:

speed  = c(2.2, 4.7, 7.3, 3.1)
weight = c(500, 222, 999, 1000)

barplot(rbind(speed, weight), log='x', beside=T, horiz=T,
        legend.text=T, args.legend=list(x='right'))

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X