# Quelques exemples d'usage de la librairie matplotlib
# De nombreux exemples supplémentaires à cette adresse: https://matplotlib.org/gallery/index.html
# Remarque : N'oubliez pas plt.close()! après chaque figure

import matplotlib.pyplot as plt
import numpy             as np

if __name__ == '__main__':

	## function
	#############################################
	x = np.linspace(0, 2, 100)           # Generate evenly spaced numbers

	fig, ax = plt.subplots()             # Create a figure and an axis.
	ax.plot(x, x, label='linear')        # Plot some data on the axes.
	ax.plot(x, x**2, label='quadratic')  # Plot more data on the axes...
	ax.plot(x, x**3, label='cubic')      # ... and some more.
	ax.set_xlabel('x label')             # Add an x-label to the axes.
	ax.set_ylabel('y label')             # Add a y-label to the axes.
	ax.set_title("Simple Plot")          # Add a title to the axes.
	ax.legend()                          # Add a legend.
	#plt.show()                           # Display the plot (close to continue)
	plt.savefig('mpl_plot.png')          # Save the plot on the HD (current directory)
	plt.close()                          # Close the fig


	## scatter data
	#############################################
	data1, data2 = np.random.randn(2, 100)  # Draw random samples

	fig, ax = plt.subplots(1, 1)            # Create a figure and an axis.
	ax.plot(data1, data2, marker='x')       # Scatter plot
	plt.savefig('mpl_scatter.png')          # Save the plot on the HD
	plt.close()                             # Close the fig


	## error bar
	# https://matplotlib.org/api/_as_gen/matplotlib.pyplot.errorbar.html
	#############################################
	x = np.linspace(0, 10, 50)
	dy = 0.8
	y = np.sin(x) + dy * np.random.randn(50)

	plt.errorbar(x, y, yerr=dy, fmt='o', color='black', ecolor='lightgray', elinewidth=3, capsize=0);
	plt.savefig('mpl_errorbar.png')
	plt.close()


	## histogram (avec personalisation)
	# https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.hist.html
	#############################################
	x = np.random.randn(1000)

	plt.style.use('classic')
	fig=plt.figure(figsize=(5,3))
	ax = plt.axes(facecolor='#E6E6E6')
	# Afficher les ticks en dessous de l'axe
	ax.set_axisbelow(True)
	# Cadre en blanc
	plt.grid(color='w', linestyle='solid')

	# Cacher le cadre
	# ax.spines contient les lignes qui entourent la zone où les 
	# données sont affichées.
	for spine in ax.spines.values():
	    spine.set_visible(False)
	# Cacher les marqueurs en haut et à droite
	ax.xaxis.tick_bottom()
	ax.yaxis.tick_left()

	# Nous pouvons personnaliser les étiquettes des marqueurs
	# et leur appliquer une rotation
	marqueurs = [-3, -2, -1, 0, 1, 2]
	xtick_labels = ['A', 'B', 'C', 'D', 'E', 'F']
	plt.xticks(marqueurs, xtick_labels, rotation=30)

	# Changer les couleur des marqueurs
	ax.tick_params(colors='gray', direction='out')
	for tick in ax.get_xticklabels():
	    tick.set_color('gray')
	for tick in ax.get_yticklabels():
	    tick.set_color('gray')
	    
	# Changer les couleurs des barres
	ax.hist(x, edgecolor='#E6E6E6', color='#EE6666')
	plt.savefig('mpl_histopersonalise.png')
	plt.close()