找回密码
 会员注册
查看: 28|回复: 0

python绘图(一)Python数据分析和可视化

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71362
发表于 2024-9-9 17:37:12 | 显示全部楼层 |阅读模式
1.绘制三维曲面图及其投影图2. 绘制曲面图3.绘制曲面投影图4.同时绘制曲面图和投影图,用两个图展示5.绘制曲面图6.同时绘制曲面图及其二维填色图数据分析包括探索、清理和转换数据以从中提取有用信息。Python有许多库可以使数据分析变得更容易,例如Pandas、NumPy和SciPy。以下是使用Python进行数据分析的基本步骤:加载数据:您可以使用Pandas从各种来源加载数据,例如CSV、Excel文件、SQL数据库或API。探索数据:使用Pandas查看数据及其结构。您可以检查空值、数据类型和摘要统计信息。此步骤有助于更好地了解数据并识别任何问题。清理数据:您可以使用Pandas处理缺失值、重复值、异常值和不正确的数据。在分析数据之前,数据清理是必不可少的步骤。转换数据:Pandas提供了一些转换数据的工具,包括筛选、分组、合并和透视。此步骤有助于为分析数据做准备。分析数据:您可以使用Python库,例如NumPy、SciPy和Pandas进行各种类型的分析,包括统计分析、机器学习和数据建模。可视化是传达数据洞察力和模式的强大工具。Python有许多数据可视化库,包括Matplotlib、Seaborn和Plotly。以下是使用Python创建可视化的基本步骤:加载数据:您可以像上面描述的那样加载数据。选择可视化:选择适当的可视化方式,例如散点图、条形图、热图等。创建可视化:使用所选库创建可视化,包括选择数据、定义图表类型和自定义图表外观。自定义可视化:您可以自定义图表的各种特征,包括轴标签、、颜色和注释。保存或显示可视化:一旦您创建和自定义了可视化,可以将其保存到文件或在Jupyter笔记本或其他Python环境中显示。使用Python进行数据分析和可视化是一个广阔的领域,这仅仅是一个概述。1. 绘制三维曲面图及其等高线投影图importmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dimportnumpyasnp#创建三维图形fig=plt.figure()ax=fig.add_subplot(111,projection='3d')#生成数据x=np.arange(-5,5,0.25)y=np.arange(-5,5,0.25)x,y=np.meshgrid(x,y)r=np.sqrt(x**2+y**2)z=np.sin(r)#绘制曲面图ax.plot_surface(x,y,z,cmap='viridis')#绘制投影图ax.contourf(x,y,z,zdir='z',offset=-15,cmap='viridis')#调整Z方向距离ax.set_zlim(-15,3)#显示图形plt.show()'运行运行这是一个使用matplotlib库创建3D图形的Python代码,包括曲面图和等高线投影图。代码的第一部分导入必要的库并设置3D图形。第二部分生成数据,该数据是x和y的函数,并使用numpy库计算相应的z值。第三部分使用ax.plot_surface()函数绘制曲面图和ax.contourf()函数绘制等高线投影图。cmap参数指定用于绘图的颜色映射。ax.set_zlim()函数用于调整Z轴限制,并使用plt.show()函数显示图形。总体而言,该代码创建了一个3D图形,其中包括曲面图和等高线投影图,使用颜色映射来显示函数在z方向上的变化。2. 绘制曲面图importmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dimportnumpyasnp#创建三维图形fig=plt.figure()ax=fig.add_subplot(111,projection='3d')#生成数据x=np.arange(5)y=np.arange(5)x,y=np.meshgrid(x,y)z=np.array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24]])#绘制曲面图ax.plot_surface(x,y,z)#设置坐标轴标签ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')#显示图形plt.show()'运行运行3. 加载三列数据文件,绘制曲面投影图importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.interpolateimportgriddata#加载数据data=np.loadtxt('fes.dat')x=data[:,0]y=data[:,1]z=data[:,2]*4.3597*6.022*100#定义网格xi=np.linspace(min(x),max(x),100)yi=np.linspace(min(y),max(y),100)X,Y=np.meshgrid(xi,yi)#插值数据到网格上Z=griddata((x,y),z,(X,Y),method='cubic')#绘制投影图plt.imshow(Z,cmap='viridis',extent=[min(xi),max(xi),min(yi),max(yi)],origin='lower')#添加标签和plt.xlabel('X')plt.ylabel('Y')plt.title('等高线投影图')#添加色标plt.colorbar()#显示图形plt.show() 4. 加载三列数据文件,同时绘制曲面图和投影图,用两个图展示importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.interpolateimportgriddatafrommpl_toolkits.mplot3dimportAxes3D#加载数据data=np.loadtxt('fes.dat')x=data[:,0]y=data[:,1]z=data[:,2]*4.3597*6.022*100#定义网格xi=np.linspace(min(x),max(x),100)yi=np.linspace(min(y),max(y),100)X,Y=np.meshgrid(xi,yi)#插值数据到网格上Z=griddata((x,y),z,(X,Y),method='cubic')#绘制投影图fig=plt.figure(figsize=(10,5))ax1=fig.add_subplot(1,2,1)im=ax1.imshow(Z,cmap='viridis',extent=[min(xi),max(xi),min(yi),max(yi)],origin='lower')ax1.set_xlabel('X')ax1.set_ylabel('Y')ax1.set_title('等高线投影图')fig.colorbar(im,ax=ax1)#绘制曲面图ax2=fig.add_subplot(1,2,2,projection='3d')ax2.plot_surface(X,Y,Z,cmap='viridis')ax2.set_xlabel('X')ax2.set_ylabel('Y')ax2.set_zlabel('Z')ax2.set_title('3D曲面图')#显示图形plt.show()5. 加载三列数据文件,绘制曲面图importnumpyasnpimportmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3D#加载数据data=np.loadtxt('fes.dat')x=data[:,0]y=data[:,1]z=data[:,2]*4.3597*6.022*100#创建3D坐标轴fig=plt.figure()ax=fig.add_subplot(111,projection='3d')#绘制曲面ax.plot_trisurf(x,y,z,cmap='viridis')#添加标签和ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')ax.set_title('曲面图')#显示图形plt.show()6.在同一张图中绘制曲面图及其二维填色图importnumpyasnpimportmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dfromscipy.interpolateimportgriddata#设置DPI,图像清晰度#通常在100到300DPI之间选择一个合适的值即可。如果需要更高的分辨率,可以考虑使用矢量格式的图像,如PDF、SVG等,它们不受DPI的限制,可以随意缩放而不会失去清晰度。plt.rcParams['figure.dpi']=600#加载数据data=np.loadtxt('fes.dat')x=data[:,0]y=data[:,1]z=data[:,2]*4.3597*6.022*100#创建3D坐标轴fig=plt.figure()ax=fig.add_subplot(111,projection='3d')#绘制曲面ax.plot_trisurf(x,y,z,cmap='viridis')#添加标签和ax.set_xlabel('Ti-Bcoordinationnumber')ax.set_ylabel('Ti-Alcoordinationnumber')ax.set_zlabel('Energy(kJ/mol)')ax.set_title('3-dimensioncontourandsurfaceplot')#定义网格xi=np.linspace(min(x),max(x)+0.5,500)yi=np.linspace(min(y)-0.5,max(y),500)X,Y=np.meshgrid(xi,yi)#设置纵轴坐标刻度范围#ax.set_zlim(-30,0)#插值数据到网格上Z=griddata((x,y),z,(X,Y),method='linear')#绘制投影图contour=ax.contourf(X,Y,Z,cmap='viridis',levels=40,offset=-25)#fig.colorbar(contour)#添加colorbar#fig.add_axes()方法用于在图形中添加新的坐标轴对象,参数指定了新坐标轴的位置和大小。这个方法接受一个参数列表[left,bottom,width,height],这里的left表示新坐标轴的左边缘位置,bottom表示下边缘位置,width表示坐标轴的宽度,height表示坐标轴的高度。cbar_ax=fig.add_axes([0.88,0.10,0.02,0.7])fig.colorbar(contour,cax=cbar_ax)#设置图片大小#fig.set_size_inches(10,6)#显示图形plt.show()这个脚本从名为'fes.dat'的文件中加载数据,文件包含三列数据:第一列和第二列对应于二维平面上的x和y坐标,第三列对应于每个点的值z。脚本然后使用matplotlib将数据绘制成3D曲面,添加轴标签和,并使用scipy将数据插值到网格上。最后,它创建一个二维等高线图,将插值数据投影到x-y平面上,并显示整个图形。以下是脚本的详细说明:导入必要的库:numpy、matplotlib、mpl_toolkits.mplot3d和scipy.interpolate。使用numpy.loadtxt从文件'fes.dat'中加载数据,并将x、y和z数据提取到单独的数组中。创建一个新的图形并添加一个3D轴,使用matplotlib.pyplot.figure和matplotlib.pyplot.subplot。使用mpl_toolkits.mplot3d.Axes3D.plot_trisurf将原始数据绘制成3D曲面。使用mpl_toolkits.mplot3d.Axes3D.set_xlabel、mpl_toolkits.mplot3d.Axes3D.set_ylabel、mpl_toolkits.mplot3d.Axes3D.set_zlabel和mpl_toolkits.mplot3d.Axes3D.set_title将轴标签和添加到绘图中。使用numpy.linspace和numpy.meshgrid定义一个新的x-y点网格。使用scipy.interpolate.griddata将原始数据插值到新网格上。使用mpl_toolkits.mplot3d.Axes3D.contourf创建插值数据的二维等高线图。使用matplotlib.pyplot.show显示整个图形。注意,#fig.colorbar(contour)行被注释掉了。如果取消注释这行代码,它会向图中添加一个颜色条,显示颜色和z值之间的对应关系。参考资料MatplotlibOfficialWebsite:Tutorials—Matplotlib3.7.0documentationSeabornOfficialWebsite:Userguideandtutorial—seaborn0.12.2documentationPlotlyOfficialWebsite:https://plotly.com/python/DataCamp:https://www.datacamp.com/UdacityearntheLatestTechSkills;AdvanceYourCareer|UdacityCoursera:https://www.coursera.org/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-9 20:06 , Processed in 0.444800 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表