2
$\begingroup$

IO have those data as a text file

tmp = {
{"Canada", 57.9, 14.5, 25.7, 2., 0.966},
{"USA", 6.3, 19.1, 71.7, 2.4, 0.956},
{"Mexique", 10.6, 3.8, 81.7, 4., 0.854},
{"Bresil", 83.9, 2.8, 9.3, 4., 0.813},
{"Allemagne", 4.3, 21.9, 62.3, 10.8, 0.947},
{"Belgique", 1.9, 54.4, 40.2, 2.7, 0.953},
{"Espagne", 9.9, 17.8, 61.7, 10., 0.955},
{"Finlande", 17.4, 28.8, 40.6, 12.9, 0.959},
{"France", 11.2, 77., 9.9, 1.5, 0.961},
{"Pays-Bas", 0.1, 4.3, 86.9, 7.2, 0.964},
{"Royaume-Uni", 2.3, 15.6, 76.8, 4.1, 0.947},
{"Suede", 44.7, 44.7, 3.9, 6.1, 0.963},
{"Suisse", 53.9, 41., 1.5, 1.7, 0.96},
{"Tchequie", 2.9, 29.6, 66.5, 1., 0.903},
{"Hongrie", 0.5, 36.7, 54.3, 8.1, 0.879},
{"Russie", 18.7, 15.9, 65., 0., 0.817},
{"Ukraine", 6.4, 48.1, 45.5, 0.1, 0.796},
{"Afrique.du.Sud", 2.3, 4.3, 93.3, 0.1, 0.683},
{"Chine", 14.2, 2., 83.5, 0.3, 0.772},
{"Japon", 7.5, 24.2, 65.6, 2.2, 0.96},
{"Inde", 15.2, 2.6, 80.4, 1.8, 0.612},
{"Nouvelle-Zelande", 54.4, 0., 34.2, 11.5, 0.95}
}

And I Imported it as a text file with option "data".

Then I can select only the data by

 tmp1 = Rest[tmp[[All, 2 ;; 6]]]

Then I can calculate the matrix of correlations

 Correlation[tmp1] 

No problem and easy done. But I want to make a nice presentation of the correlation coefficient in a grid or a table with the name of the items as entry in line and column and positive correlation in blue - or the background of its cell in LightBlue and in LightRed the negative correlations.

At the end, I would like to conduct an acp and make presentation as in R. One can find an example here.

How can I do this ?

$\endgroup$
1
  • 1
    $\begingroup$ Do you want Correlation[tmp1]? Or do you actually want Correlation[Transpose[tmp1]], giving the correlation between countries? $\endgroup$
    – mikado
    Commented Sep 11, 2016 at 21:29

1 Answer 1

11
$\begingroup$

For corr = Correlation[tmp1];:

ticks = {{Table[{i, "row " <> ToString[i]}, {i, 1, Length@corr}], None}, 
{None, Table[{i, "column " <> ToString[i]}, {i, 1, Length@corr}]}};

matplot1 = 
 MatrixPlot[corr, 
  Epilog -> {Black, 
    MapIndexed[Text[#1, Reverse[#2 - 1/2]] &, Reverse[corr], {2}]}, 
  Mesh -> True, 
  ColorFunction -> ColorData[{"Temperature", "Reverse"}], 
  FrameTicks -> ticks]

enter image description here

I took the Epilog for placing the values in respective cells from here.


If you want the correlation between countries:

names = tmp[[All, 1]];

corr1 = Correlation[Transpose@tmp1];

ticks = {{Table[{i, names[[i]]}, {i, 1, Length@corr1}], None}, 
{None, Table[{i, Rotate[names[[i]], 90 Degree]}, {i, 1, Length@corr1}]}};

matplot2 = 
 MatrixPlot[corr1, Mesh -> True, 
  ColorFunction -> ColorData[{"Temperature", "Reverse"}], 
  FrameTicks -> ticks]

enter image description here

I rotated the ticks of the columns to be better visible, and removed the Epilog as it was unreadable.

$\endgroup$
1
  • $\begingroup$ Hello, may you tell me how to make the plot legend the same hight as the main matrixplot? $\endgroup$
    – Y. zeng
    Commented Apr 7, 2022 at 6:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.