效果展示
绘图过程
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
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轴范围
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轴范围
声明:非原创,侵删