当前位置:网站首页>How does Matplotlib generate multiple pictures in turn & only save these pictures without displaying them in the compiler

How does Matplotlib generate multiple pictures in turn & only save these pictures without displaying them in the compiler

2022-07-08 01:26:00 Bosong

Catalog

1. Introduction to import library

2. Image generation code introduction


1. Introduction to import library

import os
import inspect
import pandas as pd
import numpy as np
from datetime import datetime

#  stay jupyter notebook Display image in 
import matplotlib.pyplot as plt
%matplotlib inline

#  Show Chinese in the picture 、 Minus sign, etc 
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

import matplotlib
#  stay Python The generated image is not displayed in 
matplotlib.use('Agg')

Before the first part 5 Libraries involve data processing , The second part jupyter notebook Specific settings , The third part is about Chinese drawing names 、 Display of legend and minus sign , The fourth part focuses on the generated multiple pictures 、 Not displayed in the compiler .

2. Image generation code introduction

#  Variable initialization settings 
emer_sort = pd.DataFrame(columns = ['STARTTIME','WEEK','TIME','MINUTE','BELONGEDLINE','STATIONNAMES'])

#  Classify according to a column of data 
emer_stagroup = emer.groupby('STATIONNAMES')

#  Count effective data days k, Prepare for drawing multiple subgraphs 
k = 0
for sta_name, sta_group in emer_stagroup:
    #  according to STARTTIME Column sorting 
    emer1 = sta_group.sort_values(by = 'STARTTIME')
    emer_timegroup = emer1.groupby('TIME')
    for time_name, time_group in emer_timegroup:
        #  Select a date with sufficient sample size TIME - 5min Spaced samples ,192 yes 16 Hours 
        if time_group.shape[0] < 192:
            continue
        else:
            #  Add all sample points for a day 
            emer_sort = emer_sort.append(time_group)
            
            k = k + 1
            #  longitudinal 、 Horizontal axis data 
            time_group_flow = time_group['FLOW']
            time_group_minute = time_group['MINUTE'].to_list()

            fig, ax = plt.subplots(figsize = (10, 7))
            #  Axis scale font settings 
            plt.tick_params(labelsize=13)
            ax.plot(time_group_flow.values)
            #  Axis title settings 
            ax.set_xlabel('Date-time', fontsize=14)
            ax.set_ylabel('Flow', fontsize=14)
            #  Title Setting 
            ax.set_title(time_group['STATIONNAMES'].values[0], fontsize=14)
            #  Abscissa scale setting  -  How to display the date 
            dates = pd.to_datetime(time_group['MINUTE'])
            dates = dates.apply(lambda d: d.strftime('%H:%M'))
            ax.set_xticks(np.arange(len(dates))[12::24])
            #  Abscissa scale from 12 The number begins 、 every other 24 The number shows , tilt 45°
            _ = ax.set_xticklabels(dates[12::24], rotation=45)
            #  Storage 
            plt.savefig('./fig/fig_lots/flow_%s.png'%k, dpi=200)
            
#  Reset dataframe The line of label , and drop The previous label 
emer_sort_set = emer_sort.reset_index(drop = True)

If the program reports an error “Out of bounds Datetime: Out of bounds nanosecond timestamp: ...”, And point to this line of code  dates = pd.to_datetime(time_group['MINUTE']), The current solution is to Comment out this line and the following line .( The question is Another article Some discussion , But there is no conclusion >_<)

Welcome to exchange and discuss ~

原网站

版权声明
本文为[Bosong]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202130542271704.html