matplotlib:更改坐标轴
我有一个每分钟记录的测量值数组 m。我通过简单地将这些测量值与时间进行对比来绘图,代码如下:
import pylab as pl
pl.plot(range(len(m)), m)
这样做会让 x 轴显示分钟(因为我的测量值是以分钟为单位的,而 range(len(m)) 会给我整数)。我想快速把 x 轴的标签改成小时。其实我只需要把标签除以 60,但我希望只显示整数小时值。
简单来说,我想在 x 轴上重新标记每 60 的倍数。
2 个回答
2
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会继续运行。
比如说,如果你想让程序在用户输入一个正确的密码后才能继续工作,你就需要设置一个条件:只有当输入的密码正确时,程序才会继续执行后面的代码。如果密码不对,程序就会停下来,或者提示用户重新输入。
这种条件判断的方式在编程中非常常见,它帮助我们控制程序的流程,确保程序按照我们设定的逻辑运行。
pylab.plot(data) # pylab will automatically add an x-axis from 0 to len(data) - 1
# first argument is when ticks should appear on the x-axis
# the second argument is what the label for each tick should be
# same as -> pylab.xticks([0, 60, 120...], [0, 1, 2...])
pylab.xticks(range(0, len(data), 60), range(len(data)/60))
# let the reader know the units
pylab.xlabel("hours")
3
抱歉,实际上你需要创建一个坐标轴,而不是使用xlabels,然后用ax.set_xticklabels来设置标签:
from matplotlib.pyplot import figure
fig = figure()
ax = fig.add_subplot(111)
def mk_labels(vals):
labels = []
for i in vals:
if i % 60 == 0:
labels.append("Some new special label")
else:
labels.append(i)
ax.set_xticklabels(mk_labels(range(len(m))))
ax.plot(range(len(m)), m)
或者你也可以简单地这样做:
ax.set_xticklabels(["{0}h".format(i) if i % 60 == 0 else i for i in range(len(m))])
这两种方法都可以用,第一种方法如果你需要更复杂的格式可能会更简单。