# Visual Complexity

March 10, 2015
By

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Oh, can it be, the voices calling me, they get lost and out of time (Little Black Submarines, The Black Keys)

Last October I did this experiment about complex domain coloring. Since I like giving my posts a touch of randomness, I have done this experiment. I plot four random functions on the form `p1(x)*p2(x)/p3(x)` where `pi(x)` are polynomials up-to-4th-grade with random coefficients following a chi-square distribution with degrees of freedom between 2 and 5. I measure the function over the complex plane and arrange the four resulting plots into a 2×2 grid. This is an example of the output:
Every time you run the code you will obtain a completely different output. I have run it hundreds of times because results are always surprising. Do you want to try? Do not hesitate to send me your creations. What if you change the form of the functions or the distribution of coefficients? You can find my email here.

```setwd("YOUR WORKING DIRECTORY HERE")
require(polynom)
require(ggplot2)
library(gridExtra)
ncol=2
for (i in 1:(10*ncol)) {eval(parse(text=paste("p",formatC(i, width=3, flag="0"),"=as.function(polynomial(rchisq(n=sample(2:5,1), df=sample(2:5,1))))",sep="")))}
z=as.vector(outer(seq(-5, 5, by =.02),1i*seq(-5, 5, by =.02),'+'))
opt=theme(legend.position="none",
panel.background = element_blank(),
panel.margin = unit(0,"null"),
panel.grid = element_blank(),
axis.ticks= element_blank(),
axis.title= element_blank(),
axis.text = element_blank(),
strip.text =element_blank(),
axis.ticks.length = unit(0,"null"),
axis.ticks.margin = unit(0,"null"),
plot.margin = rep(unit(0,"null"),4))
for (i in 1:(ncol^2))
{
pols=sample(1:(10*ncol), 3, replace=FALSE)
p1=paste("p", formatC(pols[1], width=3, flag="0"), "(x)*", sep="")
p2=paste("p", formatC(pols[2], width=3, flag="0"), "(x)/", sep="")
p3=paste("p", formatC(pols[3], width=3, flag="0"), "(x)",  sep="")
eval(parse(text=paste("p = function (x) ", p1, p2, p3, sep="")))
df=data.frame(x=Re(z),
y=Im(z),
h=(Arg(p(z))<0)*1+Arg(p(z))/(2*pi),
s=(1+sin(2*pi*log(1+Mod(p(z)))))/2,
v=(1+cos(2*pi*log(1+Mod(p(z)))))/2)
g=ggplot(data=df[is.finite(apply(df,1,sum)),], aes(x=x, y=y)) + geom_tile(fill=hsv(df\$h,df\$s,df\$v))+ opt
assign(paste("hsv_g", formatC(i, width=3, flag="0"), sep=""), g)
}
jpeg(filename = "Surrealism.jpg", width = 800, height = 800, quality = 100)
grid.arrange(hsv_g001, hsv_g002, hsv_g003, hsv_g004, ncol=ncol)
dev.off()
```

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.