Heat map + Numbers

From Wiki
Revision as of 15:39, 6 July 2012 by 10.0.7.248 (talk)
Jump to navigation Jump to search

go back to Main Page, MATHEMATICA, Scripts

First we write down the First Matrix, in which every number will be substituted by a color

N.B. The table contains also the Legend.

  c1 = {
       {"Esol", "Ir", "Ru", "Sn", "Ti"}, 
       {"IrO2", 0.00, -0.14, 0.80, 0.37}, 
       {"RuO2", -0.10, 0.00, 1.03, 0.69}, 
       {"SnO2", 0.54, 0.43, 0.00, 0.17}, 
       {"TiO2", -0.71, 0.63, 0.62, 0.00}
       }

Second, we write down a Second Matrix, in which the numbers will be written over the colored tables

N.B. It's the same matrix as the first but limited to the numbers; The numbers ending with a zero have to be written between "", otherwise they will be rounded on the final figure (0.00 becomes 0.)

  c2 = {
       {"0.00", -0.14, "0.80", 0.37}, 
       {"-0.10", "0.00", 1.03, 0.69}, 
       {0.54, 0.43, "0.00", 0.17}, 
       {-0.71, 0.63, 0.62, "0.00"}
       }

In alternative you can import the matrix from a text file

  c1 = Import ["path/file.csv"]

Then we isolate the numerical part of the first matrix

  n1 = c1[ [2;;All,2;;All] ] 

And we assign the variables for the Colored table

  l1 = c1[ [2;;All,1] ] 
  p1 = c1[ [1,2;;All] ] 

Finally with the ImageCompose function, we overimpose the colored table to the numbered table

  ImageCompose[
     
     ArrayPlot[n1, ColorFunction -> "Rainbow", 
        ColorFunctionScaling -> True, Frame -> True, 
        FrameStyle -> Opacity[0], AspectRatio -> 0.737, 
        FrameTicks -> {{Transpose[{Range[Length[l1]], l1}], None}, {None, 
        Transpose[{Range[Length[p1]], p1}]}},
        FrameTicksStyle -> 
           Directive[Opacity[1], Bold, FontSize -> 60, FontFamily -> "Times"],
        Mesh -> All, MeshStyle -> White, ImageSize -> 1000],
     
     GraphicsGrid[c2, BaseStyle -> {"Times", 45, Bold, White}, 
        AspectRatio -> 0.75, ImageSize -> 780] , {580, 310}
     ]