Several ways you can modify the whitespace:
Reduce the whitespace inside the axes. To do this, you could modify the x
, y
and z
limits using:
ax.set_xlim()
ax.set_ylim()
ax.set_zlim()
Reduce the whitespace outside the axes. To do this, you can use:
fig.subplots_adjust(left=0, right=1, bottom=0, top=1)
Finally, you could just save a portion of the figure when you call savefig
. You can modify this area using the bbox_inches
kwarg, by using an actual Bbox
rather than setting it to tight
.
For example, lets consider this image from the matplotlib
gallery. Note that I've change the axis and figure background colours, so they show up clearly on the page below.
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(10,8))
# I added a pink axis background, just so its easy to see against the white page
ax = fig.add_subplot(111, projection='3d', facecolor='#FFAAAA')
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b')
ax.axis('off')
# Save the original figure (using a grey background for the figure for clarity)
plt.savefig('3d_whitespace0.png', facecolor='#AAAAAA')
# Step 1 above: change the axes limits
ax.set_xlim(-8, 8)
ax.set_ylim(-8, 8)
ax.set_zlim(-8, 8)
plt.savefig('3d_whitespace1.png', facecolor='#AAAAAA')
# Step 2 above: change the subplot margins
fig.subplots_adjust(left=0, right=1, bottom=0, top=1)
plt.savefig('3d_whitespace2.png', facecolor='#AAAAAA')
# Step 3 above: save only a portion of the figure. Here we will cut one inch
# off each side of the figure, to change the 10in x 8in figure to 8in x 6in
bbox = fig.bbox_inches.from_bounds(1, 1, 8, 6)
plt.savefig('3d_whitespace3.png', bbox_inches=bbox, facecolor='#AAAAAA')
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…