小编给大家分享一下Python如何绘制子图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1、涉及到图的对比会用到子图形式展示2、绘制代码如下

accuracy_alexnet_clef=[78.05,78.43,78.65,78.61,78.69]accuracy_resnet_clef=[84.56,84.84,85.07,85.01,85.13]accuracy_alexnet_office10=[87.30,87.57,87.78,87.72,87.50]accuracy_resnet_office10=[96.31,96.35,96.62,96.43,96.15]orders=['2','3','5','10','20']names=['alexnet','resnet']#创建两幅子图f,ax=plt.subplots(2,1,figsize=(6,8))#第一根柱子偏移坐标x=[iforiinrange(len(orders))]#第二根柱子偏移坐标x1=[i+0.35foriinrange(len(orders))]#两幅子图之间的间距plt.subplots_adjust(wspace=0,hspace=0.4)#选择第一幅图figure_1=ax[0]#设置x轴偏移和标签figure_1.set_xticks([i+0.15foriinx])figure_1.set_xticklabels(orders)#设置y轴的范围figure_1.set_ylim(bottom=77,top=86)#绘制柱状图,x表示x轴内容,accuracy_alexnet_clef表示y轴的内容,alpha表示透明度,width表示柱子宽度#label表示图列figure_1.bar(x,accuracy_alexnet_clef,alpha=0.7,width=0.35,facecolor='#4c72b0',label='Alexnet')figure_1.bar(x1,accuracy_resnet_clef,alpha=0.7,width=0.35,facecolor='#dd8452',label='Resnet')figure_1.set_ylabel('Accuracy%')#设置y轴的标签figure_1.set_xlabel('Order')#设置x轴的名称figure_1.set_title('Alexnet')#设置图一标题名称figure_1.legend()#显示图一的图例#选择第二幅图figure_2=ax[1]figure_1.set_xticks([i+0.15foriinx])figure_1.set_xticklabels(orders)figure_2.set_ylim(bottom=77,top=100)figure_2.bar(x,accuracy_alexnet_office10,alpha=0.7,width=0.35,facecolor='#c44e52',label='Alexnet')figure_2.bar(x1,accuracy_resnet_office10,alpha=0.7,width=0.35,facecolor='#5f9e6e',label='Alexnet')#figure_2.bar(orders,accuracy_resnet_clef,alpha=0.7,width=0.35,facecolor='#dd8452')figure_2.set_ylabel('Accuracy%')figure_2.set_xlabel('Order')figure_2.set_title('Resnet')figure_2.legend()f.suptitle('ImageCLEF_DA')#设置总标题plt.show()

补充:python使用matplotlib在一个图形中绘制多个子图以及一个子图中绘制多条动态折线问题

在讲解绘制多个子图之前先简单了解一下使用matplotlib绘制一个图,导入绘图所需库matplotlib并创建一个等间隔的列表x,将[0,2*pi]等分为50等份,绘制函数sin(x)。当没有给定x轴数值时,默认以下标作为x的值,如果x值确定,则绘图时写为plt.plot(x,y) 。

如若想要绘制一个图时写入标签,则写为plt.plot(x,y,label="figure1")。

fromnumpyimport*importmatplotlib.pyplotaspltx=linspace(0,2*pi,50)plt.plot(sin(x))plt.xlabel('x-label')plt.ylabel('y-label',fontsize='large')plt.title('title')

以下先将整体代码插入,再分布讲解:

importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.tickerimportMultipleLocator,FormatStrFormatterdefminmax_value(list1):minvalue=min(list1)maxvalue=max(list1)returnminvalue,maxvalueplt.figure(figsize=(16,14),dpi=98)xmajorLocator=MultipleLocator(1)#将x主刻度标签设置为1的倍数plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsep1=plt.subplot(121)p2=plt.subplot(122)#图中展示点的数量pointcount=5x=[iforiinrange(20)]print(x)y1=[i**2foriinrange(20)]y2=[i*4foriinrange(20)]y3=[i*3+2foriinrange(20)]y4=[i*4foriinrange(20)]foriinrange(len(x)-1):ifi<pointcount:minx,maxx=minmax_value(x[:pointcount])minx,maxx=minmax_value(x[:pointcount])minyA,maxyA=minmax_value(y1[:pointcount])minyB,maxyB=minmax_value(y2[:pointcount])maxy1=max(maxyA,maxyB)miny1=min(minyA,minyB)p1.axis([minx,maxx,miny1,maxy1])p1.grid(True)A,=p1.plot(x[:pointcount],y1[:pointcount],"g-")B,=p1.plot(x[:pointcount],y2[:pointcount],"b-")#设置主刻度标签的位置,标签文本的格式p1.xaxis.set_major_locator(xmajorLocator)legend=p1.legend(handles=[A,B],labels=["图1","图2"])minx,maxx=minmax_value(x[:pointcount])minx,maxx=minmax_value(x[:pointcount])minyA,maxyA=minmax_value(y3[:pointcount])minyB,maxyB=minmax_value(y4[:pointcount])maxy1=max(maxyA,maxyB)miny1=min(minyA,minyB)p2.axis([minx,maxx,miny1,maxy1])p2.grid(True)A,=p2.plot(x[:pointcount],y3[:pointcount],"r-")B,=p2.plot(x[:pointcount],y4[:pointcount],"y-")#设置主刻度标签的位置,标签文本的格式p2.xaxis.set_major_locator(xmajorLocator)legend=p2.legend(handles=[A,B],labels=["图3","图4"])elifi>=pointcount:minx,maxx=minmax_value(x[i-pointcount:i])minx,maxx=minmax_value(x[i-pointcount:i])minyA,maxyA=minmax_value(y1[i-pointcount:i])minyB,maxyB=minmax_value(y2[i-pointcount:i])maxy1=max(maxyA,maxyB)miny1=min(minyA,minyB)p1.axis([minx,maxx,miny1,maxy1])p1.grid(True)A,=p1.plot(x[i-pointcount:i],y1[i-pointcount:i],"g-")B,=p1.plot(x[i-pointcount:i],y2[i-pointcount:i],"b-")#设置主刻度标签的位置,标签文本的格式p1.xaxis.set_major_locator(xmajorLocator)legend=p1.legend(handles=[A,B],labels=["图1","图2"])minx,maxx=minmax_value(x[i-pointcount:i])minx,maxx=minmax_value(x[i-pointcount:i])minyA,maxyA=minmax_value(y3[i-pointcount:i])minyB,maxyB=minmax_value(y4[i-pointcount:i])maxy1=max(maxyA,maxyB)miny1=min(minyA,minyB)p2.axis([minx,maxx,miny1,maxy1])p2.grid(True)A,=p2.plot(x[i-pointcount:i],y3[i-pointcount:i],"r-")B,=p2.plot(x[i-pointcount:i],y4[i-pointcount:i],"y-")#设置主刻度标签的位置,标签文本的格式p2.xaxis.set_major_locator(xmajorLocator)legend=p2.legend(handles=[A,B],labels=["图3","图4"])p1.set_xlabel("横轴属性名一",fontsize=14)p1.set_ylabel("纵轴属性名一",fontsize=14)p1.set_title("主题一",fontsize=18)p2.set_xlabel("横轴属性名二",fontsize=14)p2.set_ylabel("纵轴属性名二",fontsize=14)p2.set_title("主题二",fontsize=18)plt.pause(0.3)plt.tight_layout(pad=4,w_pad=4.0,h_pad=3.0)

运行结果为:

1、导入库

importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.tickerimportMultipleLocator,FormatStrFormatter

2、由于绘图过程中多次使用获取最大最小值,将获取最大最小值写入函数,后面直接调用函数即可。

defminmax_value(list1):minvalue=min(list1)maxvalue=max(list1)returnminvalue,maxvalue

3、

(1)创建自定义图像,并设置figured的长和宽以及dpi参数指定绘图对象的分辨率;

(2)设置x轴刻度的间隔;

(3)对本次绘图中的字体进行设置;

(4)在matplotlib下,一个figure对象可以包含多个子图(Axes),使用subplot()快速绘制。

plt.figure(figsize=(16,14),dpi=98)xmajorLocator=MultipleLocator(1)plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsep1=plt.subplot(121)p2=plt.subplot(122)

4、当数据量过多时,对数据一次性展示不能够达到对数据内部信息的解读。本例采用一次展示其中一部分数据,并动态的更新图片,于此同时,动态更新横纵坐标轴的取值范围。下面代码首先设置了每次展示点的数量,并获取了主题一中的所有数据值。根据x取值范围和值域y获取当前绘图过程中的横纵坐标取值范围,最后根据x,y的值进行绘图。

下面将先在一个子图上显示两条静态折现。当使用动态的折线图时,只需动态更新数据和横纵坐标的取值范围。总体代码中已经写出,下面不再赘述。

#图中展示点的数量pointcount=5x=[iforiinrange(20)]y1=[i**2foriinrange(20)]y2=[i*4foriinrange(20)]minx,maxx=minmax_value(x[:pointcount])minyA,maxyA=minmax_value(y1[:pointcount])minyB,maxyB=minmax_value(y2[:pointcount])maxy1=max(maxyA,maxyB)miny1=min(minyA,minyB)p1.axis([minx,maxx,miny1,maxy1])p1.grid(True)#绘图过程中出现的网格设置A,=p1.plot(x[:pointcount],y1[:pointcount],"g-")B,=p1.plot(x[:pointcount],y2[:pointcount],"b-")#设置主刻度标签的位置,标签文本的格式p1.xaxis.set_major_locator(xmajorLocator)legend=p1.legend(handles=[A,B],labels=["图1","图2"])

5、设置边界,不设置边界经常会因为横纵轴的字体太大等其他原因导致横纵轴或者标题只能显示其中一部分。

plt.tight_layout(pad=4,w_pad=4.0,h_pad=3.0)

以上是“Python如何绘制子图”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!