3D plot으로 그래프 색상을 중간에 변경

12028 단어 matplotlib

하고 싶은 일



이런 녀석

LineCollection의 3D 버전 인 Line3DCollection를 사용하십시오.

연속 변화 버전


Line3DCollection로 전달 cmap을 변경하여 사용할 색 구성표를 변경하십시오.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Line3DCollection

theta  = np.linspace(0, 20 * np.pi, 500)
x = np.cos(theta)
y = np.sin(theta)
z = 0.1 * theta / np.pi
points = np.array([x, y, z]).T.reshape(-1, 1, 3)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

fig = plt.figure()
ax = fig.gca(projection = '3d')
norm = plt.Normalize(z.min(),  z.max())
lc = Line3DCollection(segments, cmap='viridis', norm=norm)
lc.set_array(z)
lc.set_linewidth(2)
ax.add_collection(lc)

ax.set_xlim(x.min(), x.max())
ax.set_ylim(-1.1, 1.1)
ax.set_zlim(0, 2)
plt.show()

불연속 변화 버전




cmapnorm (BoundaryNorm)를 사용하여 색상 및 임계 값을 조정하십시오.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm
from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Line3DCollection

theta  = np.linspace(0, 20 * np.pi, 500)
x = np.cos(theta)
y = np.sin(theta)
z = 0.1 * theta / np.pi
points = np.array([x, y, z]).T.reshape(-1, 1, 3)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

fig = plt.figure()
ax = fig.gca(projection = '3d')
cmap = ListedColormap(['w', 'b', 'r', 'w', 'b'])
norm = BoundaryNorm([1/3, 2/3, 1, 4/3, 5/3, 2], cmap.N)
lc = Line3DCollection(segments, cmap=cmap, norm=norm)
lc.set_array(z)
lc.set_linewidth(2)
ax.add_collection(lc)

ax.set_xlim(x.min(), x.max())
ax.set_ylim(-1.1, 1.1)
ax.set_zlim(0, 2)
plt.show()

참고문헌

좋은 웹페이지 즐겨찾기