代码之家  ›  专栏  ›  技术社区  ›  Tommaso Belluzzo

python matplotlib-网格线和颜色填充未对齐

  •  3
  • Tommaso Belluzzo  · 技术社区  · 6 年前

    我正在使用以下代码生成一种二进制heatmap:

    import numpy as np
    import matplotlib.colors as mlc
    import matplotlib.pyplot as mlp
    
    states = ['AAAA', 'BBBB', 'CCCC', 'DDDD']
    walk = [1, 2, 3, 2, 3, 2, 3, 2, 3, 2]
    
    states_len = len(states)
    walk_len = len(walk)
    
    img = np.zeros((states_len, walk_len), dtype=float)
    
    for i, s in enumerate(walk):
        img[s, i] = 1.0
    
    figure, ax = mlp.subplots()
    
    color_map = mlc.LinearSegmentedColormap.from_list('ColorMap', [(1.000, 1.000, 1.000), (0.984, 0.501, 0.447)])
    ax.imshow(img, cmap=color_map, interpolation='none')
    
    ax.set_xlabel('Steps', fontsize=13)
    ax.set_xticks(np.arange(0, walk_len, 1))
    ax.set_xticks(np.arange(-0.5, walk_len, 1), minor=True)
    ax.set_xticklabels(np.arange(1, walk_len + 1, 1))
    
    ax.set_ylabel('States', fontsize=13)
    ax.set_yticks(np.arange(0, states_len, 1))
    ax.set_yticks(np.arange(-.5, states_len, 1), minor=True)
    ax.set_yticklabels(states)
    
    ax.grid(which='minor', color='k')
    
    ax.set_title('Walkplot (Sequence)', fontsize=15, fontweight='bold')
    

    它产生了奇怪的结果:

    Screenshot

    正如您可能注意到的那样,色斑看起来并没有与网格正方形对齐。最重要的是,有时网格线的尺寸不统一,有些看起来比其他的大。

    我认为这一定与长宽比或图形大小有关,但我对潜在的解决方案一无所知。我如何解决这个问题?

    我当前的设置:

    • Python 3.6 X64
    • PyTrack 2018.1
    1 回复  |  直到 6 年前
        1
  •  1
  •   William Miller devops-admin    6 年前

    正如评论所指出的,对于未来的用户来说,这个问题似乎在更高的dpi上消失了,如下所示:

    50 dpi-图尺寸8、6

    100 dpi-图8。六

    然而,它也受到 figsize 参数,设置为 matplotlib rcParams 或与 figsize(height, width) 在施工中 figure -较大的数字需要较高的dpi才能使显示问题消失(尽管可能需要查看全尺寸图像以查看效果,而不是内联显示),即。

    50 dpi-图尺寸20,16

    100 dpi-图尺寸20,16

    300 dpi-图尺寸20,16

    推荐文章