我已经搜索过S / O,但找不到答案。
当我尝试使用seaborn绘制分布图时,我得到了未来警告。我想知道这里可能是什么问题。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
% matplotlib inline
from sklearn import datasets
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['class'] = iris.target
df['species'] = df['class'].map({idx:s for idx, s in enumerate(iris.target_names)})
fig, ((ax1,ax2),(ax3,ax4))= plt.subplots(2,2, figsize =(13,9))
sns.distplot(a = df.iloc[:,0], ax=ax1)
sns.distplot(a = df.iloc[:,1], ax=ax2)
sns.distplot(a = df.iloc[:,2], ax=ax3)
sns.distplot(a = df.iloc[:,3], ax=ax4)
plt.show()
这是警告:
C:\ProgramData\Anaconda3\lib\site-packages\scipy\stats\stats.py:1713:
FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated;
use `arr[tuple(seq)]` instead of `arr[seq]`.
In the future this will be interpreted as an array index, `arr[np.array(seq)]`,
which will result either in an error or a different result.
return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval
有帮助吗?您可以运行上面的代码。您会收到警告。
熊猫:0.23.4
,seaborn:0.9.0
,matplotlib:2.2.3
,scipy:1.1.0
,numpy:1.15.0'
答案 0 :(得分:16)
对于python>=3.7
,您需要升级scipy>=1.2
。
答案 1 :(得分:9)
更全面的追溯将是很好的。我的猜测是seaborn.distplot
正在使用scipy.stats
进行计算。错误发生在
def _compute_qth_percentile(sorted, per, interpolation_method, axis):
....
indexer = [slice(None)] * sorted.ndim
...
indexer[axis] = slice(i, i + 2)
...
return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval
因此,在最后一行中,列表indexer
用于切片sorted
。
In [81]: x = np.arange(12).reshape(3,4)
In [83]: indexer = [slice(None), slice(None,2)]
In [84]: x[indexer]
/usr/local/bin/ipython3:1: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
#!/usr/bin/python3
Out[84]:
array([[0, 1],
[4, 5],
[8, 9]])
In [85]: x[tuple(indexer)]
Out[85]:
array([[0, 1],
[4, 5],
[8, 9]])
使用切片列表是可行的,但是计划将来会贬值。涉及多个维度的索引应该是元组。在上下文中使用列表是一种较旧的样式,正在逐步淘汰。
因此,scipy
开发人员需要解决此问题。这不是最终用户应该处理的事情。但是现在,不必担心futurewarning
。它不会影响计算或绘图。有一种方法可以抑制将来的警告,但是我不知道该怎么办。
答案 2 :(得分:2)
我遇到了同样的警告。我更新了scipy,pandas和numpy。我仍然明白。我将seaborn.pairplot
与kde一起使用时得到了理解,kde在下面使用了seaborn.kdeplot
。
如果您想摆脱警告,可以使用警告库。例如:
import warnings
with warnings.catch_warnings():
your_code_block
答案 3 :(得分:2)
我正在运行seaborn.regplot,并按照NetworkMeister的建议通过升级scipy 1.2摆脱了警告。
pip install --upgrade scipy --user
如果在其他海底图块中仍收到警告,则可以预先运行以下命令。这在Jupyter Notebook中很有用,因为即使您的地块很大,警告也会使报告看起来很糟糕。
import warnings
warnings.filterwarnings("ignore")
答案 4 :(得分:0)
工作示例:
import numpy as np
import warnings
x = np.random.normal(size=100)
with warnings.catch_warnings():
warnings.simplefilter("ignore")
sns.distplot(x, hist=False, rug=True, color="r");