Faire dans le Matshow, ça plaît aux filles

  |   Source

Lors d'une séance de TP, j'ai montré comment représenter graphiquement une matrice comme un grille de pixels. En effet, une matrice est une grille de nombres. Si chaque nombre est représenté par une couleur, on obtient une belle grille de couleurs, c'est-à-dire une mosaïque. Ça a beaucoup plu aux filles du groupe du TP. Remarque de macho ? Ça tombe bien, la commande pour faire cela est aussi matshow. Regradons :

Les prérequis

je commence par faire une importation du module des commandes graphiques

import matplotlib.pyplot as plt

Je passe en mode interactif :

%matplotlib inline

Remarque. Ceux qui ont une console interactive dans Spyder n'ont rien à faire. Ceux qui ont une console python non interactive (ça se reconnaît par un prompt ressemblant à \(>>>\)) devront taper dans leur console :

plt.ion() # ion veut dire : interactive on

Je charge le module dédié aux matrices :

import numpy as np

Regardons par exemple la matrice \(I_4\) identité d'ordre 4 :

I4 = np.eye(4)
print I4
[[ 1.  0.  0.  0.]
 [ 0.  1.  0.  0.]
 [ 0.  0.  1.  0.]
 [ 0.  0.  0.  1.]]

Rencontre avec Matshow

Voici la mosaïque représentant

