4 votos

¿Reproducir un diagrama de dispersión logarítmica con datos inventados (no 100% exactos, sino 80% más o menos)?

Hay un gráfico bastante chulo que me gustaría recrear sólo con fines ilustrativos. No hay inferencias vitales que estén en juego, así que no pasa nada por emborronar un poco las cifras. Básicamente, sólo quiero captar las características generales de los datos y presentarlos de forma muy similar. Aquí está la referencia: enter image description here

Pregunta: ¿Puede alguien proporcionar algún pseudocódigo o código python para crear un gráfico bastante similar al anterior? Parece que la media está en torno a 10^8, pero la dispersión es muy complicada (al menos para mí). La otra parte complicada es reproducir esa gran concentración de puntos de datos que se encuentran bajo la línea diagonal. Ten en cuenta que la dispersión no es simétrica respecto a la línea diagonal.

Otras aclaraciones

  • Observaciones: 500 (probablemente un conjunto de datos menor que el original, no necesito 1.000 millones de puntos)
  • Escala: log
  • Componentes opcionales: la línea diagonal, las etiquetas y las elipses de grupo son opcionales, puede omitirlas si lo desea.

7voto

Dom Puntos 217

Utilice una herramienta como WebPlotDigitalizer que extrae puntos de las imágenes basándose en el color y otras variables. La herramienta permite definir fácilmente el rango de los ejes (permitiendo incluso la escala logarítmica), para dar coordenadas a cada punto. Con un intento de 5 minutos extraje muchos puntos (1305, para ser precisos) y construí el siguiente gráfico usando plotly (¡al que la herramienta anterior puede exportar en un clic!):

enter image description here

Los datos son aquí en formato csv. Sólo importe sus datos en R y, a continuación, trazar (por ejemplo, utilizando ggplot2 ).

Hay montones de tutoriales en línea sobre cómo crear gráficos de dispersión en R a partir de datos importados

PD: de nuevo, acabo de pasar 5 minutos haciendo esto. Para replicar correctamente hay que tener más cuidado, como la eliminación de puntos en el medio, la escala de ejes adecuada, etc.

5voto

Meta Puntos 264

Puedo proporcionarle algún código R para obtener un escenario similar que desplaza los datos en el extremo superior de la escala por la constante log(2) en la escala logarítmica:

x<-rnorm(1000,mean=7.5,sd=1); # 1000 random values for x

y<-x+rnorm(1000,sd=0.25)  # adding random noise to x, playing with the standard deviation changes how clearly you see the 'shift' between the groups
 #by creation these data are along the diagonal line

y[x<8.5]<-y[x<8.5]-log(2)   # shifts the data on the lower end of the scale by the constant log(2) on the log-scale to create two types of users

plot(10^x,10^y,log = "xy");  # plots on the log-log-scale

abline(a=0, b=1)  #adds the diagonal line

enter image description here

2voto

Nixit Patel Puntos 34

Esto no parece una respuesta, pero no puedo utilizar gráficos en los comentarios. Esta trama no es muy refinado, todavía. ¿Es más o menos lo que pedías o falta algo importante? Aún no estoy seguro de cuál es el problema. enter image description here

x <- rnorm(500,8)
y <- x - runif(500)+rnorm(500,0,.3)

x <- x^10
y <- y^10
plot(x, y, 
     log="xy", xlim = c(1e7, 5e10),
     xlab="Daily outbound traffic [bytes]",
     ylab="Daily inbound traffic [bytes]")

Esto es R pero como estabas dispuesto a aceptar Pseudocódigo...

Otro sabor de R , aspecto diferente, pero la misma pregunta, si esto incluye la esencia de lo que estabas buscando

enter image description here

library(ggplot2)
d <- data.frame(x=x, y=y)
p <- ggplot(d, aes(x=x, y=y)) + geom_point() +
     scale_x_continuous(trans = 'log10') +
     scale_y_continuous(trans = 'log10') +
     geom_smooth(method="lm") +
     xlab("Daily outbound traffic [bytes]") +
     ylab("Daily inbound traffic [bytes]")
print(p)

Sí, hay mucho margen para mejorar la trama, pero mientras eso no sea estadística sino una cuestión de lenguaje de programación, esto se sale del tema.

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