为了账号安全,请及时绑定邮箱和手机立即绑定

如何迭代命名空间中的所有现有图?

如何迭代命名空间中的所有现有图?

潇潇雨雨 2022-07-19 15:45:29
我创建了一堆地块,并希望根据它们的特征对其中的一些进行子集化。如何遍历命名空间并列出其中的一些或全部?甚至可能使用列表推导对其中一些进行操作?我知道这可以通过数据帧轻松完成,例如使用迭代器迭代不同数据帧的问题的一些答案绘图的一个实际示例可能是关闭一些绘图,例如在使用子绘图时如何在 jupyter 中停止绘图打印两次?为了防止重复的子图设置,您必须运行plt.close(g.fig)where是许多图之一。g设置:import seaborn as snsimport pandas as pdimport matplotlib.pyplot as pltplt.rcParams['figure.figsize'] = [12, 8]df = sns.load_dataset("exercise")f, axes = plt.subplots(2, 2)g=sns.catplot(x="time", y="pulse", hue="kind", data=df, ax=axes[0, 0])h=sns.catplot(x="time", y="pulse", hue="kind", data=df, ax=axes[0, 1])i=sns.catplot(x="time", y="pulse", hue="kind", data=df, ax=axes[1, 0])j=sns.catplot(x="time", y="pulse", hue="kind", data=df, ax=axes[1, 1])在此示例中,如何在不显式命名每个绘图的情况下循环 i for[g, h, i, j]并运行?plt.close(i.fig)我试过的:vars()除其他外,跑步将回归'g', 'h', 'i', j。跑步vars()['g']会给我<seaborn.axisgrid.FacetGrid at 0x1c1bc940>。所以我认为一种选择是在 [elem for elem in vars() if elem in 'seaborn.axisgrid.FacetGrid']不使用特定名称的情况下运行以访问每个地块。但这会回归,['g', 'i', 't', 's', 'ax']虽然跑步确实会回归。hjvars()['h']<seaborn.axisgrid.FacetGrid at 0x1bfa74a8>在isseaborn.axisgrid.FacetGrid的输出中似乎没有任何痕迹。和的输出是长浮点数组。vars()['ax']<matplotlib.axes._subplots.AxesSubplot at 0x1c1bce10>vars()['t']vars()['t']我想我可能以完全错误的方式处理这件事。任何其他建议都会很棒!
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

因此,为了清楚起见,我对它的seaborn工作原理一无所知。我能够使用您的设置代码执行以下操作 -


var_dict = vars().copy()

var_keys = var_dict.keys()


plots_names = [x for x in var_keys if isinstance(var_dict[x], sns.axisgrid.FacetGrid)]

print(plots_names )

我必须制作一个副本,vars()因为它会随着您迭代它而改变。使用内置函数,我在副本中isinstance()查找所有实例并返回列表中匹配的所有键。这是输出 -seaborn.axisgrid.FacetGridvars()


['g', 'h', 'i', 'j']


查看完整回答
反对 回复 2022-07-19
  • 1 回答
  • 0 关注
  • 60 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信