Matplotlib, plotting pandas series: AttributeError: 'tuple' object has no attribute 'xaxis'
Matplotlib, plotting pandas series: AttributeError: 'tuple' object has no attribute 'xaxis'
我正在绘制Pandas系列数据,它记录了1981年每个星期"events"的总和。系列名为'weekly_data'.
1981-03-16 1826
1981-03-23 1895
1981-03-30 1964
1981-04-06 1978
1981-04-13 2034
1981-04-20 2073
1981-04-27 2057
dtype: int64
我想按年和按周放置刻度。当我尝试绘制它时,我收到一个 AttributeError:
fig = plt.figure(figsize=(12,5))
ax = plt.subplots(111)
plt.plot(weekly_data, color = 'green' )
yloc = YearLocator()
mloc = MonthLocator()
ax.xaxis.set_major_locator(yloc)
ax.xaxis.set_minor_locator(mloc)
ax.grid(True)
plt.show()
错误是
AttributeError Traceback (most recent call last)
<ipython-input-92-843dbab30ed7> in <module>()
6 yloc = YearLocator()
7 mloc = MonthLocator()
----> 8 ax.xaxis.set_major_locator(yloc)
9 ax.xaxis.set_minor_locator(mloc)
10 ax.grid(True)
AttributeError: 'tuple' object has no attribute 'xaxis'
我该如何解决这个问题?
编辑:跟随 Mike Mueller,上面的错误是 plt.subplot(111)
。但是,我仍然 无法获得每周报价。也许我们需要使用 ax.set_xticks(major_ticks)
或 ax.set_xticks(minor_ticks, minor=True)
这是我从 1991 年开始绘制的 pandas 系列数据
Datetime
1990-12-23 1980
1990-12-30 1860
1991-01-06 1761
1991-01-13 1792
1991-01-20 1825
....
dtype: int64
这是代码
fig = plt.figure(figsize=(12,5))
ax = plt.subplot(111)
plt.plot(weekly_data1991, color = 'green' )
yloc = YearLocator()
mloc = MonthLocator()
ax.xaxis.set_major_locator(yloc)
ax.xaxis.set_minor_locator(mloc)
ax.grid(True)
plt.show()
这是情节输出
我自己也很困惑
您正在创建 111 个子图。变化:
ax = plt.subplots(111)
进入:
ax = plt.subplot(111)
你应该可以。它创建一个由一行、一列和一个子图组成的子图数组。例如,这个:
plt.subplot(231)
plt.subplot(236)
在 2 行 3 列的数组中创建子图 1 和子图 6:
您可以通过以下方式使月份可见:
ax.xaxis.set_minor_formatter(matplotlib.dates.DateFormatter('%B'))
年份和月份打印在彼此之上。一种解决方案是将年份放在顶部,将月份放在底部:
ax.xaxis.set_tick_params(labeltop='on', labelbottom='off')
使用:
mloc = matplotlib.dates.MonthLocator(range(1, 12, 4))
每四个月显示一次。
我正在绘制Pandas系列数据,它记录了1981年每个星期"events"的总和。系列名为'weekly_data'.
1981-03-16 1826
1981-03-23 1895
1981-03-30 1964
1981-04-06 1978
1981-04-13 2034
1981-04-20 2073
1981-04-27 2057
dtype: int64
我想按年和按周放置刻度。当我尝试绘制它时,我收到一个 AttributeError:
fig = plt.figure(figsize=(12,5))
ax = plt.subplots(111)
plt.plot(weekly_data, color = 'green' )
yloc = YearLocator()
mloc = MonthLocator()
ax.xaxis.set_major_locator(yloc)
ax.xaxis.set_minor_locator(mloc)
ax.grid(True)
plt.show()
错误是
AttributeError Traceback (most recent call last)
<ipython-input-92-843dbab30ed7> in <module>()
6 yloc = YearLocator()
7 mloc = MonthLocator()
----> 8 ax.xaxis.set_major_locator(yloc)
9 ax.xaxis.set_minor_locator(mloc)
10 ax.grid(True)
AttributeError: 'tuple' object has no attribute 'xaxis'
我该如何解决这个问题?
编辑:跟随 Mike Mueller,上面的错误是 plt.subplot(111)
。但是,我仍然 无法获得每周报价。也许我们需要使用 ax.set_xticks(major_ticks)
或 ax.set_xticks(minor_ticks, minor=True)
这是我从 1991 年开始绘制的 pandas 系列数据
Datetime
1990-12-23 1980
1990-12-30 1860
1991-01-06 1761
1991-01-13 1792
1991-01-20 1825
....
dtype: int64
这是代码
fig = plt.figure(figsize=(12,5))
ax = plt.subplot(111)
plt.plot(weekly_data1991, color = 'green' )
yloc = YearLocator()
mloc = MonthLocator()
ax.xaxis.set_major_locator(yloc)
ax.xaxis.set_minor_locator(mloc)
ax.grid(True)
plt.show()
这是情节输出
我自己也很困惑
您正在创建 111 个子图。变化:
ax = plt.subplots(111)
进入:
ax = plt.subplot(111)
你应该可以。它创建一个由一行、一列和一个子图组成的子图数组。例如,这个:
plt.subplot(231)
plt.subplot(236)
在 2 行 3 列的数组中创建子图 1 和子图 6:
您可以通过以下方式使月份可见:
ax.xaxis.set_minor_formatter(matplotlib.dates.DateFormatter('%B'))
年份和月份打印在彼此之上。一种解决方案是将年份放在顶部,将月份放在底部:
ax.xaxis.set_tick_params(labeltop='on', labelbottom='off')
使用:
mloc = matplotlib.dates.MonthLocator(range(1, 12, 4))
每四个月显示一次。