matplotlib:更改坐标轴

2 投票
2 回答
5528 浏览
提问于 2025-04-17 00:24

我有一个每分钟记录的测量值数组 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))])

这两种方法都可以用,第一种方法如果你需要更复杂的格式可能会更简单。

撰写回答