Pour transformer un axe en échelle logarithmique sous Matplotlib, il existe les méthodes xscale et yscale dans la classe pyplot. Dans cet exemple l'axe des ordonnées est en échelle logarithmique grâce à la commande plt.yscale('log'):
Table des matières
Exemple 1
Prenons par exemple la fonction exponentielle:
import matplotlib.pyplot as plt
import numpy as np
x_min = 0
x_max = 10.0
x = np.arange(x_min, x_max, .01)
y = np.exp(x)
plt.plot(x,y)
plt.xlim(x_min,x_max)
plt.ylim(np.exp(x_min),np.exp(x_max))
plt.grid(True,which="both", linestyle='--')
plt.title('How to add a grid on a figure in matplotlib ?', fontsize=8)
plt.savefig("matplotlib_grid_03.png", bbox_inches='tight')
plt.close()
Pour avoir, par exemple l'axe des ordonnées en échelle logarithmique on peut utiliser plt.yscale('log'):
import matplotlib.pyplot as plt
import numpy as np
x_min = 0
x_max = 10.0
x = np.arange(x_min, x_max, .01)
y = np.exp(x)
plt.plot(x,y)
plt.xlim(x_min,x_max)
plt.ylim(np.exp(x_min),np.exp(x_max))
plt.yscale('log')
plt.grid(True,which="both", linestyle='--')
plt.title('How to add a grid on a figure in matplotlib ?', fontsize=8)
plt.savefig("matplotlib_grid_04.png", bbox_inches='tight')
Exemple 2
Autre exemple avec une fonction de phase crée par un code de mie (output_mie_code.txt)
#!/usr/bin/env python
import numpy as np
import matplotlib.pyplot as plt
c1,c2,c3,c4,c5 = np.loadtxt("output_mie_code.txt", skiprows=2, unpack=True)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot(c1,c2,'k--')
plt.yscale('log')
plt.grid(True,which="both")
plt.xlabel(r"Scattering Angle $\Theta$ ($^\circ$)")
plt.ylabel(r"$P_{11}$")
plt.show()
Note: Pour avoir en plus la grille en échelle logarithmique il suffit d'utiliser la commande plt.grid(True,which="both").
Références
Liens | Site |
---|---|
pyplot | Matplotlib doc |
Matplotlib how to show logarithmically spaced grid lines at all ticks on a log-log plot? | stackoverflow |