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

Python使用matplotlib绘制图形(曲线图、条形图、饼图等)

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71754
发表于 2024-9-6 17:48:03 | 显示全部楼层 |阅读模式
文章目录一、什么是matplotlib二、matplotlib支持的图形三、如何使用matplotlib1.安装matplotlib2.导入matplotlib.pyplot3.准备数据4.绘制图形5.定制图形6.显示或保存图形7.(可选)使用subplots创建多个子图注意事项:四、常见图形使用示例1.线图(LinePlot)2.散点图(ScatterPlot)3.条形图(BarChart)4.直方图(Histogram)5.饼图(PieChart)6.直方图2d7.面积图(AreaPlot)8.热力图(Heatmap)9.三维图形(3DPlot)10.堆叠图(StackedPlot)五、常用函数参考一、什么是matplotlibmatplotlib是一个用于创建静态、动态和交互式可视化图形的Python库。它被广泛用于数据可视化,并且可以与多种操作系统和图形后端一起工作。matplotlib提供了一套与MATLAB相似的命令API,适合交互式制图,也可以作为绘图控件嵌入到其他应用程序中。matplotlib的主要组成部分是pyplot,它是一个类似于MATLAB的绘图框架。pyplot提供了一个MATLAB式的接口,可以隐式地创建图形和轴,使得绘图变得简单。以下是一个简单的matplotlib使用示例,用于绘制一条简单的折线图:importmatplotlib.pyplotaspltimportnumpyasnp#创建数据x=np.linspace(0,10,100)y=np.sin(x)#创建图形plt.figure()#绘制折线图plt.plot(x,y,'-')#设置图表和坐标轴标签plt.title("SimplePlotofSineFunction")plt.xlabel("X-axis")plt.ylabel("Y-axis")#显示图形plt.show()1234567891011121314151617181920'运行运行在这个例子中,我们首先导入了matplotlib.pyplot和numpy。然后,我们创建了一组数据x和y,其中y是x的正弦函数。接下来,我们使用plt.figure()创建一个新的图形,并使用plt.plot()绘制折线图。最后,我们设置了图表的和坐标轴标签,并使用plt.show()显示图形。这只是matplotlib的一个基本示例。该库提供了许多其他功能,包括散点图、条形图、饼图、3D图形、等高线图等。此外,matplotlib还支持自定义颜色、线型、标记等,以及添加图例、网格等。二、matplotlib支持的图形matplotlib是一个非常灵活的绘图库,支持绘制多种类型的图形。以下是一些matplotlib支持的主要图形类型:线图(LinePlots):最基本的图形类型,用于显示数据点的连接。散点图(ScatterPlots):用于显示两个变量之间的关系,通过点的分布来表示。条形图(BarCharts):适用于展示分类数据的相对大小。直方图(Histograms):展示数据分布的统计图,通常用于表示连续变量的分布情况。饼图(PieCharts):用于表示整体中各部分的比例关系。箱图(BoxPlots):用于展示数据的分布情况,包括中位数、四分位数、最大值、最小值以及可能存在的异常值。面积图(AreaCharts):类似于线图,但是下方区域会被填充颜色,用于表示数据随时间的变化量。等高线图(ContourPlots):通常用于表示三维数据在二维平面上的投影,通过等高线展示数据点的密集程度。热力图(Heatmap):通过颜色的深浅来表示数据矩阵中各个值的大小。极坐标图(PolarPlots):在极坐标系中展示数据点,常用于表示与角度相关的信息。三维图形(3DPlots):用于在三维空间中展示数据点的分布情况,可以创建三维散点图、三维曲面图等。堆叠图(StackedPlots):适用于展示多个分类数据系列的累积效果,如堆叠条形图或堆叠面积图。误差条图(ErrorBarCharts):用于表示数据点的不确定性或变化范围。矢量场图(VectorFields):用于表示矢量数据,如风向或流体的流动方向。流线图(StreamPlots):类似于矢量场图,但更侧重于表示流体的流动路径。matplotlib还支持许多其他高级和定制化的图形,包括但不限于小提琴图(violinplots)、树状图(dendrograms)、雷达图(radarcharts)等。由于其强大的定制性和灵活性,matplotlib已经成为数据可视化的重要工具之一。三、如何使用matplotlib使用matplotlib进行数据可视化是一个相对直接的过程。以下是一个清晰、分点的指南,帮助您开始使用matplotlib:1.安装matplotlib首先,确保您已经安装了matplotlib库。如果还没有安装,可以使用pip进行安装:pipinstallmatplotlib12.导入matplotlib.pyplot在Python脚本或JupyterNotebook中,您需要导入matplotlib.pyplot模块,通常我们使用别名plt来引用它:importmatplotlib.pyplotasplt1'运行运行3.准备数据准备您要可视化的数据。这可以是实验数据、统计数据或任何您想要展示的信息。4.绘制图形使用plt中的函数来绘制您想要的图形。以下是一些常见图形的绘制方法:线图:plt.plot(x,y,label='Line1')#x和y是数据点1散点图:plt.scatter(x,y)#x和y是数据点1条形图:plt.bar(x,y)#x是分类变量,y是对应值1直方图:plt.hist(data,bins=10)#data是要统计的数据,bins是分组数量1饼图:plt.pie(sizes,labels=labels)#sizes是各部分大小,labels是标签15.定制图形您可以添加、轴标签、图例以及调整轴的范围等:plt.title('MyPlot')#添加plt.xlabel('XAxisLabel')#添加X轴标签plt.ylabel('YAxisLabel')#添加Y轴标签plt.legend()#添加图例plt.xlim(0,10)#设置X轴范围plt.ylim(0,100)#设置Y轴范围1234566.显示或保存图形最后,使用plt.show()来显示图形,或者使用plt.savefig()来保存图形到文件:plt.show()#显示图形#或者plt.savefig('my_plot.png')#保存图形为PNG文件1237.(可选)使用subplots创建多个子图如果您想在同一个窗口中显示多个图形,可以使用plt.subplots():fig,axs=plt.subplots(nrows=2,ncols=2)#创建一个2x2的子图网格#然后可以在每个子图上进行绘制,例如:axs[0,0].plot(x1,y1)#在第一个子图上绘图axs[0,1].scatter(x2,y2)#在第二个子图上绘图#...以此类推12345注意事项:确保您的数据格式正确,并且与所选的图形类型兼容。matplotlib具有高度的可定制性,您可以通过查阅官方文档来了解更多高级功能和定制选项。在绘制复杂图形时,考虑使用面向对象的方式来操作图形和轴对象,这可以提供更精细的控制。四、常见图形使用示例下面我会通过具体的代码示例来介绍matplotlib库中常见图形的绘制方法。1.线图(LinePlot)线图通常用于展示数据随时间的变化趋势。importmatplotlib.pyplotaspltimportnumpyasnp#创建数据x=np.linspace(0,10,100)y=np.sin(x)#绘制线图plt.plot(x,y)plt.title('LinePlot')plt.xlabel('XAxis')plt.ylabel('YAxis')plt.grid(True)plt.show()1234567891011121314'运行运行2.散点图(ScatterPlot)散点图用于展示两个变量之间的关系。#创建数据x=np.random.rand(50)y=np.random.rand(50)#绘制散点图plt.scatter(x,y)plt.title('ScatterPlot')plt.xlabel('XAxis')plt.ylabel('YAxis')plt.grid(True)plt.show()12345678910113.条形图(BarChart)条形图适用于展示分类数据的相对大小。#创建数据categories=['Category1','Category2','Category3','Category4']values=[23,45,56,12]#设置字体为支持中文的字体,比如'SimHei'(黑体),确保你的系统中安装了该字体plt.rcParams['font.sans-serif']=['SimHei']#用于正常显示中文标签plt.rcParams['axes.unicode_minus']=False#用来正常显示负号#绘制条形图plt.bar(categories,values,label='测试图例')plt.title('BarChart')plt.xlabel('Categories')plt.ylabel('Values')plt.legend()plt.show()12345678910111213144.直方图(Histogram)直方图用于展示数据分布的统计图。#创建数据(正态分布的随机样本)data=np.random.rand(100)print(data)data=np.sort(data)print(data)#绘制直方图plt.hist(data,bins=20,edgecolor='black',color='skyblue',alpha=0.7)#定制图形plt.title('HistogramofDataDistribution')plt.xlabel('ValueRange')plt.ylabel('Frequency')plt.grid(True)#显示图形plt.show()12345678910111213141516175.饼图(PieChart)饼图用于表示整体中各部分的比例关系。#创建数据labels=['A','B','C','D']sizes=[15,30,45,10]#绘制饼图plt.pie(sizes,labels=labels)plt.title('PieChart')plt.show()123456786.直方图2d直方图用于展示数据分布的统计图。#创建数据x=np.array([1,2,3,4,2,2,2,1])y=np.array([1,2,3,4,1,2,3,4])#绘制直方图plt.hist2d(x,y,bins=[20,20],cmap=plt.cm.jet)plt.title('Histogram')plt.xlabel('Value')plt.ylabel('Frequency')#添加带有标签的颜色条plt.colorbar(label='Counts')plt.grid(True)plt.show()123456789101112137.面积图(AreaPlot)面积图是一种展示数据随时间变化趋势的图形,通常用于显示时间序列数据。importmatplotlib.pyplotaspltimportnumpyasnp#模拟数据x=np.arange(1,6)y1=np.random.randint(1,5,5)y2=np.random.randint(1,5,5)#绘制面积图#绘制y1到0之间的区域plt.fill_between(x,y1,color='blue',alpha=0.5,label='Area1')#绘制y1到y2之间的区域plt.fill_between(x,y1,y2,color='red',alpha=0.5,label='Area2')plt.legend()plt.show()123456789101112131415168.热力图(Heatmap)热力图通常用于显示数据矩阵中各个元素值的大小,通过颜色来表示数值。示例1importmatplotlib.pyplotaspltimportnumpyasnpimportseabornassns#创建一个数据矩阵data=np.random.rand(10,12)#绘制热力图sns.heatmap(data,cmap='coolwarm')plt.show()12345678910示例2importnumpyasnpimportpandasaspdimportseabornassnsimportmatplotlib.pyplotasplt#创建一个假设的数据集data={'Product':['A','B','C','D','E'],'January':np.random.randint(10,100,5),'February':np.random.randint(10,100,5),'March':np.random.randint(10,100,5),'April':np.random.randint(10,100,5),'May':np.random.randint(10,100,5),'June':np.random.randint(10,100,5)}#将数据转换为PandasDataFramedf=pd.DataFrame(data)df=df.set_index('Product')#绘制热力图plt.figure(figsize=(10,8))sns.heatmap(df,annot=True,cmap='coolwarm',fmt='d',linewidth=0.5)#设置图表和坐标轴标签plt.title('MonthlySalesHeatmap')plt.xlabel('Month')plt.ylabel('Product')#显示图表plt.show()123456789101112131415161718192021222324252627282930319.三维图形(3DPlot)Matplotlib也支持三维图形的绘制,例如三维散点图、三维曲面图等。importmatplotlib.pyplotaspltimportnumpyasnp#创建3D坐标轴fig=plt.figure()ax=fig.add_subplot(111,projection='3d')#模拟三维数据点x=np.random.standard_normal(100)y=np.random.standard_normal(100)z=np.random.standard_normal(100)#绘制三维散点图ax.scatter(x,y,z,c='b',marker='o')plt.show()1234567891011121314151610.堆叠图(StackedPlot)堆叠图通常用于展示不同类别数据随某个变量的累积变化。importmatplotlib.pyplotaspltimportnumpyasnp#模拟数据N=5menMeans=(20,35,30,35,27)womenMeans=(25,32,34,20,25)ind=np.arange(N)#thexlocationsforthegroupswidth=0.35#thewidthofthebars:canalsobelen(x)sequence#绘制男性数据堆叠图p1=plt.bar(ind,menMeans,width,label='Men')#绘制女性数据堆叠图,注意这里的bottom参数,它使得女性数据的柱状图从男性数据的顶部开始绘制p2=plt.bar(ind,womenMeans,width,label='Women',bottom=menMeans)plt.ylabel('Scores')plt.title('Scoresbygroupandgender')#设置X轴刻度plt.xticks(ind,('G1','G2','G3','G4','G5'))#设置y轴刻度plt.yticks(np.arange(0,81,10))#显示图例plt.legend()plt.show()12345678910111213141516171819202122232425这些代码示例展示了如何使用matplotlib绘制常见的图形。您可以根据需要调整数据和图形属性来定制您的图表。每个图形类型都有许多可配置的选项,例如颜色、线型、标记样式等,您可以通过查阅matplotlib的官方文档来了解更多细节。五、常用函数在matplotlib库中,有许多常用的函数用于数据可视化。以下是一些matplotlib.pyplot模块中常用的函数:函数描述使用示例plot()绘制线图plt.plot([1,2,3,4],[1,4,9,16])scatter()绘制散点图plt.scatter([1,2,3,4],[1,4,9,16])bar()绘制条形图plt.bar([1,2,3,4],[10,15,7,10])hist()绘制直方图data=np.random.randn(1000);plt.hist(data,bins=30)pie()绘制饼图plt.pie([10,20,30,40],labels=['A','B','C','D'])boxplot()绘制箱线图data=np.random.normal(100,20,200);plt.boxplot(data)imshow()显示图像image=np.random.rand(10,10);plt.imshow(image)xlabel()设置X轴标签plt.xlabel('Time')ylabel()设置Y轴标签plt.ylabel('Amplitude')title()设置图形plt.title('SamplePlot')xlim()设置X轴范围plt.xlim(0,10)ylim()设置Y轴范围plt.ylim(-1,1)xticks()设置X轴刻度plt.xticks([0,1,2,3],['zero','one','two','three'])yticks()设置Y轴刻度plt.yticks([-1,0,1],['min','zero','max'])legend()添加图例plt.plot([1,2,3],label='Line1');plt.legend()grid()添加网格线plt.grid(True)show()显示图形plt.plot([1,2,3],[1,4,9]);plt.show()savefig()保存图形plt.plot([1,2,3],[1,4,9]);plt.savefig('plot.png')请注意,上述示例代码仅为简单演示函数的使用,实际应用中可能需要根据具体需求调整参数和设置。另外,为了使示例代码简洁明了,这里没有包含数据准备和图形细节调整的部分。在实际应用中,你通常需要先准备好数据,并根据需要调整图形的各种属性(如线型、颜色、标签等)。参考Matplotlib中文网
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 13:25 , Processed in 0.445599 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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