1
votes

Mise à l'échelle du graphe Python des axes Y et X

J'ai un ensemble de données et j'ai fait un graphique en les utilisant. Le problème est que les données ne semblent pas correctement mises à l'échelle puisque l'axe y va de 0 à 30000 tandis que l'axe x de -2 à 30. Comment puis-je résoudre ce problème? Merci

​​Voici mon code,

import numpy as np
import matplotlib.pyplot as plt

voltage365nm = [-1.877,-2.0,-1.5,-1.0,0.0,5.0,10.0,20.0,30.0] 
voltage405nm = [-1.437,-2.0,-1.5,-1.0,0.0,5.0,10.0,20.0,30.0] 
voltage546nm = [-0.768,-2.0,-1.5,-1.0,0.0,5.0,10.0,20.0,30.0] 

current365nm = [0.0,5.6,151.1,428,1164,5760,9870,1626,20700] 
current405nm = [0.0,-8.2,-2.6,70.2,278,1954,2460,3970,5021] 
current546nm = [0.0,-6.5,-6.1,-5.4,248,1435,2240,3250,3750] plt.plot(voltage365nm,current405nm,"r--",marker="s",label="$\lambda$=365 nm")
plt.plot(voltage405nm,current405nm,"b-.",marker="o",label="$\lambda$=405nm")
plt.plot(voltage546nm,current546nm,"g-",marker="^",label="$\lambda$=546nm")
plt.legend(loc='best')
plt.xlabel("Voltage (V)")
plt.ylabel("Current (I x $10^{-13}A}$)")
plt.title("Current vs Voltage")
plt.grid(b=True, which='major', color='g', linestyle='--')
plt.grid(b=True, which='minor', color='r', linestyle='--', alpha=0.2)
plt.show()                  


1 commentaires

Vos données ont une plage dynamique très différente en courant et en tension, ce qui se traduit naturellement par un tracé. Quel est votre problème exactement? À quoi ressemble la sortie / à quoi aimeriez-vous ressembler?


3 Réponses :


1
votes

Vous pouvez utiliser plt.xlim ([- 10,0]) et plt.ylim ([- 10,0]) pour spécifier les valeurs minimale et maximale de vos axes.


0 commentaires

1
votes

J'ai exécuté votre code et j'ai obtenu le graphique suivant:

 entrez la description de l'image ici

Est-ce que vous craignez que les données pointent le long de l'extrémité inférieure de votre y les axes sont "froissés"? Si tel est le cas, le traçage sur l'axe du journal pourrait peut-être aider. Utilisez la méthode set_yscale ('log') comme ceci:

plt.plot(voltage365nm, current365nm,"r--",marker="s",label="$\lambda$=365 nm")

Avec cela, j'obtiens le graphique suivant:

entrez la description de l'image ici

Le problème avec ceci est bien sûr que certaines des valeurs de l'axe des y sont négatives et ne peuvent donc pas être directement tracées sur une échelle logarithmique. La solution complète impliquerait d'ajouter une constante à tous les courants tels qu'ils soient positifs.

PS - Je pense qu'il y a un bogue dans l'une de vos commandes plt.plot :

plt.plot(voltage365nm,current405nm,"r--",marker="s",label="$\lambda$=365 nm")

devrait être

ax = plt.gca()
ax.set_yscale('log')


0 commentaires

1
votes

Je mettrais également les valeurs les plus basses dans un encart comme un zoom avant

# your existing code before plt.show()

left, bottom, width, height = [0.32, 0.55, 0.4, 0.3]
ax2 = fig.add_axes([left, bottom, width, height])
ax2.plot(voltage365nm,current365nm,"r--",marker="s",label="$\lambda$=365 nm")
ax2.plot(voltage405nm,current405nm,"b-.",marker="o",label="$\lambda$=405nm")
ax2.plot(voltage546nm,current546nm,"g-",marker="^",label="$\lambda$=546nm")
ax2.set_xlim(-2.1, 1)
ax2.set_ylim(-100, 1500)
plt.grid(b=True, which='major', color='g', linestyle='--')
plt.show()

entrez la description de l'image ici


0 commentaires