基于matplotlib example code我构建了彩色线条的3D版本。我正在使用jupyter笔记本工作并使用STATIC_ROOT = os.path.join(BASE_DIR, "STATICROOT")
我可以放大绘图并在我的浏览器中平滑地渲染角落边缘 - 完美!但是,当我将绘图导出为png或pdf文件以供进一步使用时,角落边缘是#34;锯齿状的"。
如何平滑3D多色线?
%matplotlib notebook
答案 0 :(得分:1)
我认为join style是控制节段关节外观的因素。 Line3DCollection
确实具有set_joinstyle()
函数,但这似乎没有任何区别。因此,我不得不放弃Line3DCollection
并逐段绘制线段,并为每个段调用其set_solid_capstyle('round')
。
以下是对我有用的内容:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Generate random data
np.random.seed(1)
n = 20 # number of data points
#set x,y,z data
x = np.random.uniform(0, 1, n)
y = np.random.uniform(0, 1, n)
z = np.arange(0,n)
#################
### 3D Figure ###
#################
# Create a set of line segments
points = np.array([x, y, z]).T.reshape(-1, 1, 3)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
cmap=plt.get_cmap('copper')
colors=[cmap(float(ii)/(n-1)) for ii in range(n-1)]
#plot
fig = plt.figure()
ax = fig.gca(projection='3d')
for ii in range(n-1):
segii=segments[ii]
lii,=ax.plot(segii[:,0],segii[:,1],segii[:,2],color=colors[ii],linewidth=2)
#lii.set_dash_joinstyle('round')
#lii.set_solid_joinstyle('round')
lii.set_solid_capstyle('round')
ax.set_zlim(0, max(z))
plt.title('3D-Figure')
#save plot
plt.savefig('3D_Line.png', dpi=600, facecolor='w', edgecolor='w',
orientation='portrait')
缩放输出图像: