一、为什么要写这个代码
很多时候画散点的折线图时,总是忘记代码细节怎么写,于是就想不如花点时间写几个函数,把画图的功能封装一下,下次画图这部分代码就能与其他代码隔离开来。使用者无需过多关注内部细节,只用关心数据是什么就ok
注:如果想自己改造函数的内部也是非常简单的,需要改造的部分旁都标注了这部分函数参数的参考链接。
二、画折线图的几个函数
看代码,一看就知道在写什么
#参考
# https://zhuanlan.zhihu.com/p/234740372
#https://blog.csdn.net/daybreak___/article/details/107752519
import numpy as np # 加载数学库用于函数描述
import matplotlib #用 matplotlib 来进行 python 画图
import matplotlib.pyplot as plt
from matplotlib import style
#初始化折线图
def initLineChart(title="折线图标题",xlabel='x轴标签',ylabel='y轴标签'):
style.use('ggplot') # 折线图风格 默认加载'ggplot'风格
plt.title(str(title)) # 折线图标题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示汉字
plt.xlabel(str(xlabel)) # x轴标题
plt.ylabel(str(ylabel)) # y轴标题
pass
#折线图中的一条线
def drawLineChart(x,y,inter=1,marker='o',markersize=3):
if len(x) != len(y):
print("输入的x,y长度不匹配")
return False
#对x,y进行等间隔采样,采样间隔为inter
x = x[0:len(x):inter]
y = y[0:len(y):inter]
# 绘制折线图,添加数据点,设置 点的性质marker, 点的大小 makersize
line = plt.plot(x, y, marker=marker, markersize=markersize)
# plt.text()函数用于设置文字说明 设置数据点的标签位置及大小
#具体设置参考参考 : https://blog.csdn.net/TeFuirnever/article/details/88947248
# 坐标(a,b)
# string为坐标的文字说明
# ha horizontalalignment是水平对齐方式 ,参数:[ ‘center’ | ‘right’ | ‘left’ ]
#va verticalalignment是垂直对齐方式 ,参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ]
#xycoords选择指定的坐标轴系统
#arrowprops #箭头参数,参数类型为字典dict
#bbox给标题增加外框
for a, b in zip(x, y):
plt.text(a, b, s=b, ha='center', va='bottom', fontsize=10)
return line
#创建图例 plt.legend()
# 参考:https://zhuanlan.zhihu.com/p/111108841
#eg:plt.legend(handles=[line1, line2], labels=['girl购物欲望','boy购物欲望'], loc='best')
def make_LineChart_Show(lines,labels):
plt.legend(handles=lines,labels=labels, loc='best')
plt.show() # 显示折线图
pass
三、封装后的使用
x = [6, 24, 48, 72]
y1 = [87, 174, 225, 254]
y2 = [24, 97, 202, 225]
y3 = [110, 138, 177, 205]
y4 = [95, 68, 83, 105]
y5 = [72, 74, 76, 67]
initLineChart()
line1, = drawLineChart(x,y1) #这里一定要加这个,
line2, = drawLineChart(x,y2)
line3, = drawLineChart(x,y3)
line4, = drawLineChart(x,y4)
line5, = drawLineChart(x,y5)
make_LineChart_Show([line1,line2,line3,line4,line5],['标签一', '标签二', '标签三', '标签四', '标签五'])
实际效果如下:
补充
1.如何对一个list进行等间隔采样——使用切片即可
list = [1,2,3,4,5,6]
n = len(list)
inter = 2 # 间隔
list_2 = list[0:n:inter]