gpt4 book ai didi

python - matshow 的问题

转载 作者:行者123 更新时间:2023-12-01 02:13:42 25 4
gpt4 key购买 nike

我正在尝试使用 matplotlib matshow 一起显示矩阵和相关矢量数据。

vec_data = np.array([[ 0.,  1.,  1.,  1.,  0.,  1.,  1.,  0.,  0.,  0.]])

mat_data = np.array([
[ 0. , 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 1. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0.5, 0. , 0.5, 0. , 0. , 0. , 0. ],
[ 0. , 0. , 1. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0.1, 0.1, 0.1, 0.1, 0. , 0.1, 0.1, 0.1, 0. , 0.1],
[ 0. , 0. , 1. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 1. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0. , 0.1, 0.1],
[ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0. , 0. ],
[ 0.1, 0.1, 0.1, 0.1, 0. , 0.1, 0.1, 0.1, 0.1, 0. ]])

fig, axes = plt.subplots(2,1,figsize=(4,4),sharey=False,sharex=True,gridspec_kw = {'height_ratios':[25,1]})
axes[0].matshow(mat_data)
axes[1].matshow(vec_data)
axes[1].tick_params(direction='out', length=6, width=0)
axes[1].set_yticklabels([''])
axes[1].set_xlabel('vector')

生成的图像如下:

enter image description here

这里的问题是,当将这两个 matshow 图像放在一起时,第一个图像的 ylim 会困惑:它应该显示从 0 到 9 的值,但它只显示 0.5 到 8.5 的范围。如果我用命令单独绘制图像

plt.matshow(mat_data)

我得到了具有正确 ylim 的所需图像。

enter image description here

有人知道导致该问题的原因以及如何解决它吗?我尝试使用

axes[0].set_ylim([-0.5,9.5])

但它不起作用。

P.S.:我使用了关键字 gridspec_kw = {'height_ratios':[25,1]} 以便向量显示为向量 - 否则它将显示为带有空白值的矩阵,如下所示。

enter image description here

参数 sharex = True 用于 plt.subplots,以便向量和矩阵对齐。如果没有参数,图表将如下所示

enter image description here

但请注意,ylim 的问题已经消失 - 因此该参数可能是此问题的主要原因。我想如果我能找到另一种方法来对齐两个图像而不使用“sharex = True”可以解决这个问题。

最佳答案

对子图使用 sharex=True 会过度约束系统。因此,Matplotlib 将释放绘图限制,以便能够显示给定规范的绘图。

解决方案是使用sharex=False(默认值)。然后高度比需要匹配图像的尺寸,即

fig, axes = plt.subplots(2,1,figsize=(4,4),sharey=False,sharex=False,
gridspec_kw = {'height_ratios':[mat_data.shape[0],vec_data.shape[0]]})

完整示例:

import numpy as np
import matplotlib.pyplot as plt

vec_data = np.array([[ 0., 1., 1., 1., 0., 1., 1., 0., 0., 0.]])
mat_data = np.random.choice([0,.1,.5,1], size=(10,10))

fig, axes = plt.subplots(2,1,figsize=(4,4),sharey=False,sharex=False,
gridspec_kw = {'height_ratios':[mat_data.shape[0],vec_data.shape[0]]})
axes[0].matshow(mat_data)
axes[1].matshow(vec_data)
axes[1].tick_params(direction='out', length=6, width=0)
axes[1].set_yticklabels([''])
axes[1].set_xlabel('vector')

plt.show()

enter image description here

关于python - matshow 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48541876/

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