Matplotlib: конвертировать сюжет в массив без границ - PullRequest
0 голосов
/ 27 июня 2018

Я использую scatter() для создания этого графика:

enter image description here

Затем я преобразую график в массив Numpy для дальнейшей обработки и получу это:

enter image description here

Как мне избавиться от границы?

Вот мой код:

import matplotlib.pyplot as plt
import numpy as np

n = 500
domain_size = 1000

x = np.random.randint(0,domain_size,(n,2))

fig, ax = plt.subplots(frameon=False)
fig.set_size_inches((5,5))
ax.scatter(x[:,0], x[:,1], c="black", s=200, marker="*")
ax.set_xlim(0,domain_size)
ax.set_ylim(0,domain_size)
fig.add_axes(ax)

fig.canvas.draw()

X = np.array(fig.canvas.renderer._renderer)
X = 0.2989*X[:,:,1] + 0.5870*X[:,:,2] + 0.1140*X[:,:,3]

plt.show()
plt.close()

plt.imshow(X, interpolation="none", cmap="gray")
plt.show()

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Я разобрался, как избавиться от границ. Просто замените

fig, ax = plt.subplots(frameon=False)

с

fig = plt.figure()
ax = fig.add_axes([0.,0.,1.,1.])

и все работает отлично.

0 голосов
/ 27 июня 2018

Вы должны выключать axis каждый раз перед рендерингом графиков. Вот модифицированный код, который делает это.

import matplotlib.pyplot as plt
import numpy as np

n = 500
domain_size = 100
x = np.random.randint(0,domain_size,(n,2))

fig, ax = plt.subplots()
fig.set_size_inches((5,5))
ax.scatter(x[:,0], x[:,1], c="black", s=200, marker="*")
ax.set_xlim(0,domain_size)
ax.set_ylim(0,domain_size)
ax.axis('off')

fig.add_axes(ax)
fig.canvas.draw()

# this rasterized the figure
X = np.array(fig.canvas.renderer._renderer)
X = 0.2989*X[:,:,1] + 0.5870*X[:,:,2] + 0.1140*X[:,:,3]

plt.show()
plt.close()

# plot the image array X
fig2, ax2 = plt.subplots()
plt.imshow(X, interpolation="none", cmap="gray")

ax2.axis('off')

plt.show()

Полученный участок:

enter image description here

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