import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from mpl_toolkits.mplot3d import Axes3D
bits=5
fig = plt.figure()
fig.subplots_adjust(left=0, bottom=0, right=1, top=1)
ax = fig.add_subplot(111, projection='3d')
ax.set_axis_bgcolor((0.5, 0.5, 0.5))
gradient = np.linspace(0, 1, 2**bits)
colors=np.stack((gradient.flatten(),gradient.flatten(),gradient.flatten()),axis=1)
ax.scatter(gradient,np.ones(2**bits),np.ones(2**bits),alpha=1.0,s=100./2**bits,c=colors,marker='o',linewidth='0')
def update(i):
ax.view_init(elev=20., azim=i)
return fig, ax
if __name__ == '__main__':
plt.axis('off')
fig.set_size_inches(5, 5)
anim = FuncAnimation(fig, update, frames=np.arange(0, 360, 2), repeat=True)
anim.save('%d-bit_grayscale.gif' % bits, dpi=80, writer='imagemagick', fps=24)