establecer tics con escala logarítmica

Parece que set_xticks no está funcionando en la escala de registro:

 from matplotlib import pyplot as plt fig1, ax1 = plt.subplots() ax1.plot([10, 100, 1000], [1,2,3]) ax1.set_xscale('log') ax1.set_xticks([20, 200, 500]) plt.show() 

¿Es posible?

 import matplotlib from matplotlib import pyplot as plt fig1, ax1 = plt.subplots() ax1.plot([10, 100, 1000], [1,2,3]) ax1.set_xscale('log') ax1.set_xticks([20, 200, 500]) ax1.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter()) 

o

 ax1.get_xaxis().get_major_formatter().labelOnlyBase = False plt.show() 

trama resultante

Voy a agregar algunas trazas y mostrar cómo eliminar las marcas menores:

El OP:

 from matplotlib import pyplot as plt fig1, ax1 = plt.subplots() ax1.plot([10, 100, 1000], [1,2,3]) ax1.set_xscale('log') ax1.set_xticks([20, 300, 500]) plt.show() 

enter image description here

Para agregar algunos tics específicos, como señaló Tcaswell , puede usar matplotlib.ticker.ScalarFormatter :

 from matplotlib import pyplot as plt import matplotlib.ticker fig1, ax1 = plt.subplots() ax1.plot([10, 100, 1000], [1,2,3]) ax1.set_xscale('log') ax1.set_xticks([20, 300, 500]) ax1.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter()) plt.show() 

enter image description here

Para eliminar los tics menores, puede usar matplotlib.rcParams['xtick.minor.size'] :

 from matplotlib import pyplot as plt import matplotlib.ticker matplotlib.rcParams['xtick.minor.size'] = 0 matplotlib.rcParams['xtick.minor.width'] = 0 fig1, ax1 = plt.subplots() ax1.plot([10, 100, 1000], [1,2,3]) ax1.set_xscale('log') ax1.set_xticks([20, 300, 500]) ax1.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter()) plt.show() 

enter image description here

Podría usar ax1.get_xaxis().set_tick_params , tiene el mismo efecto (pero solo modifica el eje actual, no todas las figuras futuras a diferencia de matplotlib.rcParams ):

 from matplotlib import pyplot as plt import matplotlib.ticker fig1, ax1 = plt.subplots() ax1.plot([10, 100, 1000], [1,2,3]) ax1.set_xscale('log') ax1.set_xticks([20, 300, 500]) ax1.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter()) ax1.get_xaxis().set_tick_params(which='minor', size=0) ax1.get_xaxis().set_tick_params(which='minor', width=0) plt.show() 

enter image description here

set_xticks funciona, si miras de cerca pone set_xticks importantes en 20, 200, 500 (las marcas son más largas que las demás). Compare con la misma ttwig sin la llamada a set_xticks .

El punto es que set_xticks establece los tics, no las ticklabels. Si quieres agregar las tags

 ax1.set_xticklabels(["20", "200", "500"]) 

antes de plt.show ()