Python怎么样绘制子图,刻度的变换方法是什么
Admin 2022-07-26 群英技术资讯 349 次浏览
先看看效果
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 = [i for i in range(len(orders))] # 第二根柱子偏移坐标 x1 = [i + 0.35 for i in range(len(orders))] # 两幅子图之间的间距 plt.subplots_adjust(wspace =0, hspace =0.4) # 选择第一幅图 figure_1 = ax[0] # 设置x轴偏移和标签 figure_1.set_xticks([i+0.15 for i in x]) 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.15 for i in x]) 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")。
from numpy import * import matplotlib.pyplot as plt x = linspace(0, 2 * pi, 50) plt.plot(sin(x)) plt.xlabel('x-label') plt.ylabel('y-label', fontsize='large') plt.title('title')
以下先将整体代码插入,再分布讲解:
import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator, FormatStrFormatter def minmax_value(list1): minvalue=min(list1) maxvalue=max(list1) return minvalue,maxvalue plt.figure(figsize=(16,14),dpi=98) xmajorLocator = MultipleLocator(1) #将x主刻度标签设置为1的倍数 plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus'] = False p1 = plt.subplot(121) p2 = plt.subplot(122) #图中展示点的数量 pointcount=5 x=[i for i in range(20)] print(x) y1=[i**2 for i in range(20)] y2=[i*4 for i in range(20)] y3=[i*3+2 for i in range(20)] y4=[i*4 for i in range(20)] for i in range(len(x)-1): if i<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"]) elif i>=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、导入库
import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator, FormatStrFormatter
2、由于绘图过程中多次使用获取最大最小值,将获取最大最小值写入函数,后面直接调用函数即可。
def minmax_value(list1): minvalue=min(list1) maxvalue=max(list1) return minvalue,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'] = False p1 = plt.subplot(121)p2 = plt.subplot(122)
4、当数据量过多时,对数据一次性展示不能够达到对数据内部信息的解读。本例采用一次展示其中一部分数据,并动态的更新图片,于此同时,动态更新横纵坐标轴的取值范围。下面代码首先设置了每次展示点的数量,并获取了主题一中的所有数据值。根据x取值范围和值域y获取当前绘图过程中的横纵坐标取值范围,最后根据x,y的值进行绘图。
下面将先在一个子图上显示两条静态折现。当使用动态的折线图时,只需动态更新数据和横纵坐标的取值范围。总体代码中已经写出,下面不再赘述。
#图中展示点的数量 pointcount=5 x=[i for i in range(20)] y1=[i**2 for i in range(20)] y2=[i*4 for i in range(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)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家介绍了Python的模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
这篇文章主要为大家详细介绍了python双向链表实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
今天看了open函数,看到w+ r+ a+ 这种可读可写的操作,下面这篇文章主要给大家介绍了关于python使用open函数对文件进行处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
这篇文章主要为大家介绍了Python全栈之线程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
这篇文章主要为大家介绍了对比分析BN和dropout在预测和训练时区别,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008