Мне нужно, чтобы первая и последняя ячейки были вдвое меньше ширины.
Моя цель - получить что-то вроде этого:
Но я получил это:
Мой код:
import numpy as np
import matplotlib.pyplot as plt
data = np.array([0. , 0.2 , 0.4 , 0.6 , 0.8 , 1. ])
fig, ax = plt.subplots()
matrix = data.reshape(1, -1)
ax.imshow(matrix, cmap='hot')
plt.show()
Есть ли возможность сделать это?
Ах, конечно, это определенно проще для конкретного примера ОП с обрезкой слева и справа.
Как прокомментировал Джоди, если вы хотите обрезать только самые внешние ячейки, можно быстро изменить пределы осей:
ax.set_xlim(0, 5)
Но в более общем случае используйте pcolormesh для пользовательских сеток. Определите границы ячеек x
и y
и нанесите matrix
на эту пользовательскую сетку:
import numpy as np
import matplotlib.pyplot as plt
data = np.linspace(0, 1, 6)
matrix = data.reshape(1, -1)
# define cell bounds
x = [0, 0.5, 1.5, 2.5, 3.5, 4.5, 5]
y = [-0.5, 0.5]
# plot matrix on custom mesh
fig, ax = plt.subplots()
ax.pcolormesh(x, y, matrix, cmap='hot')
# restyle like imshow
ax.set_aspect('equal')
ax.invert_yaxis()
plt.show()
Или для более программного способа определения границ:
r, c = matrix.shape
x = np.arange(c + 1) - 0.5 # [-0.5 0.5 1.5 2.5 3.5 4.5 5.5]
x[0] += 0.5 # [ 0. 0.5 1.5 2.5 3.5 4.5 5.5]
x[-1] -= 0.5 # [ 0. 0.5 1.5 2.5 3.5 4.5 5. ]
y = np.arange(r + 1) - 0.5 # [-0.5 0.5]
ax.set_xlim(0, 5)
должно помочь