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()
불연속 변화 버전
cmap
및 norm (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()
참고문헌
Reference
이 문제에 관하여(3D plot으로 그래프 색상을 중간에 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ultimatile/items/90e528ee5ac508e5ce38
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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()
불연속 변화 버전
cmap
및 norm (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()
참고문헌
Reference
이 문제에 관하여(3D plot으로 그래프 색상을 중간에 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ultimatile/items/90e528ee5ac508e5ce38
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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()
Reference
이 문제에 관하여(3D plot으로 그래프 색상을 중간에 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ultimatile/items/90e528ee5ac508e5ce38텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)