在绘制带有日期时间索引的熊猫系列时,我发现了用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
对象,而不是fmt
。 plot()
的{{1}}方法改变了x轴的主要格式。
这是一个错误吗?