She makes the sound the sea makes to calm me down (Dissolve Me, Alt-J)
Searching how to do draw chord diagrams in the Internet with ggplot2
I found a very-easy-to-use package called circlize
which does exactly that. A chord diagram shows relationships between things so the input to draw it is simply a matrix with the intensity of these relations. In this experiment I use this package to circlize numbers in this way:
- I take a number with many digits (
Rmpfr
package is very useful to obtain large numbers), I convert it to text and remove punctuation characters (necessary if number has decimals) - Function
CreateAdjacencyMatrix
creates a 10×10 matrix where the element [i,j] contains the number of times that number “i” precedes to number “j” in the previous string (i and j from 0 to 9); this is the input to create diagram.
These diagrams are the result of circlizing four famous constants: Pi (green), Gamma (purple), Catalan (blue) and Logarithm constants (red):
Just two conclusions of my own to end:
- Circlize package is very easy to use and generates very nice diagrams
- Chord diagrams remember me to dreamcatchers
- The more I use
RColorBrewer
package the more I like it
This is the code to circlize numbers:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | library (Rmpfr) library (circlize) library (RColorBrewer) CreateAdjacencyMatrix = function (x) { s= gsub ( "\\." , "" , x) m= matrix (0, 10, 10) for (i in 1:( nchar (s)-1)) m[ as.numeric ( substr (s, i, i))+1, as.numeric ( substr (s, i+1, i+1))+1]=m[ as.numeric ( substr (s, i, i))+1, as.numeric ( substr (s, i+1, i+1))+1]+1 rownames (m) = 0:9; colnames (m) = 0:9 m} m1= CreateAdjacencyMatrix ( formatMpfr ( Const ( "pi" ,2000))) m2= CreateAdjacencyMatrix ( formatMpfr ( Const ( "gamma" ,2000))) m3= CreateAdjacencyMatrix ( formatMpfr ( Const ( "catalan" ,2000))) m4= CreateAdjacencyMatrix ( formatMpfr ( Const ( "log2" ,2000))) jpeg (filename = "Chords.jpg" , width = 800, height = 800, quality = 100) par (mfrow= c (2,2), mar = c (1, 1, 1, 1)) chordDiagram (m1, grid.col = "darkgreen" , col = colorRamp2 ( quantile (m1, seq (0, 1, by = 0.25)), brewer.pal (5, "Greens" )), transparency = 0.4, annotationTrack = c ( "name" , "grid" )) chordDiagram (m2, grid.col = "mediumpurple4" , col = colorRamp2 ( quantile (m2, seq (0, 1, by = 0.25)), brewer.pal (5, "Purples" )), transparency = 0.4, annotationTrack = c ( "name" , "grid" )) chordDiagram (m3, grid.col = "midnightblue" , col = colorRamp2 ( quantile (m3, seq (0, 1, by = 0.25)), brewer.pal (5, "Blues" )), transparency = 0.4, annotationTrack = c ( "name" , "grid" )) chordDiagram (m4, grid.col = "red3" , col = colorRamp2 ( quantile (m4, seq (0, 1, by = 0.25)), brewer.pal (5, "Reds" )), transparency = 0.4, annotationTrack = c ( "name" , "grid" )) dev.off () |
1 thought on “Circlizing Numbers”