# The Batman’s Ecosystem

If I weren’t crazy, I’d be insane! (Joker)

I present today a dynamical D3.js plot where I combine three things:

• The Batman curve
• A text mining analysis to obtain most common words from the Batman’s page at Wikipedia
• A line plot using morris.js library of `rCharts` package where point labels are the words obtained in the previous step

This is my particular homage to one of the most amazing superheros ever, together with Daredevil. Since I am not allowed to post JavaScript nor embed objects in my WordPress.com blog, I can only show you an screenshot of the graph:

If you want to play with the graph, you can download it here. This is not the first time I write about Batman (see this), and maybe will not be the last one.

The code:

```require(ggplot2)
require(dplyr)
require(rCharts)
library(rvest)
library(tm)
f1u <- function(x) {ifelse ((abs(x) >  3 & abs(x) <= 7), 3*sqrt(1-(x/7)^2), 0)}
f1d <- function(x) {ifelse ((abs(x) >= 4 & abs(x) <= 7), -3*sqrt(1-(x/7)^2), 0)}
f2u <- function(x) {ifelse ((abs(x) > 0.50 & abs(x) < 0.75),  3*abs(x)+0.75, 0)}
f2d <- function(x) {ifelse ((abs(x) > -4 & abs(x) < 4), abs(x/2)-(3*sqrt(33)-7)*x^2/112-3 + sqrt(1-(abs(abs(x)-2)-1)^2), 0)}
f3u <- function(x) {ifelse ((x > -0.5 & x < 0.5), 2.25, 0)}
f4u <- function(x) {ifelse ((abs(x) >  1 & abs(x) <= 3), 6 * sqrt(10)/7 + (1.5 - 0.5 * abs(x)) * sqrt(abs(abs(x)-1)/(abs(x)-1)) - 6 * sqrt(10) * sqrt(4-(abs(x)-1)^2)/14, 0)}
f5u <- function(x) {ifelse ((abs(x) >= 0.75 & abs(x) <= 1), 9-8*abs(x), 0)}
fu <- function (x) f1u(x)+f2u(x)+f3u(x)+f4u(x)+f5u(x)
fd <- function (x) f1d(x)+f2d(x)
batman <- function(r,x) {ifelse(r%%2==0, fu(x), fd(x))}
data.frame(x=seq(from=-7, to=7, by=0.125)) %>%
mutate(y=batman(row_number(), x)) -> df
html("https://en.wikipedia.org/wiki/Batman") %>%
html_nodes("#bodyContent")  %>%
html_text() %>%
VectorSource() %>%
Corpus() %>%
tm_map(tolower) %>%
tm_map(removePunctuation) %>%
tm_map(removeNumbers) %>%
tm_map(stripWhitespace) %>%
tm_map(removeWords, c(stopwords(kind = "en"), "batman", "batmans")) %>%
DocumentTermMatrix() %>%
as.matrix() %>%
colSums() %>%
sort(decreasing=TRUE) %>%
head(n=nrow(df)) %>%
attr("names") -> df\$word
m1=mPlot(x = "x",  y = "y",  data = df,  type = "Line")
m1\$set(pointSize = 5,
lineColors = c('black', 'black'),
width = 900,
height = 500,
hoverCallback = "#! function(index, options, content)
{ var row = options.data[index]
return '<b>' + row.word + '</b>'} !#",
lineWidth = 2,
grid=FALSE,
axes=FALSE)
m1
m1\$save('Batman.html', standalone = TRUE)

```
Advertisements