B. DATA BASE GENERATION
B.1. Import vectors
ImageJ scripts produce 3 vectors objects, each vector correspond to each axis: x, y and z. Now, we import these data to R enviroment.
vec.x <- as.numeric(read.csv(paste0(getwd(),"/result/R3_vec_x.csv"), sep="")[,1])
vec.y <- as.numeric(read.csv(paste0(getwd(),"/result/R3_vec_y.csv"), sep="")[,1])
vec.z <- as.numeric(read.csv(paste0(getwd(),"/result/R3_vec_z.csv"), sep="")[,1])
B.2. Data base generation
After import data, we create a data.frame to manage the data as unique object.
xyz <- data.frame(x = vec.x,
y = vec.y,
z = vec.z)
head(xyz)
dim(xyz)
[1] 2047523 3
xyz <- xyz[c(1:1000,5000:6000,10500:11000,20000:20500),]
B.3. Polar cordenates generation
To produce polar graph, we need to convert cartesians xyz cordenates to polar cordinates. We use cart2pol function of the pracma R package to produce polar cordenates object.
polar <- pracma::cart2pol(as.matrix(xyz))
head(polar)
phi r z
1 0.6975257 2457.485 -17
2 0.6972644 2458.252 -17
3 0.6970032 2459.019 -17
4 0.6991465 2454.299 -17
5 0.6986224 2455.830 -17
6 0.6978375 2458.128 -17
B.4. Convert from radians to degrees
Function defined in ggplot R package need that angles are defined as degree, the we have to convert radians to degree with the formula: \[degree = \frac{180(radians)}{\pi}\] But cart2pol function give us radians between -1to +1, them we have to add before the conversion, them the formula is defined by: \[degree = \frac{180(radians+\pi)}{\pi}\]
polar[,1] <- (polar[,1] + pi) *180/pi
summary(polar)
phi r z
Min. : 50.38 Min. :1935 Min. :-17.00
1st Qu.:266.74 1st Qu.:2003 1st Qu.:-16.00
Median :268.72 Median :2435 Median :-14.00
Mean :250.07 Mean :2673 Mean :-14.35
3rd Qu.:319.10 3rd Qu.:3623 3rd Qu.:-13.00
Max. :324.18 Max. :3689 Max. :-12.00
C. GRAPHICS
C.1. Arrow graphs
Now, we use line plot from ggplot R package as first aproximation.
base <- ggplot(polar, aes(x=degree, y=value))
p <- base + coord_polar()
p+ geom_segment(aes(y=0, xend=degree, yend=value))

C.2. Density with colors graph
As second aproximation, we use a density graph to see where signal is more frecuent. NOTA: We can use color parameter to define groups
sp <- ggplot(xyz, aes(x=x, y=y, color=z)) +
geom_point()
sp

C.3. Density with geom 2D density
We can add a count in the axis to gain information by each axis.
sp <- ggplot(xyz, aes(x=x, y=y)) +
geom_point()
sp + geom_rug()

NA
NA
C.4. Density with geom 2D density GEOM
We can see the density of points like geom graph
sp + stat_density_2d(aes(fill = ..level..), geom="polygon")
sp
C.5. Change the gradient color of density graph ++++++
We can change color to define the intesity more easy.
sp + stat_density_2d(aes(fill = ..level..), geom="polygon")+
scale_fill_gradient(low="blue", high="red")

C.6. Elipses plots
One ellipse arround all points. We can cluster signal by their density with stat_ellipse parameter of ggplot function.
ggplot(xyz, aes(x, y))+
geom_point()+
stat_ellipse()

C.7. Ellipse by groups
We try to define differents groups from points density
p <- ggplot(xyz, aes(x, y, color = z))+
geom_point()
p + stat_ellipse()

C.8. Change ellipse shape
Change the type of ellipses: possible values are “t”, “norm”, “euclid” a) “norm”
p + stat_ellipse(type = "norm")

- “t”
p + stat_ellipse(type = "t")

- “euclid”
p + stat_ellipse(type = "euclid")

