淘先锋技术网

首页 1 2 3 4 5 6 7

效果展示

d57adba7ecc049a1330bd94b747ffe04.png

绘图过程

1、导入相关的包

import pandas as pdimport randomimport matplotlib.pyplot as pltimport seaborn as snsimport matplotlib.ticker as ticker# 解决中文不显示的问题from pylab import mplmpl.rcParams['font.sans-serif']=['SimHei']# 解决正负号不显示问题plt.rcParams['axes.unicode_minus']=False 

2、生成随机数据

        本文为了更加切合实际,模拟生成了2020-01-01至2020-01-05两个城市a、b的温度数据,时间间隔是1小时。(代码中有一些时间生成、时间格式转换、随机数生成的知识,小白可以借此多多学习一下;数据是随机的,每次运行的图像会不一样噢)

def get_date_list(begin_date,end_date):    '''        功能:生成指定时间段的时间列表,间隔为1小时,返回的是str格式    '''    date_list = [x.strftime('%Y-%m-%d %H:%M:%S') for x in list(pd.date_range(start=begin_date, end=end_date,freq='H'))]        return date_listdate_list = get_date_list('2020-01-01','2020-01-5')y1 = [round(random.uniform(10,20),2) for _ in range(len(date_list))] #随机生成len(date_list)个温度值,是浮点数,并通过round保留两位小数点y2 = [random.randint(13,15) for _ in range(len(date_list))] #随机生成len(date_list)个温度值,是整数df = pd.DataFrame([date_list,y1,y2]).T #转换成一个DataFrame()df.columns=['time','a','b'] # 设置columns

28498f1f3dd5b1a41312d5ccbcd3ab6b.png

3、绘图

def get_date_list(begin_date,end_date):    '''        功能:生成指定时间段的时间列表,间隔为1小时,返回的是str格式    '''    date_list = [x.strftime('%Y-%m-%d %H:%M:%S') for x in list(pd.date_range(start=begin_date, end=end_date,freq='H'))]        return date_listdate_list = get_date_list('2020-01-01','2020-01-5')y1 = [round(random.uniform(10,20),2) for _ in range(len(date_list))] #随机生成len(date_list)个温度值,是浮点数,并通过round保留两位小数点y2 = [random.randint(13,15) for _ in range(len(date_list))] #随机生成len(date_list)个温度值,是整数df = pd.DataFrame([date_list,y1,y2]).T #转换成一个DataFrame()df.columns=['time','a','b'] # 设置columns# 绘图fig, ax = plt.subplots(1,1,figsize = (10,6),dpi=200) # 设置画布大小和精度    ax.plot(df['time'],df['a'],color='k',lw=1,ls=':') #设置第一条线的格式ax.plot(df['time'],df['b'],color='k',lw=1,ls='-') #设置第二条线的格式# 按指定格式填充颜色ax.fill_between(df['time'],df['a'].tolist(),df['b'].tolist(),where=df['a']>=df['b'],interpolate=False, facecolor='cornflowerblue',alpha=0.8) # a>=bax.fill_between(df['time'],df['a'].tolist(),df['b'].tolist(), where=df['a']'b'],interpolate=ax.grid(ls=':',lw=1,color='gray',alpha=0.5) #设置网格线格式ax.set_ylim(5,30) # 设置子图Y轴范围

50d22f556298ebe536df98b30d04ee5f.png

4、设置x轴时间间隔显示

        上图存在一个问题,即x轴标签显示很密集,这个很不美观,故需要调整时间间隔显示,调整的代码如下:

def get_date_list(begin_date,end_date):    '''        功能:生成指定时间段的时间列表,间隔为1小时,返回的是str格式    '''    date_list = [x.strftime('%Y-%m-%d %H:%M:%S') for x in list(pd.date_range(start=begin_date, end=end_date,freq='H'))]        return date_listdate_list = get_date_list('2020-01-01','2020-01-5')y1 = [round(random.uniform(10,20),2) for _ in range(len(date_list))] #随机生成len(date_list)个温度值,是浮点数,并通过round保留两位小数点y2 = [random.randint(13,15) for _ in range(len(date_list))] #随机生成len(date_list)个温度值,是整数df = pd.DataFrame([date_list,y1,y2]).T #转换成一个DataFrame()df.columns=['time','a','b'] # 设置columns# 绘图fig, ax = plt.subplots(1,1,figsize = (10,6),dpi=200) # 设置画布大小和精度# 设置x轴刻度间隔ticker_spacing = date_listticker_spacing = 10 # 主要设置的参数ax.xaxis.set_major_locator(ticker.MultipleLocator(ticker_spacing))plt.xticks(rotation = 45) # 设置x轴刻度名称倾斜45度    ax.plot(df['time'],df['a'],color='k',lw=1,ls=':') #设置第一条线的格式ax.plot(df['time'],df['b'],color='k',lw=1,ls='-') #设置第二条线的格式# 按指定格式填充颜色ax.fill_between(df['time'],df['a'].tolist(),df['b'].tolist(),where=df['a']>=df['b'],interpolate=False, facecolor='cornflowerblue',alpha=0.8) # a>=bax.fill_between(df['time'],df['a'].tolist(),df['b'].tolist(), where=df['a']'b'],interpolate=ax.grid(ls=':',lw=1,color='gray',alpha=0.5) #设置网格线格式ax.set_ylim(5,30) # 设置子图Y轴范围

d57adba7ecc049a1330bd94b747ffe04.png

声明:非原创,侵删