\begin{equation*} I_4 = \begin{pmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 0 \end{pmatrix} \end{equation*}
plt.matshow(I4)
<matplotlib.image.AxesImage at 0x10994e1d0>
../../images/Matshow/output_11_1.png

Pourquoi le Matshow plaît aux filles ?

Réponse : parce que vous pouvez changer la carte des couleurs. Prenons une grosse matrice :

\begin{equation*} M = \begin{pmatrix} 1 & 2 & \dots & 100\\ 101 & 102 & \dots & 200 \\ \vdots & & & \vdots \\ 901 &902 & \dots & 1000 \end{pmatrix} \end{equation*}

Regardons à quoi elle ressemble dans la carte des couleurs standard :

M = np.arange(1,1001).reshape(10,100)
plt.matshow(M)
<matplotlib.image.AxesImage at 0x109ba7290>
../../images/Matshow/output_13_1.png

Quelles sont les cartes de couleur ?

Il y a un tas de cartes disponibles nous dit la doc :

Spectral, summer, coolwarm, Wistia_r, pink_r, Set1, Set2, Set3, brg_r, Dark2, prism, PuOr_r, afmhot_r, terrain_r, PuBuGn_r, RdPu, gist_ncar_r, gist_yarg_r, Dark2_r, YlGnBu, RdYlBu, hot_r, gist_rainbow_r, gist_stern, PuBu_r, cool_r, cool, gray, copper_r, Greens_r, GnBu, gist_ncar, spring_r, gist_rainbow, gist_heat_r, Wistia, OrRd_r, CMRmap, bone, gist_stern_r, RdYlGn, Pastel2_r, spring, terrain, YlOrRd_r, Set2_r, winter_r, PuBu, RdGy_r, spectral, rainbow, flag_r, jet_r, RdPu_r, gist_yarg, BuGn, Paired_r, hsv_r, bwr, cubehelix, Greens, PRGn, gist_heat, spectral_r, Paired, hsv, Oranges_r, prism_r, Pastel2, Pastel1_r, Pastel1, gray_r, jet, Spectral_r, gnuplot2_r, gist_earth, YlGnBu_r, copper, gist_earth_r, Set3_r, OrRd, gnuplot_r, ocean_r, brg, gnuplot2, PuRd_r, bone_r, BuPu, Oranges, RdYlGn_r, PiYG, CMRmap_r, YlGn, binary_r, gist_gray_r, Accent, BuPu_r, gist_gray, flag, bwr_r, RdBu_r, BrBG, Reds, Set1_r, summer_r, GnBu_r, BrBG_r, Reds_r, RdGy, PuRd, Accent_r, Blues, autumn_r, autumn, cubehelix_r, nipy_spectral_r, ocean, PRGn_r, Greys_r, pink, binary, winter, gnuplot, RdYlBu_r, hot, YlOrBr, coolwarm_r, rainbow_r, Purples_r, PiYG_r, YlGn_r, Blues_r, YlOrBr_r, seismic, Purples, seismic_r, RdBu, Greys, BuGn_r, YlOrRd, PuOr, PuBuGn, nipy_spectral, afmhot.

Un bon exercice : montrez-nous toutes ces cartes

Au lieu de tester ces cartes une par une à la main, je vais demander à Python de le faire. Pour cela, je vais créer la liste contenant le nom de toutes ces cartes et construire une boucle sur cette liste :

cartes = 'Spectral, summer, coolwarm, Wistia_r, pink_r, Set1, Set2, Set3, brg_r, Dark2, prism, PuOr_r, afmhot_r, terrain_r, PuBuGn_r, RdPu, gist_ncar_r, gist_yarg_r, Dark2_r, YlGnBu, RdYlBu, hot_r, gist_rainbow_r, gist_stern, PuBu_r, cool_r, cool, gray, copper_r, Greens_r, GnBu, gist_ncar, spring_r, gist_rainbow, gist_heat_r, Wistia, OrRd_r, CMRmap, bone, gist_stern_r, RdYlGn, Pastel2_r, spring, terrain, YlOrRd_r, Set2_r, winter_r, PuBu, RdGy_r, spectral, rainbow, flag_r, jet_r, RdPu_r, gist_yarg, BuGn, Paired_r, hsv_r, bwr, cubehelix, Greens, PRGn, gist_heat, spectral_r, Paired, hsv, Oranges_r, prism_r, Pastel2, Pastel1_r, Pastel1, gray_r, jet, Spectral_r, gnuplot2_r, gist_earth, YlGnBu_r, copper, gist_earth_r, Set3_r, OrRd, gnuplot_r, ocean_r, brg, gnuplot2, PuRd_r, bone_r, BuPu, Oranges, RdYlGn_r, PiYG, CMRmap_r, YlGn, binary_r, gist_gray_r, Accent, BuPu_r, gist_gray, flag, bwr_r, RdBu_r, BrBG, Reds, Set1_r, summer_r, GnBu_r, BrBG_r, Reds_r, RdGy, PuRd, Accent_r, Blues, autumn_r, autumn, cubehelix_r, nipy_spectral_r, ocean, PRGn_r, Greys_r, pink, binary, winter, gnuplot, RdYlBu_r, hot, YlOrBr, coolwarm_r, rainbow_r, Purples_r, PiYG_r, YlGn_r, Blues_r, YlOrBr_r, seismic, Purples, seismic_r, RdBu, Greys, BuGn_r, YlOrRd, PuOr, PuBuGn, nipy_spectral, afmhot,'
print cartes
Spectral, summer, coolwarm, Wistia_r, pink_r, Set1, Set2, Set3, brg_r, Dark2, prism, PuOr_r, afmhot_r, terrain_r, PuBuGn_r, RdPu, gist_ncar_r, gist_yarg_r, Dark2_r, YlGnBu, RdYlBu, hot_r, gist_rainbow_r, gist_stern, PuBu_r, cool_r, cool, gray, copper_r, Greens_r, GnBu, gist_ncar, spring_r, gist_rainbow, gist_heat_r, Wistia, OrRd_r, CMRmap, bone, gist_stern_r, RdYlGn, Pastel2_r, spring, terrain, YlOrRd_r, Set2_r, winter_r, PuBu, RdGy_r, spectral, rainbow, flag_r, jet_r, RdPu_r, gist_yarg, BuGn, Paired_r, hsv_r, bwr, cubehelix, Greens, PRGn, gist_heat, spectral_r, Paired, hsv, Oranges_r, prism_r, Pastel2, Pastel1_r, Pastel1, gray_r, jet, Spectral_r, gnuplot2_r, gist_earth, YlGnBu_r, copper, gist_earth_r, Set3_r, OrRd, gnuplot_r, ocean_r, brg, gnuplot2, PuRd_r, bone_r, BuPu, Oranges, RdYlGn_r, PiYG, CMRmap_r, YlGn, binary_r, gist_gray_r, Accent, BuPu_r, gist_gray, flag, bwr_r, RdBu_r, BrBG, Reds, Set1_r, summer_r, GnBu_r, BrBG_r, Reds_r, RdGy, PuRd, Accent_r, Blues, autumn_r, autumn, cubehelix_r, nipy_spectral_r, ocean, PRGn_r, Greys_r, pink, binary, winter, gnuplot, RdYlBu_r, hot, YlOrBr, coolwarm_r, rainbow_r, Purples_r, PiYG_r, YlGn_r, Blues_r, YlOrBr_r, seismic, Purples, seismic_r, RdBu, Greys, BuGn_r, YlOrRd, PuOr, PuBuGn, nipy_spectral, afmhot,

Évidemment, on n'a qu'une chaîne de caractères ici. Je vais séparer (splitter) les mots de la chaîne :

liste1 = cartes.split()
print liste1
['Spectral,', 'summer,', 'coolwarm,', 'Wistia_r,', 'pink_r,', 'Set1,', 'Set2,', 'Set3,', 'brg_r,', 'Dark2,', 'prism,', 'PuOr_r,', 'afmhot_r,', 'terrain_r,', 'PuBuGn_r,', 'RdPu,', 'gist_ncar_r,', 'gist_yarg_r,', 'Dark2_r,', 'YlGnBu,', 'RdYlBu,', 'hot_r,', 'gist_rainbow_r,', 'gist_stern,', 'PuBu_r,', 'cool_r,', 'cool,', 'gray,', 'copper_r,', 'Greens_r,', 'GnBu,', 'gist_ncar,', 'spring_r,', 'gist_rainbow,', 'gist_heat_r,', 'Wistia,', 'OrRd_r,', 'CMRmap,', 'bone,', 'gist_stern_r,', 'RdYlGn,', 'Pastel2_r,', 'spring,', 'terrain,', 'YlOrRd_r,', 'Set2_r,', 'winter_r,', 'PuBu,', 'RdGy_r,', 'spectral,', 'rainbow,', 'flag_r,', 'jet_r,', 'RdPu_r,', 'gist_yarg,', 'BuGn,', 'Paired_r,', 'hsv_r,', 'bwr,', 'cubehelix,', 'Greens,', 'PRGn,', 'gist_heat,', 'spectral_r,', 'Paired,', 'hsv,', 'Oranges_r,', 'prism_r,', 'Pastel2,', 'Pastel1_r,', 'Pastel1,', 'gray_r,', 'jet,', 'Spectral_r,', 'gnuplot2_r,', 'gist_earth,', 'YlGnBu_r,', 'copper,', 'gist_earth_r,', 'Set3_r,', 'OrRd,', 'gnuplot_r,', 'ocean_r,', 'brg,', 'gnuplot2,', 'PuRd_r,', 'bone_r,', 'BuPu,', 'Oranges,', 'RdYlGn_r,', 'PiYG,', 'CMRmap_r,', 'YlGn,', 'binary_r,', 'gist_gray_r,', 'Accent,', 'BuPu_r,', 'gist_gray,', 'flag,', 'bwr_r,', 'RdBu_r,', 'BrBG,', 'Reds,', 'Set1_r,', 'summer_r,', 'GnBu_r,', 'BrBG_r,', 'Reds_r,', 'RdGy,', 'PuRd,', 'Accent_r,', 'Blues,', 'autumn_r,', 'autumn,', 'cubehelix_r,', 'nipy_spectral_r,', 'ocean,', 'PRGn_r,', 'Greys_r,', 'pink,', 'binary,', 'winter,', 'gnuplot,', 'RdYlBu_r,', 'hot,', 'YlOrBr,', 'coolwarm_r,', 'rainbow_r,', 'Purples_r,', 'PiYG_r,', 'YlGn_r,', 'Blues_r,', 'YlOrBr_r,', 'seismic,', 'Purples,', 'seismic_r,', 'RdBu,', 'Greys,', 'BuGn_r,', 'YlOrRd,', 'PuOr,', 'PuBuGn,', 'nipy_spectral,', 'afmhot,']

C'est mieux, mais j'ai ces virgules dans les noms des cartes qui me gênent... Heureusement, les listes en compréhension me sauvent :

liste2 = [ mot[:-1] for mot in liste1]
print liste2
['Spectral', 'summer', 'coolwarm', 'Wistia_r', 'pink_r', 'Set1', 'Set2', 'Set3', 'brg_r', 'Dark2', 'prism', 'PuOr_r', 'afmhot_r', 'terrain_r', 'PuBuGn_r', 'RdPu', 'gist_ncar_r', 'gist_yarg_r', 'Dark2_r', 'YlGnBu', 'RdYlBu', 'hot_r', 'gist_rainbow_r', 'gist_stern', 'PuBu_r', 'cool_r', 'cool', 'gray', 'copper_r', 'Greens_r', 'GnBu', 'gist_ncar', 'spring_r', 'gist_rainbow', 'gist_heat_r', 'Wistia', 'OrRd_r', 'CMRmap', 'bone', 'gist_stern_r', 'RdYlGn', 'Pastel2_r', 'spring', 'terrain', 'YlOrRd_r', 'Set2_r', 'winter_r', 'PuBu', 'RdGy_r', 'spectral', 'rainbow', 'flag_r', 'jet_r', 'RdPu_r', 'gist_yarg', 'BuGn', 'Paired_r', 'hsv_r', 'bwr', 'cubehelix', 'Greens', 'PRGn', 'gist_heat', 'spectral_r', 'Paired', 'hsv', 'Oranges_r', 'prism_r', 'Pastel2', 'Pastel1_r', 'Pastel1', 'gray_r', 'jet', 'Spectral_r', 'gnuplot2_r', 'gist_earth', 'YlGnBu_r', 'copper', 'gist_earth_r', 'Set3_r', 'OrRd', 'gnuplot_r', 'ocean_r', 'brg', 'gnuplot2', 'PuRd_r', 'bone_r', 'BuPu', 'Oranges', 'RdYlGn_r', 'PiYG', 'CMRmap_r', 'YlGn', 'binary_r', 'gist_gray_r', 'Accent', 'BuPu_r', 'gist_gray', 'flag', 'bwr_r', 'RdBu_r', 'BrBG', 'Reds', 'Set1_r', 'summer_r', 'GnBu_r', 'BrBG_r', 'Reds_r', 'RdGy', 'PuRd', 'Accent_r', 'Blues', 'autumn_r', 'autumn', 'cubehelix_r', 'nipy_spectral_r', 'ocean', 'PRGn_r', 'Greys_r', 'pink', 'binary', 'winter', 'gnuplot', 'RdYlBu_r', 'hot', 'YlOrBr', 'coolwarm_r', 'rainbow_r', 'Purples_r', 'PiYG_r', 'YlGn_r', 'Blues_r', 'YlOrBr_r', 'seismic', 'Purples', 'seismic_r', 'RdBu', 'Greys', 'BuGn_r', 'YlOrRd', 'PuOr', 'PuBuGn', 'nipy_spectral', 'afmhot']

Super ! Au fait, ça fait combien de cartes de couleurs ?

len(liste2)
144

144 cartes.

Regardons enfin les cartes

Je vais constuire ma boucle, qui va m'afficher 144 fois la matrice \(M\) dans ses déclinaisons de couleurs :

for carte in liste2:
    plt.matshow(M, cmap = carte )
    plt.title('carte : ' + carte)
../../images/Matshow/output_25_0.png../../images/Matshow/output_25_1.png../../images/Matshow/output_25_2.png../../images/Matshow/output_25_3.png../../images/Matshow/output_25_4.png../../images/Matshow/output_25_5.png../../images/Matshow/output_25_6.png../../images/Matshow/output_25_7.png../../images/Matshow/output_25_8.png../../images/Matshow/output_25_9.png../../images/Matshow/output_25_10.png../../images/Matshow/output_25_11.png../../images/Matshow/output_25_12.png../../images/Matshow/output_25_13.png../../images/Matshow/output_25_14.png../../images/Matshow/output_25_15.png../../images/Matshow/output_25_16.png../../images/Matshow/output_25_17.png../../images/Matshow/output_25_18.png../../images/Matshow/output_25_19.png../../images/Matshow/output_25_20.png../../images/Matshow/output_25_21.png../../images/Matshow/output_25_22.png../../images/Matshow/output_25_23.png../../images/Matshow/output_25_24.png../../images/Matshow/output_25_25.png../../images/Matshow/output_25_26.png../../images/Matshow/output_25_27.png../../images/Matshow/output_25_28.png../../images/Matshow/output_25_29.png../../images/Matshow/output_25_30.png../../images/Matshow/output_25_31.png../../images/Matshow/output_25_32.png../../images/Matshow/output_25_33.png../../images/Matshow/output_25_34.png../../images/Matshow/output_25_35.png../../images/Matshow/output_25_36.png../../images/Matshow/output_25_37.png../../images/Matshow/output_25_38.png../../images/Matshow/output_25_39.png../../images/Matshow/output_25_40.png../../images/Matshow/output_25_41.png../../images/Matshow/output_25_42.png../../images/Matshow/output_25_43.png../../images/Matshow/output_25_44.png../../images/Matshow/output_25_45.png../../images/Matshow/output_25_46.png../../images/Matshow/output_25_47.png../../images/Matshow/output_25_48.png../../images/Matshow/output_25_49.png../../images/Matshow/output_25_50.png../../images/Matshow/output_25_51.png../../images/Matshow/output_25_52.png../../images/Matshow/output_25_53.png../../images/Matshow/output_25_54.png../../images/Matshow/output_25_55.png../../images/Matshow/output_25_56.png../../images/Matshow/output_25_57.png../../images/Matshow/output_25_58.png../../images/Matshow/output_25_59.png../../images/Matshow/output_25_60.png../../images/Matshow/output_25_61.png../../images/Matshow/output_25_62.png../../images/Matshow/output_25_63.png../../images/Matshow/output_25_64.png../../images/Matshow/output_25_65.png../../images/Matshow/output_25_66.png../../images/Matshow/output_25_67.png../../images/Matshow/output_25_68.png../../images/Matshow/output_25_69.png../../images/Matshow/output_25_70.png../../images/Matshow/output_25_71.png../../images/Matshow/output_25_72.png../../images/Matshow/output_25_73.png../../images/Matshow/output_25_74.png../../images/Matshow/output_25_75.png../../images/Matshow/output_25_76.png../../images/Matshow/output_25_77.png../../images/Matshow/output_25_78.png../../images/Matshow/output_25_79.png../../images/Matshow/output_25_80.png../../images/Matshow/output_25_81.png../../images/Matshow/output_25_82.png../../images/Matshow/output_25_83.png../../images/Matshow/output_25_84.png../../images/Matshow/output_25_85.png../../images/Matshow/output_25_86.png../../images/Matshow/output_25_87.png../../images/Matshow/output_25_88.png../../images/Matshow/output_25_89.png../../images/Matshow/output_25_90.png../../images/Matshow/output_25_91.png../../images/Matshow/output_25_92.png../../images/Matshow/output_25_93.png../../images/Matshow/output_25_94.png../../images/Matshow/output_25_95.png../../images/Matshow/output_25_96.png../../images/Matshow/output_25_97.png../../images/Matshow/output_25_98.png../../images/Matshow/output_25_99.png../../images/Matshow/output_25_100.png../../images/Matshow/output_25_101.png../../images/Matshow/output_25_102.png../../images/Matshow/output_25_103.png../../images/Matshow/output_25_104.png../../images/Matshow/output_25_105.png../../images/Matshow/output_25_106.png../../images/Matshow/output_25_107.png../../images/Matshow/output_25_108.png../../images/Matshow/output_25_109.png../../images/Matshow/output_25_110.png../../images/Matshow/output_25_111.png../../images/Matshow/output_25_112.png../../images/Matshow/output_25_113.png../../images/Matshow/output_25_114.png../../images/Matshow/output_25_115.png../../images/Matshow/output_25_116.png../../images/Matshow/output_25_117.png../../images/Matshow/output_25_118.png../../images/Matshow/output_25_119.png../../images/Matshow/output_25_120.png../../images/Matshow/output_25_121.png../../images/Matshow/output_25_122.png../../images/Matshow/output_25_123.png../../images/Matshow/output_25_124.png../../images/Matshow/output_25_125.png../../images/Matshow/output_25_126.png../../images/Matshow/output_25_127.png../../images/Matshow/output_25_128.png../../images/Matshow/output_25_129.png../../images/Matshow/output_25_130.png../../images/Matshow/output_25_131.png../../images/Matshow/output_25_132.png../../images/Matshow/output_25_133.png../../images/Matshow/output_25_134.png../../images/Matshow/output_25_135.png../../images/Matshow/output_25_136.png../../images/Matshow/output_25_137.png../../images/Matshow/output_25_138.png../../images/Matshow/output_25_139.png../../images/Matshow/output_25_140.png../../images/Matshow/output_25_141.png../../images/Matshow/output_25_142.png../../images/Matshow/output_25_143.png
Comments powered by Disqus
Partager