Ändern der Plotskala um einen Faktor in Matplotlib

Ich schaffe eine Handlung in Python. Gibt es eine Möglichkeit, die Achse um einen Faktor neu zu skalieren? Die yscale und xscale Befehle erlauben mir nur, die Log-Skala auszuschalten.

Bearbeiten:
Beispielsweise. Wenn ich eine Handlung habe, wo die x Skalen von 1 nm bis 50 nm verlaufen, reicht die x-Skala von 1×10 ^ (- 9) bis 50×10 ^ (- 9) und ich möchte, dass sie sich von 1 auf 50 ändert Möchte die Plotfunktion, um die x-Werte, die auf dem Plot platziert werden, durch 10 ^ (- 9)

3 Solutions collect form web for “Ändern der Plotskala um einen Faktor in Matplotlib”

Anstatt die Zecken zu ändern, warum nicht die Einheiten ändern? Machen Sie ein separates Array X von x-Werten, deren Einheiten in nm sind. Auf diese Weise, wenn du die Daten plotst, ist es schon im richtigen Format! xlabel Sie einfach sicher, dass Sie ein xlabel hinzufügen, um die Einheiten anzugeben (was immer immer gemacht werden sollte).

 from pylab import * # Generate random test data in your range N = 200 epsilon = 10**(-9.0) X = epsilon*(50*random(N) + 1) Y = random(N) # X2 now has the "units" of nanometers by scaling X X2 = (1/epsilon) * X subplot(121) scatter(X,Y) xlim(epsilon,50*epsilon) xlabel("meters") subplot(122) scatter(X2,Y) xlim(1, 50) xlabel("nanometers") show() 

Bildbeschreibung hier eingeben

Wie Sie es bemerkt haben, unterstützt xscale und yscale keine einfache lineare Re-Skalierung (leider). Als Alternative zu Hookeds Antwort, anstatt mit den Daten zu verwirren, kannst du die Etiketten so ausführen:

 ticks = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x*scale)) ax.xaxis.set_major_formatter(ticks) 

Ein vollständiges Beispiel für die x- und y-Skalierung:

 import numpy as np import pylab as plt import matplotlib.ticker as ticker # Generate data x = np.linspace(0, 1e-9) y = 1e3*np.sin(2*np.pi*x/1e-9) # one period, 1k amplitude # setup figures fig = plt.figure() ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) # plot two identical plots ax1.plot(x, y) ax2.plot(x, y) # Change only ax2 scale_x = 1e-9 scale_y = 1e3 ticks_x = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/scale_x)) ax2.xaxis.set_major_formatter(ticks_x) ticks_y = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/scale_y)) ax2.yaxis.set_major_formatter(ticks_y) ax1.set_xlabel("meters") ax1.set_ylabel('volt') ax2.set_xlabel("nanometers") ax2.set_ylabel('kilovolt') plt.show() 

Und schließlich habe ich die Credits für ein Bild:

Links: ax1 keine Skalierung, rechts: ax2 y Achse skaliert auf Kilo und X-Achse skaliert auf Nano

Beachten Sie, dass, wenn Sie text.usetex: true wie ich habe, können Sie die Etiketten in $ einschließen, so wie: '${0:g}$' .

Um den Bereich der x-Achse set_xlim(left, right) , kannst du set_xlim(left, right) , hier sind die docs

Aktualisieren:

Es sieht so aus, als wüsstest du eine identische Handlung, aber nur die "Tick-Werte" ändern, kannst du das machen, indem du die Tick-Werte bekommst und dann einfach was du willst. Also für deine Notwendigkeit wäre es so:

 ticks = your_plot.get_xticks()*10**9 your_plot.set_xticklabels(ticks) 
  • Matplotlib Plotten Legende entsprechend Größe und Farbe der Punkte
  • Verknüpfe einen Span oder Cursor zwischen Plots mit Bokeh in Python
  • Wie kann ich die Grenze auf ein Matplotlib-Diagramm beschränken?
  • Wie man Polarplot in pylab / pyplot verpackt
  • Handlung mit Pandas, xticks
  • Pandas: Bar-Plot xtick-Frequenz
  • Gibt es wirklich nur 4 Matplotlib Line Styles?
  • Wie man ein 3D-Plot mit Python animieren?
  • Farbkarte an mpl_toolkits.mplot3d.Axes3D.bar3d anwenden
  • Wie man die Legende auf den ersten Subplot von seaborn.FacetGrid?
  • Plotten eines unregelmäßig beabstandeten RGB-Bildes in Python
  • Python ist die beste Programmiersprache der Welt.