How to make X axis in matplotlib/pylab to NOT sort automatically the values?

Honesta picture Honesta · Feb 8, 2013 · Viewed 15.4k times · Source

Whenever I plot, the X axis sorts automatically (for example, if i enter values 3, 2, 4, it will automatically sort the X axis from smaller to larger.

How can I do it so the axis remains with the order I input the values i.e 3, 2, 4

   import pylab as pl
   data = genfromtxt('myfile.dat')
   pl.axis('auto')
   pl.plot(data[:,1], data[:,0])

I found one function, set_autoscalex_on(FALSE) but I'm not sure how to use it or whether it is what I want. Thanks

Answer

Rutger Kassies picture Rutger Kassies · Feb 8, 2013

You could provide a dummy x-range, and then override the xtick labels. I do agree with the comments above questioning wether its the best solution, but thats hard to judge without any context.

If you really want to, this might be an option:

fig, ax = plt.subplots(1,2, figsize=(10,4))

x = [2,4,3,6,1,7]
y = [1,2,3,4,5,6]

ax[0].plot(x, y)

ax[1].plot(np.arange(len(x)), y)
ax[1].set_xticklabels(x)

enter image description here

edit: If you work with dates, why not plot the real date on the axis (and perhaps format it by the day-of-month if you do want 29 30 1 2 etc on the axis?