双轴覆盖原始轴的刻度

时间:2019-04-30 16:35:15

标签: python matplotlib

关于壁虱定位器和双轴,我面临着令人惊讶的行为。 我有一个Axes对象,并将matplotlib.dates.DayLocator设置为其主要定位符,并将matplotlib.dates.DateFormatter设置为其主要格式化程序。

import datetime as dt
import numpy as np
from matplotlib import figure as mpfig
from matplotlib.backends import backend_agg as mpback
from matplotlib import dates as mpdates

start = dt.datetime(2018, 2, 16)
end = start + dt.timedelta(days=10)

fig = mpfig.Figure(figsize=(16, 4))
mpback.FigureCanvas(fig)
ax = fig.add_subplot(111)

ax.xaxis.set_major_locator(mpdates.DayLocator())
ax.xaxis.set_major_formatter(mpdates.DateFormatter("%d/%m %H:%M"))

ax.grid(True)

x = np.arange(start, end, dt.timedelta(days=1)).astype(dt.datetime)
y = np.random.randint(10, 1000, size=x.size)
ax.plot(x, y)

fig.savefig('test.png')

enter image description here

然后,我用Axes创建一个孪生ax.twinx() 但是,一旦我在新的Axes上绘制了内容,刻度线便成为默认格式。

# ...
x = np.arange(start, end, dt.timedelta(days=1)).astype(dt.datetime)
y = np.random.randint(10, 1000, size=x.size)
ax2 = ax.twinx()
ax2.plot(x, y)

enter image description here 如您所见,格式不再是我指定的"%d/%m %H:%M",而是变成了"%y-%m-%d"

更令人不安的是,如果我设置x窗口,然后在ax2上绘制某些东西,我的刻度定位器将被忽略,并使用默认的定位器。

# ...
ax.set_xlim(start, start + dt.timedelta(days=1))
ax.plot(x, y)

这段代码产生了这个数字:

enter image description here

# ...
ax.set_xlim(start, start + dt.timedelta(days=1))

ax2 = ax.twinx()
ax2.plot(x, y)

但这会导致:

enter image description here 主要刻度出现在(我认为)默认位置。

根据,新的Axes和原始的Axes.twinx应该在X轴上共享其限制,刻度和刻度:

有关Figure.add_axes的文档,由ax2调用

  

sharex,sharey:轴,可选

     

与sharex和/或sharey共享x或y轴。该轴将具有与共享轴相同的限制,刻度和刻度。

那么,我在这里想念什么? 为什么在ax上绘制会影响我手动设置的 renderComplete: function() { const rows = this.getRows(); console.log('rows', rows); for (let i = 0; i < rows.length; i++) { const childRows = rows[i].getTreeChildren(); if (childRows.length > 0) { // console.log('childRows', childRows); // this.selectRow(childRows); for (let j = 0; j < childRows.length; j++) { const gender = childRows[j].getData().gender; console.log('gender', gender); if (gender === 'male') { this.selectRow(childRows[j]); const childRows2 = childRows[j].getTreeChildren(); } } } } } }); 的价格变动?

0 个答案:

没有答案