1.初始化导入库并生成测试数据
本文将使用matplotlib进行折线图绘制,以下是导入库和生成测试数据操作。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif'] = ['fangsong']
plt.rcParams['font.size'] = 12
plt.rcParams['axes.unicode_minus'] = False
date1=pd.date_range('2022/2/5',periods=365)
xx1=np.random.randn(365)
xx=np.array([i/10 for i in range(1,366)])
v1=np.sin(xx)+xx1
v2=np.cos(xx)*2+xx1
v3=xx*3/5+xx1
v4=xx*6/5+xx1
fake=pd.DataFrame({'date':date1,'woxue':v1,'shufen':v2,'youyuan':v3,'duo':v4})
2.折线图
2.1plt.plot()函数参数介绍
x,y:用于绘制横轴纵轴的数据或者名称
fmt:绘制类别,包括点型-线型-颜色
data:数据
其他常用参数(Line2D):
alpha:透明度,标量
color or c:颜色
绘图类型 or ds:{'default', 'steps', 'steps-pre', 'steps-mid', 'steps-post'}, default: 'default'
标志点颜色填充类型 fillstyle:{'full', 'left', 'right', 'bottom', 'top', 'none'}
in_layout:bool
label:标签形式
线型 or ls:{'-', '--', '-.', ':', '', (offset, on-off-seq), ...}
线宽 or lw:浮点型
marker:标志形式
标志点边缘颜色 or mec:颜色
标志点边缘宽度 or mew:浮点数
标志点颜色 or mfc:颜色
标志点可选颜色 or mfcalt:颜色
标志点大小 or ms:浮点型
2.2使用测试数据进行绘图
2.2.1绘制方式
fake1=fake.iloc[:50,]
fake1.head()
date | woxue | shufen | youyuan | duo | |
---|---|---|---|---|---|
0 | 2022-02-05 | 0.284147 | 2.174322 | 0.244314 | 0.304314 |
1 | 2022-02-06 | 2.220938 | 3.982402 | 2.142269 | 2.262269 |
2 | 2022-02-07 | 1.085193 | 2.700345 | 0.969672 | 1.149672 |
3 | 2022-02-08 | -0.348040 | 1.104664 | -0.497458 | -0.257458 |
4 | 2022-02-09 | 1.033683 | 2.309422 | 0.854257 | 1.154257 |
折线图有三种绘制方式,在只输入一个参数的时候,表示绘制[1,len(fake['woxue'])]与fake1['woxue']的折线图。
plt.plot(fake1['woxue'])
[<matplotlib.lines.Line2D at 0x22641c97130>]
另两种绘制方式如下图所示:
fig,ax=plt.subplots(1,2,figsize=(20,6))
ax[0].plot(fake1['date'],fake1['woxue'])
ax[0].set_title("plot(fake1['date'],fake1['woxue'])")
ax[1].plot('date','woxue',data=fake1)
ax[1].set_title("plot('date','woxue',data=fake1)")
plt.show()
2.2.2折线线条设置
2.2.2.1线型
线型主要为四种,分别是点虚线,虚线,点划线和实线,以下是图片展示了四种线型的图片。
fig,ax=plt.subplots(2,2,figsize=(20,12))
ax[0][0].plot(fake1['date'],fake1['woxue'],ls=':')
ax[0][0].set_title('点线')
ax[0][1].plot(fake1['date'],fake1['woxue'],ls='-.')
ax[0][1].set_title('点划线')
ax[1][0].plot(fake1['date'],fake1['woxue'],ls='--')
ax[1][0].set_title('虚线')
ax[1][1].plot(fake1['date'],fake1['woxue'],ls='-')
ax[1][1].set_title('实线')
plt.show()
2.2.2.2线宽
使用lw参数调整线宽。
plt.figure(figsize=(10,5))
plt.plot(fake1['date'],fake1['woxue'],ls='-',lw=5)
plt.show()
2.2.2.3线条颜色
plt.figure(figsize=(10,5))
plt.plot(fake1['date'],fake1['woxue'],ls='-',c='orange')
plt.show()
2.2.3折线标志点设置
2.2.3.1设置标志点
plt.figure(figsize=(10,6))
plt.plot(fake1['date'],fake1['woxue'],marker='o')
plt.show()
2.2.3.2标志点设置边缘颜色
plt.figure(figsize=(10,6))
plt.plot(fake1['date'],fake1['woxue'],marker='o',mec='black')
plt.show()
2.2.3.3改换标志点填充颜色
plt.figure(figsize=(10,6))
plt.plot(fake1['date'],fake1['woxue'],marker='o',mec='black',mfc='red')
plt.show()
2.2.3.4设置标志点大小
plt.figure(figsize=(10,6))
plt.plot(fake1['date'],fake1['woxue'],marker='o',mec='black',mfc='red',ms=10)
plt.show()
2.2.3.5标志点填充类型
fig,ax1=plt.subplots(2,2,figsize=(20,12))
ax1[0][0].plot(fake1['date'],fake1['woxue'],marker='o',mec='black',mfc='red',fillstyle='left',ms=10)
ax1[0][0].set_title("fillstyle='left'")
ax1[0][1].plot(fake1['date'],fake1['woxue'],marker='o',mec='black',mfc='red',fillstyle='right',ms=10)
ax1[0][1].set_title("fillstyle='right'")
ax1[1][1].plot(fake1['date'],fake1['woxue'],marker='o',mec='black',mfc='red',fillstyle='bottom',ms=10)
ax1[1][1].set_title("fillstyle='bottom'")
ax1[1][0].plot(fake1['date'],fake1['woxue'],marker='o',mec='black',mfc='red',fillstyle='top',ms=10)
ax1[1][0].set_title("fillstyle='top'")
plt.show()
2.2.3.6标志点填充可选颜色
plt.figure(figsize=(10,6))
plt.plot(fake1['date'],fake1['woxue'],marker='o',mec='black',mfc='red',fillstyle='right',ms=10,mfcalt='green')
plt.show()
2.2.4透明度
设置alpha将同时改变线条颜色和标志点颜色的透明度。
plt.figure(figsize=(10,6))
plt.plot(fake1['date'],fake1['woxue'],marker='o',mec='black',mfc='red',fillstyle='right',ms=10,mfcalt='green',c='darkred',alpha=0.5)
plt.show()
2.3进阶绘制
2.3.1多条曲线对比
将条线条添加到同一个画布中,如果不设置线型和颜色,会自动变换颜色,添加label,可以用于生成图例。
plt.figure(figsize=(16,6))
plt.plot(fake1['date'],fake1['woxue'],c='red',label='woxue',marker='o',ls='--')
plt.plot(fake1['date'],fake1['shufen'],c='blue',label='shufen',marker='*',ls=':')
plt.plot(fake1['date'],fake1['youyuan'],c='green',label='youyuan',marker='<',ls='-.')
plt.legend()
plt.grid()
plt.show()
以下是分层聚合折线图,可以看各个折线的平均水平对比。
plt.figure(figsize=(16,6))
plt.plot(fake1['date'],fake1['woxue'],c='red',label='woxue',marker='o',ls='--')
plt.axhline(np.mean(fake1['woxue']),c='red')
plt.plot(fake1['date'],fake1['shufen'],c='blue',label='shufen',marker='*',ls=':')
plt.axhline(np.mean(fake1['shufen']),c='blue')
plt.plot(fake1['date'],fake1['youyuan'],c='green',label='youyuan',marker='<',ls='-.')
plt.axhline(np.mean(fake1['youyuan']),c='green')
plt.legend()
plt.grid()
plt.show()
2.3.2添加标签
添加标签,使用text函数,在每个点的位置添加标签。
plt.figure(figsize=(16,6))
plt.plot(fake1['date'],fake1['woxue'],c='pink',label='woxue',marker='o',mec='k',mfc='b')
for a,b in zip(fake1['date'],fake1['woxue']):
plt.text(a,b+0.1,str(round(b,3)))
plt.grid()
plt.show()
2.3.3阶梯图(步骤图)
阶梯图是折线图的一个变体,可以用于展现不规则时间间隔的数据变化情况。
fig,ax=plt.subplots(4,1,figsize=(16,16))
ax[0].plot(fake1['date'],fake1['woxue'],ds='steps')
ax[0].set_title('默认阶梯图steps')
ax[1].plot(fake1['date'],fake1['woxue'],ds='steps-pre')
ax[1].set_title('前阶梯图steps-pre')
ax[2].plot(fake1['date'],fake1['woxue'],ds='steps-post')
ax[2].set_title('后阶梯图steps-post')
ax[3].plot(fake1['date'],fake1['woxue'],ds='steps-mid')
ax[3].set_title('中阶梯图steps-mid')
plt.show()
以下展示了四种阶梯图。
fig,ax=plt.subplots(4,1,figsize=(16,16))
ax[0].plot(fake1['date'],fake1['woxue'],ds='steps')
ax[0].plot(fake1['date'],fake1['woxue'],c='red',label='youyuan',marker='o',ls='-',lw=1)
ax[0].set_title('默认阶梯图')
ax[1].plot(fake1['date'],fake1['woxue'],ds='steps-pre')
ax[1].plot(fake1['date'],fake1['woxue'],c='red',label='youyuan',marker='o',ls='-',lw=1)
ax[1].set_title('前阶梯图')
ax[2].plot(fake1['date'],fake1['woxue'],ds='steps-post')
ax[2].plot(fake1['date'],fake1['woxue'],c='red',label='youyuan',marker='o',ls='-',lw=1)
ax[2].set_title('后阶梯图')
ax[3].plot(fake1['date'],fake1['woxue'],ds='steps-mid')
ax[3].plot(fake1['date'],fake1['woxue'],c='red',label='youyuan',marker='o',ls='-',lw=1)
ax[3].set_title('中阶梯图')
plt.show()
下图是四种阶梯图的生成方式与折线图的对比。