gpt4 book ai didi

python - 两张图,两条轴,一张图……难倒了。

转载 作者:行者123 更新时间:2023-11-28 16:30:30 26 4
gpt4 key购买 nike

我正在尝试从具有不同 x 和 y 范围的数据集中绘制 2 个单独的图形。我对 plt.figure、plt.subplot 和 plt.axes 之间的交互感到困惑。

假设我正在尝试绘制表示不同贷款期限('term')的不同特征(以字母 A - G 为特征的贷款)的值(“ROI”)的线。每个贷款期限的“发行日期”范围不同(例如,对于期限 = 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 个具有相同无花果大小的独立图形,我可以摆脱这种情况吗?

在此先感谢您的帮助!

最佳答案

图形基本上就是一个窗口。该窗口可以有一个或多个轴,其中每个轴都是一个图。 plt.subplot 可让您在图中创建多个轴。图形和坐标轴都是对象,都有自己的方法。例如,plt.plot 只是 axes 对象的 plot 方法的包装器。

在您的情况下,您不想调用这些目录中的任何一个。相反,您应该调用 plt.subplots()(注意末尾的“s”)。这是一个方便的函数,它将创建一个图形,在该图形中放置一个多个轴,然后返回图形和所有轴。然后,您可以将坐标轴传递给 pandas plot 函数,以强制它在该坐标轴上绘图。您还可以为该轴调用设置 legendtitle,但在 pandas 中执行此操作可能更容易。

所以这样的事情应该可行(我也简化了一些事情):

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()

关于python - 两张图,两条轴,一张图……难倒了。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32444626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com