C.9. Scatter plot with marginal density distribution plot
First we create a scatter plot of x and y variables with colors by groups. NOTA: We can use color parameter to define groups
library(wesanderson)
scatterPlot <- ggplot(xyz,aes(x, y, color=z)) + # cambiar los grupos por los grupos de animales
geom_point() +
# scale_color_manual(values = wes_palette(n=length(levels(as.factor(xyz$z))), name="Rushmore"))
theme(legend.position=c(0,1), legend.justification=c(0,1))
scatterPlot

Then we define marginal density plot of x (top panel)
xdensity <- ggplot(xyz, aes(x, fill=z)) +
geom_density(alpha=.5) +
scale_fill_manual(values = c('#999999','#E69F00')) +
theme(legend.position = "none")
xdensity

Later, we define marginal density plot of y (right panel)
ydensity <- ggplot(xyz, aes(y, fill=z)) +
geom_density(alpha=.5) +
scale_fill_manual(values = c('#999999','#E69F00')) +
theme(legend.position = "none")
ydensity

Now, we create a white plot to put over the other plots
blankPlot <- ggplot()+geom_blank(aes(1,1))+
theme(plot.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank()
)
Finally we put all plots together.
grid.arrange(xdensity, blankPlot, scatterPlot, ydensity,
ncol=2, nrow=2, widths=c(4, 1.4), heights=c(1.4, 4))

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIEEuIExJQlJBUklFUw0KTGlicmFyeSBpbnN0YWxsYXRpb24NCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwcmFjbWEpDQpsaWJyYXJ5KHdlc2FuZGVyc29uKQ0KbGlicmFyeSgiZ3JpZEV4dHJhIikNCmBgYA0KDQoNCiMgQi4gREFUQSBCQVNFIEdFTkVSQVRJT04gDQojIyBCLjEuIEltcG9ydCB2ZWN0b3JzDQpJbWFnZUogc2NyaXB0cyBwcm9kdWNlIDMgdmVjdG9ycyBvYmplY3RzLCBlYWNoIHZlY3RvciBjb3JyZXNwb25kIHRvIGVhY2ggYXhpczogeCwgeSBhbmQgei4NCk5vdywgd2UgaW1wb3J0IHRoZXNlIGRhdGEgdG8gUiBlbnZpcm9tZW50Lg0KYGBge3J9DQp2ZWMueCA8LSBhcy5udW1lcmljKHJlYWQuY3N2KHBhc3RlMChnZXR3ZCgpLCIvcmVzdWx0L1IzX3ZlY194LmNzdiIpLCBzZXA9IiIpWywxXSkNCnZlYy55IDwtIGFzLm51bWVyaWMocmVhZC5jc3YocGFzdGUwKGdldHdkKCksIi9yZXN1bHQvUjNfdmVjX3kuY3N2IiksIHNlcD0iIilbLDFdKQ0KdmVjLnogPC0gYXMubnVtZXJpYyhyZWFkLmNzdihwYXN0ZTAoZ2V0d2QoKSwiL3Jlc3VsdC9SM192ZWNfei5jc3YiKSwgc2VwPSIiKVssMV0pDQoNCmBgYA0KDQojIyBCLjIuIERhdGEgYmFzZSBnZW5lcmF0aW9uDQpBZnRlciBpbXBvcnQgZGF0YSwgd2UgY3JlYXRlIGEgZGF0YS5mcmFtZSB0byBtYW5hZ2UgdGhlIGRhdGEgYXMgdW5pcXVlIG9iamVjdC4NCmBgYHtyfQ0KeHl6IDwtIGRhdGEuZnJhbWUoeCA9IHZlYy54LA0KICAgICAgICAgICAgICAgICAgeSA9IHZlYy55LA0KICAgICAgICAgICAgICAgICAgeiA9IHZlYy56KQ0KaGVhZCh4eXopDQpkaW0oeHl6KQ0KeHl6IDwtIHh5eltjKDE6MTAwMCw1MDAwOjYwMDAsMTA1MDA6MTEwMDAsMjAwMDA6MjA1MDApLF0NCmBgYA0KDQoNCiMjIEIuMy4gUG9sYXIgY29yZGVuYXRlcyBnZW5lcmF0aW9uDQpUbyBwcm9kdWNlIHBvbGFyIGdyYXBoLCB3ZSBuZWVkIHRvIGNvbnZlcnQgY2FydGVzaWFucyB4eXogY29yZGVuYXRlcyB0byBwb2xhciBjb3JkaW5hdGVzLiBXZSB1c2UgKmNhcnQycG9sKiBmdW5jdGlvbiBvZiB0aGUgKnByYWNtYSogUiBwYWNrYWdlIHRvIHByb2R1Y2UgcG9sYXIgY29yZGVuYXRlcyBvYmplY3QuDQoNCmBgYHtyfQ0KcG9sYXIgPC0gcHJhY21hOjpjYXJ0MnBvbChhcy5tYXRyaXgoeHl6KSkNCmhlYWQocG9sYXIpDQpgYGANCg0KDQojIyBCLjQuIENvbnZlcnQgZnJvbSByYWRpYW5zIHRvIGRlZ3JlZXMNCkZ1bmN0aW9uIGRlZmluZWQgaW4gKmdncGxvdCogUiBwYWNrYWdlIG5lZWQgdGhhdCBhbmdsZXMgYXJlIGRlZmluZWQgYXMgZGVncmVlLCB0aGUgd2UgaGF2ZSB0byBjb252ZXJ0IHJhZGlhbnMgdG8gZGVncmVlIHdpdGggdGhlIGZvcm11bGE6DQokJGRlZ3JlZSA9IFxmcmFjezE4MChyYWRpYW5zKX17XHBpfSQkDQpCdXQgKmNhcnQycG9sKiBmdW5jdGlvbiBnaXZlIHVzIHJhZGlhbnMgYmV0d2VlbiAtMVxwaSB0byArMVxwaSwgdGhlbSB3ZSBoYXZlIHRvIGFkZCBccGkgYmVmb3JlIHRoZSBjb252ZXJzaW9uLCB0aGVtIHRoZSBmb3JtdWxhIGlzIGRlZmluZWQgYnk6DQokJGRlZ3JlZSA9IFxmcmFjezE4MChyYWRpYW5zK1xwaSl9e1xwaX0kJA0KDQoNCmBgYHtyfQ0KcG9sYXJbLDFdIDwtIChwb2xhclssMV0gKyBwaSkgKjE4MC9waQ0Kc3VtbWFyeShwb2xhcikNCmBgYA0KDQojIyBCLjUuIEZvcm1hdCBwb2xhciBkYXRhIGJhc2UNClRvIHByb2Nlc3MgZGF0YSBmcm9tICpwb2xhciogZGF0YSBiYXNlIHdlIGFodmUgdG8gY29udmVydCBpdCB0byBkYXRhLmZyYW1lIGNsYXNzIG9iamVjdC4gV2UgcmVuYW1lIGNvbHVtbiB0byBtb3JlIGVhc3kgbWFuYWdlIGluIG5leHQgc3RlcHMuDQpgYGB7cn0NCnBvbGFyIDwtIGFzLmRhdGEuZnJhbWUocG9sYXIpDQpjb2xuYW1lcyhwb2xhcikgPC0gYygiZGVncmVlIiwgInZhbHVlIiwgInoiKQ0KaGVhZChwb2xhcikNCmBgYA0KDQoNCiMgQy4gR1JBUEhJQ1MNCiMjIEMuMS4gQXJyb3cgZ3JhcGhzDQpOb3csIHdlIHVzZSAqbGluZSogcGxvdCBmcm9tICpnZ3Bsb3QqIFIgcGFja2FnZSBhcyBmaXJzdCBhcHJveGltYXRpb24uDQpgYGB7cn0NCmJhc2UgPC0gZ2dwbG90KHBvbGFyLCBhZXMoeD1kZWdyZWUsIHk9dmFsdWUpKQ0KcCA8LSBiYXNlICsgY29vcmRfcG9sYXIoKQ0KcCsgZ2VvbV9zZWdtZW50KGFlcyh5PTAsIHhlbmQ9ZGVncmVlLCB5ZW5kPXZhbHVlKSkNCg0KYGBgDQoNCiMjIEMuMi4gRGVuc2l0eSB3aXRoIGNvbG9ycyBncmFwaA0KQXMgc2Vjb25kIGFwcm94aW1hdGlvbiwgd2UgdXNlIGEgZGVuc2l0eSBncmFwaCB0byBzZWUgd2hlcmUgc2lnbmFsIGlzIG1vcmUgZnJlY3VlbnQuDQo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4qTk9UQSo6IFdlIGNhbiB1c2UgY29sb3IgcGFyYW1ldGVyIHRvIGRlZmluZSBncm91cHMgPC9zcGFuPg0KYGBge3J9DQpzcCA8LSBnZ3Bsb3QoeHl6LCBhZXMoeD14LCB5PXksIGNvbG9yPXopKSArDQogIGdlb21fcG9pbnQoKQ0Kc3ANCg0KYGBgDQoNCg0KIyMgQy4zLiBEZW5zaXR5IHdpdGggZ2VvbSAgMkQgZGVuc2l0eQ0KV2UgY2FuIGFkZCBhIGNvdW50IGluIHRoZSBheGlzIHRvIGdhaW4gaW5mb3JtYXRpb24gYnkgZWFjaCBheGlzLg0KYGBge3J9DQpzcCA8LSBnZ3Bsb3QoeHl6LCBhZXMoeD14LCB5PXkpKSArDQogIGdlb21fcG9pbnQoKQ0Kc3AgKyBnZW9tX3J1ZygpDQoNCg0KYGBgDQoNCiMjIEMuNC4gRGVuc2l0eSB3aXRoIGdlb20gIDJEIGRlbnNpdHkgR0VPTSANCldlIGNhbiBzZWUgdGhlIGRlbnNpdHkgb2YgcG9pbnRzIGxpa2UgZ2VvbSBncmFwaA0KDQpgYGB7cn0NCnNwICsgc3RhdF9kZW5zaXR5XzJkKGFlcyhmaWxsID0gLi5sZXZlbC4uKSwgZ2VvbT0icG9seWdvbiIpDQpzcA0KYGBgDQoNCg0KIyMgQy41LiBDaGFuZ2UgdGhlIGdyYWRpZW50IGNvbG9yIG9mIGRlbnNpdHkgZ3JhcGggKysrKysrICAgDQpXZSBjYW4gY2hhbmdlIGNvbG9yIHRvIGRlZmluZSB0aGUgaW50ZXNpdHkgbW9yZSBlYXN5Lg0KYGBge3J9DQpzcCArIHN0YXRfZGVuc2l0eV8yZChhZXMoZmlsbCA9IC4ubGV2ZWwuLiksIGdlb209InBvbHlnb24iKSsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3c9ImJsdWUiLCBoaWdoPSJyZWQiKSAgICAgICAgICAgICAgIA0KYGBgDQojIyBDLjYuIEVsaXBzZXMgcGxvdHMNCk9uZSBlbGxpcHNlIGFycm91bmQgYWxsIHBvaW50cy4gV2UgY2FuIGNsdXN0ZXIgc2lnbmFsIGJ5IHRoZWlyIGRlbnNpdHkgd2l0aCAqc3RhdF9lbGxpcHNlKiBwYXJhbWV0ZXIgb2YgKmdncGxvdCogZnVuY3Rpb24uDQpgYGB7cn0NCmdncGxvdCh4eXosIGFlcyh4LCB5KSkrDQogIGdlb21fcG9pbnQoKSsNCiAgc3RhdF9lbGxpcHNlKCkNCg0KYGBgDQoNCiMjIEMuNy4gRWxsaXBzZSBieSBncm91cHMNCldlIHRyeSB0byBkZWZpbmUgZGlmZmVyZW50cyBncm91cHMgZnJvbSBwb2ludHMgZGVuc2l0eQ0KYGBge3J9DQpwIDwtIGdncGxvdCh4eXosIGFlcyh4LCB5LCBjb2xvciA9IHopKSsNCiAgZ2VvbV9wb2ludCgpDQpwICsgc3RhdF9lbGxpcHNlKCkNCmBgYA0KDQojIyBDLjguIENoYW5nZSBlbGxpcHNlIHNoYXBlDQpDaGFuZ2UgdGhlIHR5cGUgb2YgZWxsaXBzZXM6IHBvc3NpYmxlIHZhbHVlcyBhcmUgInQiLCAibm9ybSIsICJldWNsaWQiDQphKSAibm9ybSINCmBgYHtyfQ0KcCArIHN0YXRfZWxsaXBzZSh0eXBlID0gIm5vcm0iKQ0KYGBgDQpiKSAidCINCmBgYHtyfQ0KcCArIHN0YXRfZWxsaXBzZSh0eXBlID0gInQiKQ0KYGBgDQpjKSAiZXVjbGlkIg0KYGBge3J9DQpwICsgc3RhdF9lbGxpcHNlKHR5cGUgPSAiZXVjbGlkIikNCmBgYA0KDQojIyBDLjkuIFNjYXR0ZXIgcGxvdCB3aXRoIG1hcmdpbmFsIGRlbnNpdHkgZGlzdHJpYnV0aW9uIHBsb3QgDQpGaXJzdCB3ZSBjcmVhdGUgYSBzY2F0dGVyIHBsb3Qgb2YgeCBhbmQgeSB2YXJpYWJsZXMgd2l0aCBjb2xvcnMgYnkgZ3JvdXBzLg0KPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+Kk5PVEEqOiBXZSBjYW4gdXNlIGNvbG9yIHBhcmFtZXRlciB0byBkZWZpbmUgZ3JvdXBzIDwvc3Bhbj4NCg0KYGBge3J9DQpsaWJyYXJ5KHdlc2FuZGVyc29uKQ0Kc2NhdHRlclBsb3QgPC0gZ2dwbG90KHh5eixhZXMoeCwgeSwgY29sb3I9eikpICsgICAgICAgICAgICAgICAgICMgY2FtYmlhciBsb3MgZ3J1cG9zIHBvciBsb3MgZ3J1cG9zIGRlIGFuaW1hbGVzIA0KICBnZW9tX3BvaW50KCkgKyANCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gd2VzX3BhbGV0dGUobj1sZW5ndGgobGV2ZWxzKGFzLmZhY3Rvcih4eXokeikpKSwgbmFtZT0iUnVzaG1vcmUiKSkgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj1jKDAsMSksIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSkNCnNjYXR0ZXJQbG90DQpgYGANClRoZW4gd2UgZGVmaW5lIG1hcmdpbmFsIGRlbnNpdHkgcGxvdCBvZiB4ICh0b3AgcGFuZWwpDQoNCmBgYHtyfQ0KeGRlbnNpdHkgPC0gZ2dwbG90KHh5eiwgYWVzKHgsIGZpbGw9eikpICsgDQogIGdlb21fZGVuc2l0eShhbHBoYT0uNSkgKyANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygnIzk5OTk5OScsJyNFNjlGMDAnKSkgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KeGRlbnNpdHkNCmBgYA0KDQpMYXRlciwgd2UgZGVmaW5lIG1hcmdpbmFsIGRlbnNpdHkgcGxvdCBvZiB5IChyaWdodCBwYW5lbCkNCg0KYGBge3J9DQp5ZGVuc2l0eSA8LSBnZ3Bsb3QoeHl6LCBhZXMoeSwgZmlsbD16KSkgKyANCiAgZ2VvbV9kZW5zaXR5KGFscGhhPS41KSArIA0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCcjOTk5OTk5JywnI0U2OUYwMCcpKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQp5ZGVuc2l0eQ0KYGBgDQpOb3csIHdlIGNyZWF0ZSBhIHdoaXRlIHBsb3QgdG8gcHV0IG92ZXIgdGhlIG90aGVyIHBsb3RzDQpgYGB7cn0NCmJsYW5rUGxvdCA8LSBnZ3Bsb3QoKStnZW9tX2JsYW5rKGFlcygxLDEpKSsNCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLCANCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLCANCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCkNCiAgKQ0KYGBgDQoNCkZpbmFsbHkgd2UgcHV0IGFsbCBwbG90cyB0b2dldGhlci4NCmBgYHtyfQ0KZ3JpZC5hcnJhbmdlKHhkZW5zaXR5LCBibGFua1Bsb3QsIHNjYXR0ZXJQbG90LCB5ZGVuc2l0eSwgDQogICAgICAgICAgICAgbmNvbD0yLCBucm93PTIsIHdpZHRocz1jKDQsIDEuNCksIGhlaWdodHM9YygxLjQsIDQpKQ0KDQpgYGANCg0KDQo=