MatPlotLib plot_surface: hidden lines appearing in a PDF file

I create a 3D surface using the plot_surface MatPlotLib method and then save it in a PDF file. I can hide the surface lines with "linewidth = 0", but the lines appear again after saving to PDF.

Edit: when savefig () is executed in .png and .svg, hidden lines remain hidden.

The first image below is a screenshot of the result of plt.show (), and the second is a screenshot of the PDF result. Any ideas on what I can do to keep hidden lines out of sight in a PDF?

I will post the code below, as it is a bit long. Windows 7 (64-bit), Python 2.7.3 (win32), MatPlotLib 1.2.0 (win32).

Change of plan, this forum does not allow me to post images, something about the fact that I have no reputation :). Only code.

#===================================================================== # get external packages import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D #===================================================================== Gw1 = plt.figure("Sphere-Cylinder Intersection") diagram1 = Axes3D(Gw1) diagram1.view_init(33,-48) # force equal aspect ratio in all 3 directions # 3D library is missing this -- force it with an invisible bounding cube diagram1.set_aspect('equal') CUBE = 1.3 for direction in (-1, 1): for point in np.diag(direction * CUBE * np.array([1,1,1])): diagram1.plot([point[0]], [point[1]], [point[2]], 'white') # line for y-axis (show as N/E/D coords, not plotting coords) diagram1.plot([0.0,1.5],[0.0,0.0],[0.0,0.0], linewidth=1,linestyle='-',color='black') diagram1.text(1.6,0.0,0.0,'y',fontsize=14,fontweight='bold') # line for x-axis (show as N/E/D coords, not plotting coords) diagram1.plot([0.0,0.0],[0.0,1.5],[0.0,0.0], linewidth=1,linestyle='-',color='black') diagram1.text(0.0,1.6,0.0,'x',fontsize=14,fontweight='bold') # line for z-axis (show as N/E/D coords, not plotting coords) diagram1.plot([0.0,0.0],[0.0,0.0],[0.0,-1.5], linewidth=1,linestyle='-',color='black') diagram1.text(0.0,0.0,-1.7,'z',fontsize=14,fontweight='bold') # unit sphere about origin phi = np.linspace(0.0,np.pi/2.0,361) theta = np.linspace(0.0,np.pi,361) phi,theta = np.meshgrid(phi,theta) x = np.sin(theta)*np.cos(phi) y = np.sin(theta)*np.sin(phi) z = np.cos(theta) diagram1.plot_surface(x,y,z,linewidth=0.0,color='DarkKhaki',alpha=0.25) # elliptical cylinder about z-axis 1 a = 0.10 b = 0.15 x = a*np.cos(np.linspace(0.0,np.pi/2.0,101)) z = np.linspace(-1.3,1.3,101) x,z = np.meshgrid(x,z) y = b*np.sin(np.arccos(x/a)) diagram1.plot_surface(x,y,z,linewidth=0.0,color='red',alpha=0.25) # elliptical cylinder about z-axis 2 a = 0.21 b = 0.315 x = a*np.cos(np.linspace(0.0,np.pi/2.0,101)) z = np.linspace(-1.3,1.3,101) x,z = np.meshgrid(x,z) y = b*np.sin(np.arccos(x/a)) diagram1.plot_surface(x,y,z,linewidth=0.0,color='red',alpha=0.25) # elliptical cylinder about z-axis 3 a = 0.42 b = 0.63 x = a*np.cos(np.linspace(0.0,np.pi/2.0,101)) z = np.linspace(-1.3,1.3,101) x,z = np.meshgrid(x,z) y = b*np.sin(np.arccos(x/a)) diagram1.plot_surface(x,y,z,linewidth=0.0,color='red',alpha=0.25) # sphere-cylinder intersection 1 a = 0.10 b = 0.15 x = a*np.cos(np.linspace(0.0,np.pi/2.0,101)) y = b*np.sin(np.linspace(0.0,np.pi/2.0,101)) z = np.sqrt(np.around(1.0-x**2-y**2,decimals=10)) diagram1.plot(x,y,z,linewidth=1.0,linestyle='-',color='red') diagram1.plot(x,y,-z,linewidth=1.0,linestyle='-',color='red') # sphere-cylinder intersection 2 a = 0.21 b = 0.315 x = a*np.cos(np.linspace(0.0,np.pi/2.0,101)) y = b*np.sin(np.linspace(0.0,np.pi/2.0,101)) z = np.sqrt(np.around(1.0-x**2-y**2,decimals=10)) diagram1.plot(x,y,z,linewidth=1.0,linestyle='-',color='red') diagram1.plot(x,y,-z,linewidth=1.0,linestyle='-',color='red') # sphere-cylinder intersection 3 a = 0.42 b = 0.63 x = a*np.cos(np.linspace(0.0,np.pi/2.0,101)) y = b*np.sin(np.linspace(0.0,np.pi/2.0,101)) z = np.sqrt(np.around(1.0-x**2-y**2,decimals=10)) diagram1.plot(x,y,z,linewidth=1.0,linestyle='-',color='red') diagram1.plot(x,y,-z,linewidth=1.0,linestyle='-',color='red') # plotting axes off diagram1.axis('off') # display/save plt.savefig ("Diagram1.pdf") plt.show() #===================================================================== 
+4
source share
1 answer

As esmit said, the fact that the output appears correct in other image formats (both PNG and SVG) suggests that there may be an error in the PDF file. I will post a bug report on github.

Thanks for the tips!

0
source

Source: https://habr.com/ru/post/1492510/


All Articles