gpt4 book ai didi

python - 带有 seaborn PairGrid 图的 ipywidgets

转载 作者:行者123 更新时间:2023-12-05 06:32:01 25 4
gpt4 key购买 nike

在 Jupyter Notebook 中,我正在使用 seaborn 结合 ipywidgets 可视化 Iris 数据集。这很好用,只是速度不是那么快,因为每次选择“versicolor”、“virginica”和“setosa”物种的新组合时都必须渲染图。请参见第一个代码块。

因此,我尝试通过预处理每个物种组合的图并将它们存储在字典中来加快交互速度。请参见第二个代码块。字典似乎包含所有情节,但它们没有显示。

有什么解决办法吗?

第一个代码块:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from ipywidgets import *

sns.set(style="white")
iris = sns.load_dataset("iris")

def iris_pg(species):
g = sns.PairGrid(iris[iris.species.isin(species)], diag_sharey=False)
g.map_lower(sns.kdeplot)
g.map_upper(sns.scatterplot)
g.map_diag(sns.kdeplot, lw=3)
return plt.show()

interact(iris_pg,
species = widgets.SelectMultiple(options=iris.species.unique(),
value=tuple(iris.species.unique()[-2:]),
rows=len(iris.species.unique()),
description='species',
disabled=False))

第二个代码块:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from ipywidgets import *
from itertools import combinations

sns.set(style="white")
iris = sns.load_dataset("iris")

all_combinations = list()
for i in range(1, len(iris.species.unique()) + 1):
for combi in combinations(iris.species.unique(), i):
all_combinations.append(combi)

all_plots = dict()
for i in all_combinations:
all_plots[i] = sns.PairGrid(iris[iris.species.isin(i)], diag_sharey=False)
all_plots[i].map_lower(sns.kdeplot)
all_plots[i].map_upper(sns.scatterplot)
all_plots[i].map_diag(sns.kdeplot, lw=3)

def iris_pg(species):
all_plots[species]
return plt.show()

options = iris.species.unique()
value = tuple(iris.species.unique()[-2:])
rows = len(iris.species.unique())

interact(iris_pg,
species = widgets.SelectMultiple(options=options,
value=value,
rows=rows,
description='species',
disabled=False))

最佳答案

基于对此 question 的回答,这是优化交互性能的解决方案。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from ipywidgets import *
from itertools import combinations

sns.set(style="white")
iris = sns.load_dataset("iris")

all_combinations = list()
for i in range(1, len(iris.species.unique()) + 1):
for combi in combinations(iris.species.unique(), i):
all_combinations.append(combi)

all_plots = dict()
for i in all_combinations:
all_plots[i] = sns.PairGrid(iris[iris.species.isin(i)], diag_sharey=False)
all_plots[i].map_lower(sns.kdeplot)
all_plots[i].map_upper(sns.scatterplot)
all_plots[i].map_diag(sns.kdeplot, lw=3)
plt.close() # <-- added

def iris_pairgrid(species):
return all_plots[species].fig # <-- added .fig

o = iris.species.unique()
v = tuple(iris.species.unique()[-2:])
r = len(iris.species.unique())

interact(iris_pairgrid,
species = widgets.SelectMultiple(options=o,
value=v,
rows=r,
description='species',
disabled=False))

关于python - 带有 seaborn PairGrid 图的 ipywidgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51544577/

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