0

我试图可视化包含0s 和1s 列的数据帧的稀疏性(总共是 s 的 90% 和0s 的 10% 1)。

到目前为止,我已经尝试了以下方法:

sparse_df = df[binary_feat_cols].astype(pd.SparseDtype("int", 0))
sparse_df.sparse.density
plt.figure(figsize=(10, 6))
plt.spy(sparse_df, markersize=1);

sparse_matrix = scipy.sparse.csr_matrix(df[binary_feat_cols].to_numpy())
plt.figure(figsize=(10, 6))
plt.spy(sparse_matrix, markersize=1);

在这两种情况下,我都知道图像显示。任何想法我做错了什么?

在此处输入图像描述

编辑:我刚刚意识到它与矩阵的形状有关,因为我已经尝试过这个例子:

x = np.random.randn(910, 51)
x[15, :] = 0.
x[:, 40] = 0.
plt.figure(figsize=(10, 6))
plt.spy(x, markersize = 5)

我得到了这个新情节: 在此处输入图像描述

那么,问题应该是数据框有大约 900K 行和 50 列,并且无法绘制?

4

1 回答 1

0

我在这里检查了matplotlib.pyplot.spy并看到了aspect参数:

aspect{'equal', 'auto', None} 或 float,默认值:'equal' 轴的纵横比。此参数与图像特别相关,因为它确定数据像素是否为正方形。此参数是显式调用 Axes.set_aspect 的快捷方式。有关详细信息,请参见那里。'equal':确保纵横比为 1。像素为正方形。'auto':轴保持固定并调整纵横比以使数据适合轴。通常,这将导致非方形像素。无:使用 rcParams["image.aspect"](默认值:'equal')。

所以,做plt.spy(sparse_df, markersize=1, aspect = 'auto')已经解决了我的问题。谢谢!

于 2021-10-16T20:07:35.367 回答