Reproducing a log scatter plot with made up data (not 100% exact, but 80% or so)? There is a pretty cool graph I would like to recreate just for illustration purposes. There are no vital inferences that are hanging in the balance, so some smudging of the numbers is perfectly fine. I basically just want to capture the general features of the data and present them in a very similar way. Here is the reference:

Question: Can someone provide some pseudo-code or python code for creating a graph that is pretty similar to the one above? It seems the mean is around 10^8, but the spread is very tricky (for me at least). The other tricky part is reproducing that large concentration of data points that lie under the diagonal line. Note that the spread is not symmetric about the diagonal line.
Further Clarifications


*

*Observations: 500 (probably a smaller data set than the original, I don't need 1 billion dots)

*Scale: log

*Optional Components: diagonal line, labels and cluster ellipses are all optional, you may omit if desired

 A: Use a tool like WebPlotDigitalizer, which extracts points from images based on color and other variables. The tool allows you to easily define the axes range (even allowing for log scale), in order to give coordinates to each point. With a 5-minute attempt I extracted many points (1305, to be precise) and built the following plot using plotly (which the above tool can export to in one click!):

Data is here in csv format. Just import your data into R and then plot (e.g. using ggplot2).  
There are tons of online tutorials on how to create scatterplots in R from imported data 
PS: again, I just spent 5 minutes doing this. For proper replication you need to be more careful, like eliminating points in the middle, proper axes scale, etc.
A: I can provide you with some R Code to result in a similar scenario which shifts the data on the upper end of the scale by the constant log(2) on the log-scale:
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


A: This does not feel like an answer, but I cannot use graphics in comments. This plot is not very refined, yet. Is it about what you asked for or is something important missing? Still not shure, what is the problem 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]")

This is R but as you were ready to accept Pseudocode...
Another flavour of R, different look, still the same question, if this includes the essence of what you were looking for

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)

Yes, there is lot's of room for plot improvement, but as long as that is not statistical but a question of programming language, this is off topic.
