每当我绘图时,X轴会自动排序(例如,如果我输入值3,2,4,它会自动将X轴从小到大排序。
我怎么能这样做,所以轴保持我输入值的顺序,即3,2,4
import pylab as pl
data = genfromtxt('myfile.dat')
pl.axis('auto')
pl.plot(data[:,1], data[:,0])
我找到了一个函数,set_autoscalex_on(FALSE),但我不确定如何使用它或者它是否是我想要的。 谢谢
答案 0 :(得分:4)
您可以提供虚拟x范围,然后覆盖xtick标签。我同意上面的评论质疑它是最好的解决方案,但在没有任何背景的情况下很难判断。
如果你真的想,这可能是一个选择:
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)
编辑:如果您使用日期,为什么不在轴上绘制实际日期(如果你想在轴上想要29 30 1 2等,可能会按日期格式化?
答案 1 :(得分:2)
也许你想设置xticks
:
import pylab as pl
data = genfromtxt('myfile.dat')
pl.axis('auto')
xs = pl.arange(data.shape[0])
pl.plot(xs, data[:,0])
pl.xticks(xs, data[:,1])
工作样本:
另一种选择是使用日期时间。如果使用日期,则可以将它们用作plot命令的输入。
工作样本:
import random
import pylab as plt
import datetime
from matplotlib.dates import DateFormatter, DayLocator
fig, ax = plt.subplots(2,1, figsize=(6,8))
# Sample 1: use xticks
days = [29,30,31,1,2,3,4,5]
values = [random.random() for x in days]
xs = range(len(days))
plt.axes(ax[0])
plt.plot(xs, values)
plt.xticks(xs, days)
# Sample 2: Work with dates
date_strings = ["2013-01-30",
"2013-01-31",
"2013-02-01",
"2013-02-02",
"2013-02-03"]
dates = [datetime.datetime.strptime(x, "%Y-%m-%d") for x in date_strings]
values = [random.random() for x in dates]
plt.axes(ax[1])
plt.plot(dates,values)
ax[1].xaxis.set_major_formatter(DateFormatter("%b %d"))
ax[1].xaxis.set_major_locator(DayLocator())
plt.show()