Matplotlibのsavefigに最近追加されている機能
matplotlibは昔JPEG保存に手間がかかると聞いていたが、普通にできるようになっている。
qualityも指定できるようになっている。1-100で指定できるみたい。ただし、おおむね20未満は質だけが悪くなってあまりサイズの抑制効果が得られない。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d import proj3d
def orthogonal_proj(zfront, zback):
width = zfront - zback;
a = 1 / width
b = - a * (zfront + zback) / 2
return np.array([[1,0,0,0],
[0,1,0,0],
[0,0,a,b],
[0,0,0,zback]])
proj3d.persp_transformation = orthogonal_proj
def main():
r = 50.0;
theta = np.arange(0.0, 360.0, 30.0);
x = np.array([]);
y = np.array([]);
z = np.array([]);
for i in range(10):
x_ = r * np.cos(theta / 180.0 * np.pi);
y_ = r * np.sin(theta / 180.0 * np.pi);
z_ = 10.0 * i * np.ones(x_.shape[0]);
x = np.append(x, x_);
y = np.append(y, y_);
z = np.append(z, z_);
X = np.array([x, y, z, np.ones(x.shape[0])]);
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.scatter3D(X[0], X[1], X[2]);
ax.set_aspect('equal')
plt.grid()
plt.savefig('plot20180321.jpg', format='jpeg', quality=10);
plt.show();
if __name__ == '__main__':
main()

