Python Matplotlib - Смещенные линии сетки и цветовые заливки - PullRequest
0 голосов
/ 01 января 2019

Я использую следующий код для создания своего рода двоичной тепловой карты:

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 голосов
/ 02 января 2019

Как отмечается в комментариях, проблема, кажется, исчезает при более высоком DPI, для будущих пользователей это показано ниже,

50 DPI - Figsize 8, 6

image

100 DPI - Figsize 8. 6

image

Однако на него также влияет параметр figsize, установленный либо с помощью matplotlib rcParams, либо с помощью figsize(height, width) при построении figure - для больших фигур требуется более высокое значение DPI, чтобы проблема с дисплеем исчезла (хотя может потребоваться просмотр полноразмерных изображений, чтобы увидеть эффект вместо встроенного дисплея), то есть

50 DPI - Размер 20,16

image

100 DPI - Размер 20,16

image

300 DPI - Размер 20, 16

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...