Вы можете сделать это, используя опцию Axes
set_rasterization_zorder
.
Все, что связано с zorder
, меньше того, что вы установили, будет сохранено как растровая графика, даже при сохранении в векторном формате, таком как pdf
.
Например:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(500,500)
# fig1 will save the contourf as a vector
fig1,ax1 = plt.subplots(1)
ax1.contourf(data)
fig1.savefig('vector.pdf')
# fig2 will save the contourf as a raster
fig2,ax2 = plt.subplots(1)
ax2.contourf(data,zorder=-20)
ax2.set_rasterization_zorder(-10)
fig2.savefig('raster.pdf')
# Show the difference in file size. "os.stat().st_size" gives the file size in bytes.
print os.stat('vector.pdf').st_size
# 15998481
print os.stat('raster.pdf').st_size
# 1186334
Вы можете увидеть this matplotlib example для получения более подробной информации.
Как отметил @tcaswell, чтобы rasterise только один художник, не влиять на его zorder
, вы можете использовать .set_rasterized
. Однако это не похоже на вариант с contourf
, поэтому вам нужно будет перебрать PathCollections
, созданный contourf
и set_rasterized
на каждом из них. Что-то вроде этого:
contours = ax.contourf(data)
for pathcoll in contours.collections:
pathcoll.set_rasterized(True)
Можно ли увидеть типичный участок? Вы играли с параметром nchunk? –
Пример, приведенный @tom, дает типичный сюжет. Я не играл с параметром nchunck, но для моих целей выбранный ответ был достаточным. Лучший –