Cambiando la escala de la ttwig por un factor en matplotlib

Estoy creando una ttwig en python. ¿Hay una manera de volver a escalar el eje por un factor? Los comandos yscale y xscale solo me permiten desactivar la escala de registro.

Editar:
Por ejemplo. Si tengo una gráfica donde las escalas x van de 1 nm a 50 nm, la escala x variará de 1×10 ^ (- 9) a 50×10 ^ (- 9) y quiero que cambie de 1 a 50. Por lo tanto, I desea que la función de trazado divide los valores de x colocados en el trazado entre 10 ^ (- 9)

En lugar de cambiar las garrapatas, ¿por qué no cambiar las unidades? Haz una matriz separada X de valores x cuyas unidades estén en nm. De esta manera, cuando grafica los datos, ¡ya está en el formato correcto! Solo asegúrate de agregar una xlabel para indicar las unidades (lo que siempre debe hacerse de todos modos).

 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() 

introduzca la descripción de la imagen aquí

Como ha notado, xscale y yscale no admiten un simple reescalamiento lineal (desafortunadamente). Como alternativa a la respuesta de Hooked, en lugar de jugar con los datos, puede engañar a las tags de la siguiente manera:

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

Un ejemplo completo que muestra las escalas x y y:

 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() 

Y finalmente tengo los créditos para una foto:

Izquierda: ax1 sin escala, derecha: ax2 y eje escalado a kilo y eje x escalado a nano

Tenga en cuenta que, si tiene text.usetex: true como el que tengo, es posible que desee incluir las tags en $ , así: '${0:g}$' .

Para establecer el rango del eje x, puede usar set_xlim(left, right) , aquí están los documentos

Actualizar:

Parece que quieres un gráfico idéntico, pero solo cambias los ‘valores de tick’, puedes hacerlo obteniendo los valores de tick y luego simplemente cambiándolos a lo que quieras. Así que para tu necesidad sería así:

 ticks = your_plot.get_xticks()*10**9 your_plot.set_xticklabels(ticks)