python绘制双Y轴折线图以及单Y轴双变量柱状图的实例

  

近来实验室的师姐要发论文,由于论文交稿时间临近,有一些杂活儿需要处理,作为实验室资历最浅的一批,我这个实习生也就责无旁贷地帮忙当个下手。今天师姐派了一个小活,具体要求的是:

  

给一些训练模型的迭代次数,训练精度的数据,让我做成图表形式展示出来,一方面帮助检查模型训练时的不足,另一方面来看样本数目和预测精度之间的联系,数据具体格式如下:
  

        迭代1500      标签对acc训练测试      12 143 24 24 1.0      160 92 16 15 0.9375      100年12 2 0 0.0      142 0 0 0 0.0      152 0 0 0 0.0      110年10 2 0 0.0      170年12 2 2 1.0      42 421 70 63 0.9      31日43 8 5 0.625      22 132 22 18 0.818181818182      60 51 9 8 0.888888888889      51 916 153 143 0.934640522876      131 82 14 11 0.785714285714点      53 84 14 10 0.714285714286      70年9 2 2 1.0      21 531 89 89 1.0      120年1 1 1 1.0      11 454 76 71 0.934210526316      90年1 1 1 1.0      32 39 7 6 0.857142857143      41 151 25 14 0.56      132 0 0 0 0.0      151年43 7 6 0.857142857143      43 8 2 1 0.5      80 7 2 1 0.5点      141 1.0 96 16 16      44 67 12 2 0.166666666667      右:509准确性:0.883680555556   之前      

我的任务就是以标签为自变量,绘制出它和训练及acc之间的关系。

  

接到这个任务后,最直观的感受就是常规的洗数据,于是我先把这些数据放在txt文件中存储下来,由于每个数据之间的间隔大于一个空格,我想当然地写个正则匹配脚本将数据间的大空格转换为一个逗号(转换为逗号的目的是这样可以直接转换为CSV表格文件,然而在本次任务中貌似意义不大…。)
  

        # * * * * * * * * * * * * * * * * * * * * * * Python 3.6.1 * * * * * * * * * * * * * * * * * * * * * * * * * * * #   # *将txt文本数据中的过长的空格更为一个逗号* #   # * * * * * * * * * * * * * * * * *作者LQ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #   # * * * * * * * * * * * * * * * * * * * * * * 2018/4/4 * * * * * * * * * * * * * * * * * * * * * * * * * * * * #      # !/usr/bin/python   # - * -编码:utf - 8 - *   进口再保险   进口操作系统os #模块与文本操作直接相关的模块   # * * * * * * * * *下面三句代码作用不详,就是为了防止出现编码问题* * * * * * * * *   进口importlib   导入系统   importlib.reload(系统)   # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *   模式=' \ s + ' #匹配出文本中的长空格   类清洁:   #初始化   def __init__(自我):   os.chdir (' D: \ \ \ \ Machine_Learning \ \学习实习\ \师姐论文实验”)#改变工作目录到txt文件对应的目录   自我。内容=开放(“acc-onlyRealImage-Iter2500.txt”)      def grab_content(自我):   行=self.content.readline ()   pre=re.compile(模式)   而行:   line_1=pre.sub(', ',线)#将文本的长空格转换为逗号后,利于转成CSV格式,然后标签按照升序排列   self.Write_content (line_1)   行=self.content.readline ()      def Write_content(自我,line_1):   路径=' acc-onlyRealImage-Iter2500-after.txt '   f=开放(路径,“a”)   f.write (' \ n ' + line_1)      def运行(自我):   self.grab_content ()         if __name__==癬_main__”:   清洁=清洁()   cleaner.run ()   之前      

数据清洗完成后,自然就是绘图了,逛了一些博客后,着手写个脚本,第一版是绘制出标签和火车及acc的双Y轴折线图,脚本较为简单,就是调用别人造的轮子,直接附上代码:

        # * * * * * * * * * * * * * * * * * * * * * * Python 3.6.1 * * * * * * * * * * * * * * * * * * * * * * * * * * * #   # *绘制出双Y轴折线图* #   # * * * * * * * * * * * * * * * * *作者LQ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #   # * * * * * * * * * * * * * * * * * * * * * * 2018/4/4 * * * * * * * * * * * * * * * * * * * * * * * * * * * * #      # !/usr/bin/python   # - * -编码:utf - 8 - *   进口再保险   进口操作系统os #模块与文本操作直接相关的模块   进口matplotlib。pyplot作为plt   进口numpy np   # * * * * * * * * *下面三句代码作用不详,就是为了防止出现编码问题* * * * * * * * *   进口importlib   导入系统   importlib.reload(系统)   # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *   font2={“家庭”:“Times New Roman”,   “体重”:“正常”,   “大小”:18日   }      类图:   #初始化   def __init__(自我):   os.chdir (' D: \ \ \ \ Machine_Learning \ \学习实习\ \师姐论文实验”)#改变工作目录到指定文件目录   自我。内容=开放(“acc-onlyRealImage-Iter2200-after.txt”)   自我。content1=开放(“acc-onlyRealImage-Iter2500-after.txt”)      def grab_content(自我):   行=self.content.readlines ()   lines_1=self.content1.readlines ()   x_1=[line.strip () .split(" ")[0]行线)#字段以逗号分隔,这里取得是第4列   y_train_1=[line.strip () .split(" ")[1]行线)   y_train_2=[line.strip () .split(" ")[1]在lines_1]   y_acc_1=[line.strip () .split(" ")[4]行线)   y_acc_2=[line.strip () .split(" ")[4]在lines_1]   x=列表(范围(len (x_1)))   y_acc=[]   y_acc1=[]   y_train=[]   y_train1=[]   因为我在范围(len (y_acc_1)):   y_acc.append(浮动(y_acc_1[我]))   y_acc1.append(浮动(y_acc_2[我]))   y_train.append (int (y_train_1[我]))   y_train1.append (int (y_train_2[我]))      # plt。xticks (x, x_1、旋转=0)   无花果,left_axis=plt.subplots ()      p1,=left_axis。情节(x, y_train, ro -)   right_axis=left_axis.twinx ()   p2,=right_axis。情节(x, y_acc bo -)   plt。xticks (x, x_1、旋转=0)#设置x轴的显示形式      #设置左坐标轴以及右坐标轴的范围,精度   left_axis.set_ylim (0, 1201)   left_axis.set_yticks (np.arange (0, 1201, 200))   right_axis.set_ylim (0, - 1.01)   right_axis.set_yticks (np.arange (0、1.01、0.20))      #设置坐标及标题的大小,颜色   left_axis.set_title (RealAndSimulation-Iter6600, font2)   left_axis.set_xlabel(“标签”,font2)   left_axis。set_ylabel(训练集的数量,font2,颜色=' r ')   left_axis。tick_params (=y轴、颜色=' r ')   right_axis.set_ylabel(“准确性”,font2,颜色=' b ')   right_axis。tick_params (=y轴、颜色=' b ')   plt.show ()      def运行(自我):   self.grab_content ()      if __name__==癬_main__”:   画=图()   Drawing.run ()   

python绘制双Y轴折线图以及单Y轴双变量柱状图的实例