Introduction to Data Visualization with Matplotlib
Run the hidden code cell below to import the data used in this course.
1 hidden cell
Take Notes
Add notes about the concepts you've learned and code cells with code you want to keep.
Matplotlib
import matplotlib.pyplot as plt fig, ax = plt.subplots()
figure objectif : container (graphe dans lequel vont apparaître les données) ax : partie qui contient les données
ax.plot(df['col1'], df['col2']) (les 2 colonnes correspondent à x et y) plt.show()
on peut ajouter un autre ax.plot pour ajouter une autre courbe
fig, ax = plt.subplots() ax.plot(df1['col1'], ['col2']) ax.plot (df2...) plt.show()
marker="o" (marqueurs ronds pour afficher les points sur la courbe) "v" pour faire des petit triangles etc. linestyle='--' pour faire des tirets on peut faire linestyle ="None" (la ligne disparaît) color = 'r' pour rendre la ligne rouge
ax.set_xlabel("Nom") pour le nom des abscisses ax.set_ylabel(...) ax.set_title("titre")
Small mulitples (créer des sous-parcelles de graphe) fig, ax = plt.subplots(3,2) --> 3 lignes et 2 colonnes (donc 6 petits graphes) Ax devient un array de 3x2
Pour désigner la parcelle où afficher une courbe, ax[0,0].plot(etc) --> 1er graphe en haut à gauche des small multiples
Si 1 seule ligne ou 1 seule colonne, on indique 1 seule coordonnée ax[0]
Si une seule colonne, 1 seul titre abscisse Pour que tous les graphes aient la même échelle de valeurs en ordonnée, sharey = True dans subplots
Time series
pd.read_csv('nom_fichier', parse_date=['col'], index_col="col") pour identifier la col comme portant des valeurs de dates, puis la définir comme index du df
ensuite ax.plot(df.index, etc) poour que l'index date devienne les abscisses
Gérer plusieurs échelles de temps
ax2 = ax.twinx() on rajoute ensuite le 2ème plot qui doit figurer à cette échelle : ax2.plot(etc.) puis ax2.set_ylabel()
(on peut ajouter des couleurs dans set_ylabel )
Aussi : ax.tick_params('y', colors='blue') pour changer la couleur des graduations en ordonnée
On peut définir un fonction qui appliquera toutes ces consignes : def plot_timeseries(axes, x, y, color, xlabel, ylabel) : axes.plot (x, y, color=color) axes.set_xlabel(xlabel) axes.set_ylabel(ylabel, color=color) axes.tick_params('y', colors=color)
ensuite pour créer les plots, on fait plot_timeseries(compléter les arguments de la fonction) puis ax2 = ax.twinx() si différentes échelles Y puis plot_timeseries(ax2, etc.)
Annotating time-series data
ax2.annotate('commentaire', xy=(pd.Timestamp("2015-10-06"), 1)) dans cet exemple pour les coordonnées xy, l'horodatage correspond à X, 1 correspond à Y
Positionner le texte pour qu'il soit lisible: xytext = (coordonnées voulues) ajouter une flèche qui relie le texte et le point: arrowprops={} on peut customiser la flèche : arrowprops={"arrowstyle":"->", "color"="gray"}
Bar-charts index_col=0 dans pd.read pour mettre la 1ere colonne en index fig, ax = plt.subplots() ax.bar(df.index, df['col']) plt.show()
ax.set_xticklabels(df.index, rotation=90) pour une rotation des labels en abscisse
Pour ajouter une deuxième donnée par dessus (empiler) ax.bar(df.index, df['col2'], bottom=df['col1'])
pour une troisième : bottom=df['col1']+df['col2']
légende barres empilées : argument label dans la parenthèse label='string' + ax.legend() avant le show
Histograms fig, ax = plt.subplots() ax.hist(df['col1']) ax.hist(df['col2'])
argument label + plt.legend() argument bins=int ou séquences de valeurs entre crochets
histtype='step' pour que les barres ne soient pas "pleines" (contours seulement)
Statistical plotting
error bars
méthode 1 : ajoute des marqueurs à des barres exemple : ax.bar('nom variable', df['col1].mean(), yerr=df['col1'].std()
méthode 1': ajoute des marqueurs verticaux à des graphes x,y en courbe ax.errorbar(df['col1'], df['col2'], yerr=df['col3'])
méthode 2: adding boxplots ax.boxplots([df1['col1'], df2['col2']]) ax.set_xticklabels(["label1", "label2"])
affiche médiane, interquartile range, ipq, outliers etc.
Scatterplots
ax.scatter(df['col1'], df['col2'])
2 scatter plots sur le même axe --> argument couleur, argument label (on peut le faire sur des subsets de colonnes) argument c=df.index --> dégardé de couleur le long de l'axe des abscisses
Preparing figures to share
change plot style : plt.style.use('ggplot') avant le subplot : couleurs différents, typos, backgrounf gris etc.
plt.style.use("default") autre style : "bmh", "seaborn-colorblind" etc. voir library
Share vizualiations
fig.savefig("nom.png", quality=50, dpi=300) ou nom.jpg ou nom.svg qualité : compression dpi : densité de l'image
ls --> donne la liste des fichiers stockés dans le directory
fig.set_size_inches([valeur1, valeur2]) largeur et hauteur de la figure, on définit la taille
Automating figures from data
var = df['col'].unique() print(var) renvoie en liste toutes les valeurs uniques de la colonne
fig, ax = subplots for variable in var, var_df= df[df["col"]== variable] ax.bar(variable, df['col1'].mean(), yerr=df['col2'].std()) set label + plt.show() va créer une barre pour chacune des valeurs de la colonne initiale
# Add your code snippets here
Explore Datasets
Use the DataFrames imported in the first cell to explore the data and practice your skills!
- Using
austin_weather
andseattle_weather
, create a Figure with an array of two Axes objects that share a y-axis range (MONTHS
in this case). Plot Seattle's and Austin'sMLY-TAVG-NORMAL
(for average temperature) in the top Axes and plot theirMLY-PRCP-NORMAL
(for average precipitation) in the bottom axes. The cities should have different colors and the line style should be different between precipitation and temperature. Make sure to label your viz! - Using
climate_change
, create a twin Axes object with the shared x-axis as time. There should be two lines of different colors not sharing a y-axis:co2
andrelative_temp
. Only include dates from the 2000s and annotate the first date at whichco2
exceeded 400. - Create a scatter plot from
medals
comparing the number of Gold medals vs the number of Silver medals with each point labeled with the country name. - Explore if the distribution of
Age
varies in different sports by creating histograms fromsummer_2016
. - Try out the different Matplotlib styles available and save your visualizations as a PNG file.