Python Matplotlib-网格线和颜色填充未对齐

时间:2019-01-01 19:04:48

标签: python python-3.x matplotlib plot

我正在使用以下代码来生成某种二进制热图:

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
  • PyCharm 2018.1

1 个答案:

答案 0 :(得分:1)

正如评论所表明的那样,在更高的DPI上问题似乎消失了,对于将来的用户,如下所示,

50 DPI-图8、6

100 DPI-图8。6

无论如何,它也受figsize参数的影响,在构造matplotlib时可以用rcParams figsize(height, width)或用figure进行设置-较大的数字需要更高的DPI可以消除显示问题(尽管可能需要查看完整尺寸的图像以查看效果,而不是嵌入式显示),即

50 DPI-图20,16

100 DPI-图20,16

300 DPI-图20,16