Matplotlib Line3DCollection多色线条边缘是#34;锯齿状的"

时间:2016-06-28 14:43:56

标签: python matplotlib 3d

基于matplotlib example code我构建了彩色线条的3D版本。我正在使用jupyter笔记本工作并使用STATIC_ROOT = os.path.join(BASE_DIR, "STATICROOT") 我可以放大绘图并在我的浏览器中平滑地渲染角落边缘 - 完美!但是,当我将绘图导出为png或pdf文件以供进一步使用时,角落边缘是#34;锯齿状的"。

如何平滑3D多色线?

edges 3D png-file

%matplotlib notebook

1 个答案:

答案 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')

缩放输出图像:

enter image description here