首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为几个子图指定刻度格式化程序

如何为几个子图指定刻度格式化程序
EN

Stack Overflow用户
提问于 2014-04-03 07:45:25
回答 1查看 1.8K关注 0票数 2

我需要为几个子图的每个地块指定滴答格式化程序:

代码语言:javascript
复制
import numpy as np
import pylab as plt
import matplotlib.ticker as ticker


x = np.arange(10)
y = x

fig = plt.figure()

for i in [1, 2, 3]:
    ax = fig.add_subplot(3, 1, i)
    ax.plot(x, y)
    ticks = ticker.FuncFormatter(lambda x, pos: '{}:{:g}'.format(i, x))
    ax.xaxis.set_major_formatter(ticks)

plt.show()

但只有最后(底部)的草料被用于所有其他的地块。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-03 08:35:02

您可以使用ticker.FormatStrFormatter对象,如下所示。

我认为,您最初的方法的问题是,您将每个轴的Formatter设置为tick变量,然后在下一个迭代中覆盖它,因此您的所有图都使用了上次迭代中的tick变量。

当您创建Formatter对象时,每个子图都必须有一个,在下面的代码中,这不是一个问题,因为我没有将FormatStrFormatter分配给一个变量。

代码语言:javascript
复制
import numpy as np
import pylab as plt
import matplotlib.ticker as ticker

x = np.arange(10)
y = x

fig, axes = plt.subplots(nrows=3, ncols=1)

for i, ax in enumerate(axes):
    ax.plot(x, y)
    ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('{}:%d'.format(i+1)))

plt.show()

编辑

下面是使用原始FuncFormatter格式化程序对象的版本。map方法从它们关联的lambda函数中创建三个独立的ticker对象。for循环在axtick上迭代以分配每个子图。

代码语言:javascript
复制
import numpy as np
import pylab as plt
import matplotlib.ticker as ticker

x = np.arange(10)
y = x

fig, axes = plt.subplots(nrows=3, ncols=1)

def create_ticker(i):
    # Create a FuncFormatter.
    return ticker.FuncFormatter(lambda x, pos: '{}:{:g}'.format(i+1, x))

ticks = map(create_ticker, range(3))

for ax, tick in zip(axes, ticks):
    ax.plot(x, y)
    ax.xaxis.set_major_formatter(tick)

plt.show()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22831016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档