使用带有pandas lag_plot的pyplot子图

时间:2013-12-09 15:20:21

标签: python matplotlib pandas subplot

我正在尝试使用pandas的lag_plot模块(Lag-1相关图)制作一个包含多个子图的图形。我正在尝试使用pyplot的标准'subplots'命令,但是当我尝试在结果轴上调用“lag_plot”时,它似乎不喜欢它。这是我的代码:

c1, c2, c3, c4, c5 = sns.color_palette("husl", 5)
ax1 = plt.subplot2grid((3,2), (0,0))
ax2 = plt.subplot2grid((3,2), (0,1))
ax3 = plt.subplot2grid((3,2), (1,0))
ax4 = plt.subplot2grid((3,2), (1,1))
ax5 = plt.subplot2grid((3,2), (2,0))
ax1.lag_plot(d1, color = c1, alpha=0.5)
ax2.lag_plot(d2, color = c2, alpha=0.5)
ax3.lag_plot(d3, color = c3, alpha=0.5)
ax4.lag_plot(d4, color = c4, alpha=0.5)
ax4.lag_plot(d4, color = c5, alpha=0.5)

以下是导致的错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/home/iullah/<ipython-input-78-9deb0f435f22> in <module>()
      5 ax4 = plt.subplot2grid((3,2), (1,1))
      6 ax5 = plt.subplot2grid((3,2), (2,0))
----> 7 ax1.lag_plot(d1, color = c1, alpha=0.5)
      8 ax2.lag_plot(d2, color = c2, alpha=0.5)
      9 ax3.lag_plot(d3, color = c3, alpha=0.5)

AttributeError: 'AxesSubplot' object has no attribute 'lag_plot'

生成正确的子图数组(2列和3行子图,具有适当的轴),但所有空白(当然)。那么,我做错了什么?在使用pandas绘图功能时,还有其他方法可以获得多个子图吗?

编辑:此代码有效:

c1 = sns.color_palette("YlOrRd_r", 8)

plt.subplot(321)
lag_plot(d1, color = c1, alpha=0.5)

plt.subplot(322)
lag_plot(d2, color = c1, alpha=0.5)

plt.subplot(323)
lag_plot(d3, color = c1, alpha=0.5)

plt.subplot(324)
lag_plot(d4, color = c1, alpha=0.5)

plt.subplot(325)
lag_plot(d5, color = c1, alpha=0.5)

plt.show()

为什么该代码有效,但不是第一个?我更倾向于以第一种方式做到这一点,因为我可以做的事情就是让行和列共享轴标签(使图更清晰)我不能用第二组代码做。

2 个答案:

答案 0 :(得分:1)

您应该对数据调用绘图命令并为其指定matplotlib轴:

c1, c2, c3, c4, c5 = sns.color_palette("husl", 5)
ax1 = plt.subplot2grid((3,2), (0,0))
ax2 = plt.subplot2grid((3,2), (0,1))
ax3 = plt.subplot2grid((3,2), (1,0))
ax4 = plt.subplot2grid((3,2), (1,1))
ax5 = plt.subplot2grid((3,2), (2,0))
d1.lag_plot(ax=ax1, color = c1, alpha=0.5)
d2.lag_plot(ax=ax2, color = c2, alpha=0.5)
d3.lag_plot(ax=ax3, color = c3, alpha=0.5)
d4.lag_plot(ax=ax4, color = c4, alpha=0.5)

答案 1 :(得分:0)

您可以通过lag_plot参数提供ax=...函数的轴:

from pandas.tools.plotting import lag_plot

df = pd.DataFrame ( { ch: np.random.randn(100) for ch in 'AB' } )
fig = plt.figure( )
ax = fig.add_axes( [.05, .05, .9, .9] )

lag_plot( df.A, ax=ax)
lag_plot( df.B, ax=ax, color='Red'  )