我试图从具有不同x和y范围的数据集中绘制2个单独的图。我对plt.figure,plt.subplot和plt.axes之间的交互感到困惑。
假设我试图为不同的贷款条款(' term')绘制代表价值(" ROI")的线,用于不同的特征(以字母A-G为特征的贷款)。 )。发行日期范围'每个贷款期限不同(例如,对于期限= 36,贷款自2007年起发起,期限= 60,贷款仅自2011年起发起)。
这里有一些我所拥有的伪代码。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from itertools import groupby
alpha_grades = ('A','B','C','D','E','F','G')
color_scheme = {'A':'b','B':'g','C':'r','D':'c','E':'m','F':'y','G':'k'}
for term in [36,60]:
for grade in alpha_grades:
if ( term == 36 ):
plt.figure(1,figsize=(12,9))
else:
plt.figure(2,figsize=(12,9))
df[(df['grade'] == grade) & (df['term']==term)].groupby(
'issue_date')['ROI'].mean().plot(color=color_scheme[grade],label = ("Grade: %s" % grade))
plt.legend(loc=2)
title = ("%i Mo Lending Rate by Rating" % term)
plt.title(title)
此当前迭代的屏幕和文件输出将第一个图形(术语== 36)的大小设置为远小于第二个图形。我想通过定义2个具有相同图形尺寸的独立图形,我可以远离它?
提前感谢您的帮助!
答案 0 :(得分:3)
图形基本上是一个窗口。该窗口可以有一个或多个轴,其中每个轴都是一个图。 plt.subplot
允许您在图中创建多个轴。图形和轴都是对象,具有自己的方法。例如,plt.plot
只是axes
对象的plot
方法的包装。
在您的情况下,您不想调用任何这些目录。相反,你应该拨打plt.subplots()
(注意最后的“s”)。这是一个方便的功能,它将创建一个图形,在该图中放置一个更多的轴,然后返回图形和所有轴。然后,您可以将轴传递给pandas plot
函数,以强制它在该轴上绘图。您也可以为该轴调用legend
和title
,但在熊猫中更容易做到这一点。
所以这样的事情应该有效(我简化了一些事情):
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from itertools import groupby
alpha_grades = ('A','B','C','D','E','F','G')
color_scheme = {'A':'b','B':'g','C':'r','D':'c','E':'m','F':'y','G':'k'}
fig1, ax1 = plt.subplots(figsize=(12,9)) # same as plt.subplots(1, 1)
fig2, ax2 = plt.subplots(figsize=(12,9))
for term, ax in zip([36,60], [ax1, ax2]):
ax.hold(True)
for grade, color in color_scheme.items():
df2 = df[(df['grade'] == grade) & (df['term']==term)]
df3 = groupby('issue_date')['ROI'].mean()
df3.plot(ax=ax, color=color,
label=("Grade: %s" % grade))
ax.hold(False)
ax.legend(loc=2)
ax.set_title("%i Mo Lending Rate by Rating" % term)
fig1.show()
fig2.show()
请注意,您不是使用plt
,而是直接与图形和轴进行交互。
如果你想把两个图都放在一个图中,比如左边一个,右边一个,你可以这样做:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from itertools import groupby
alpha_grades = ('A','B','C','D','E','F','G')
color_scheme = {'A':'b','B':'g','C':'r','D':'c','E':'m','F':'y','G':'k'}
fig, axs = plt.subplots(1, 2, figsize=(12*2,9)) # creates two axes
for term, ax in zip([36,60], axs):
ax.hold(True)
for grade, color in color_scheme.items():
df2 = df[(df['grade'] == grade) & (df['term']==term)]
df3 = groupby('issue_date')['ROI'].mean()
df3.plot(ax=ax, color=color,
label=("Grade: %s" % grade))
ax.hold(False)
ax.legend(loc=2)
ax.set_title("%i Mo Lending Rate by Rating" % term)
fig.show()