为什么twinx()创建的Axes对象的plot()方法会更改xaxis对象的Formatter?

时间:2018-06-28 07:21:13

标签: pandas matplotlib plot formatter

在绘制带有日期时间索引的熊猫系列时,我发现了用plot()方法创建的Axes对象的twinx()方法的奇怪行为。

第一种情况:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# Create a Formatter object
fmt = mdates.DateFormatter('%Y-%m')

fig = plt.figure()
ax1 = fig.add_subplot(111)

# plot
data = pd.Series([1,2,3], index=pd.to_datetime(['20180101', '20180201', '20180301']))
ax1.plot(data)

# Set the major formatter of x axis
x = ax1.xaxis
x.set_major_formatter(fmt)

plt.show()

上面的代码创建一个Axes对象,绘制一个用Datetime索引的Pandas系列,然后设置x轴的主要格式化程序。我们可以通过fmt来检查x的格式是否为x.get_major_formatter()

第二种情况:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# Create a Formatter object
fmt = mdates.DateFormatter('%Y-%m')

fig = plt.figure()
ax1 = fig.add_subplot(111)

# Set the major formatter of x axis
x = ax1.xaxis
x.set_major_formatter(fmt)

# plot
data = pd.Series([1,2,3], index=pd.to_datetime(['20180101', '20180201', '20180301']))
ax1.plot(data)

plt.show()

在这种情况下,我首先设置主要格式化程序,然后绘制Pandas系列。使用x.get_major_formatter(),我们可以检查x轴的格式设置是否仍为fmt。 plot()方法不变 x轴的主要格式设置。

当我使用twinx()创建另一个轴时,发生了奇怪的事情。

第三种情况:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# Create a Formatter object
fmt = mdates.DateFormatter('%Y-%m')

fig = plt.figure()
ax1 = fig.add_subplot(111)

# plot
data = pd.Series([1,2,3], index=pd.to_datetime(['20180101', '20180201', '20180301']))
ax1.plot(data)

# Set the major formatter of x axis
x = ax1.xaxis
x.set_major_formatter(fmt)

# Create another Axes
ax2 = ax1.twinx()
ax2.plot(data)

plt.show()

在这种情况下,我创建另一个与ax1共享x轴的Axes对象,然后绘制Pandas系列。如果使用x检查x.get_major_formatter()的主要格式化程序,则可以得到PandasAutoDateFormatter对象,而不是fmtplot()的{​​{1}}方法改变了x轴的主要格式。

这是一个错误吗?

0 个答案:

没有答案