Изменить размер/ширину ячейки imshow или аналогичной функции

Мне нужно, чтобы первая и последняя ячейки были вдвое меньше ширины.

Моя цель - получить что-то вроде этого:

Но я получил это:

Мой код:

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) должно помочь
Jody Klymak 09.04.2023 06:41

Ах, конечно, это определенно проще для конкретного примера ОП с обрезкой слева и справа.

tdy 09.04.2023 06:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как прокомментировал Джоди, если вы хотите обрезать только самые внешние ячейки, можно быстро изменить пределы осей:

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]

Другие вопросы по теме