小编Zen*_*non的帖子

为什么itertools.product在初始化时会贯穿所有元素?

我假设当时itertools.product生成一个元素。我现在注意到这是不正确的。简单的概念证明:

Class A:
  def __init__(self, n):
    self.source = iter(range(n))

  def __iter__(self):
    return self

  def __next__(self):
    val = next(self.source)
    print("I am at:", val)
    return val
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做:

from itertools import product
l = product(A(3), A(3))
print("Here")
next(l)
Run Code Online (Sandbox Code Playgroud)

我希望有作为输出:

>'Here'
>'I am at 0'
>'I am at 0'
Run Code Online (Sandbox Code Playgroud)

但是我有

>'I am at 0'
>'I am at 1'
>'I am at 2'
>'I am at 0'
>'I am at 1'
>'I am at 2'
>'Here'
Run Code Online (Sandbox Code Playgroud)

我想念什么吗?

iteration generator python-3.7

6
推荐指数
1
解决办法
98
查看次数

Python3 Seaborn PairGrid 图例在子图之外

我正在制作一个很大的PairGrid图形,但无法将图例设置在图之外(右侧)。PairGrid似乎没有继承legend_out的选项FaceGrid。到目前为止,这是我的尝试,您可以看到图例与图形重叠。

from random import choice

from numpy import random
from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd

def my_kdeplot(dfx, dfy, *args, **kwargs):
    ax = sns.kdeplot(dfx, dfy, alpha=0.7,
                     cmap=sns.light_palette(kwargs['color'], as_cmap=True))

names = [choice('ABCDE') for _ in range(1000)]
df = pd.DataFrame(list(zip(names, *[random.random(1000) for _ in range(5)])),
                   columns=['names','A','B','C','D','E'])

g = sns.PairGrid(df, hue='names')

g.map_lower(my_kdeplot)
g.map_upper(plt.scatter, alpha=0.7)
g.map_diag(plt.hist)

g = g.add_legend(fontsize=14)
sns.plt.savefig('fig.png')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

legend seaborn python-3.5

5
推荐指数
1
解决办法
2143
查看次数

pcolormesh添加空白列

我一直试图用pcolormesh做一个简单的热图,我遇到了一些奇怪的效果,有些尺寸,它们会添加空的白色列.如果我创建一个10x30,如下所示,它完美地工作.

from matplotlib import pyplot as plt 
import numpy as np

d = []
for x in range(10):
    d.append([])
    for y in range(30):
        d[-1].append(y)

plt.pcolormesh(np.array(d))
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用10x37:

from matplotlib import pyplot as plt 
import numpy as np

d = []
for x in range(10):
    d.append([])
    for y in range(34):
        d[-1].append(y)

plt.pcolormesh(np.array(d))
plt.show()
Run Code Online (Sandbox Code Playgroud)

我最后得到了那些奇怪的白色柱子.这似乎适用于几个值(10x11失败,但10x12工作......我无法分辨模式. 10x37的结果

有没有办法删除它们,可能强制热图的最终大小?

python matplotlib

4
推荐指数
1
解决办法
1363
查看次数