对于时间序列数据而言,一般都会使用折线图反映数据背后的趋势。通常折线图的横坐标指代日期数据,纵坐标代表某个数值型变量,当然还可以使用第三个离散变量对折线图进行分组处理。接下来仅使用Python中的matplotlib模块和pandas模块实现折线图的绘制。尽管seaborn模块中的tsplot函数也可以绘制时间序列的折线图,但是该函数非常不合理,故不进行介绍。
1.matplotlib模块
折线图的绘制可以使用matplotlib模块中的plot函数实现。关于该函数的语法和参数含义如下:
plt.plot(x, y, linestyle, linewidth, color, marker,
markersize, markeredgecolor, markerfactcolor,
markeredgewidth, label, alpha)
- x:指定折线图的x轴数据。
- y:指定折线图的y轴数据。
- linestyle:指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认为实线。
- linewidth:指定折线的宽度。
- marker:可以为折线图添加点,该参数是设置点的形状。
- markersize:设置点的大小。
- markeredgecolor:设置点的边框色。
- markerfactcolor:设置点的填充色。
- markeredgewidth:设置点的边框宽度。
- label:为折线图添加标签,类似于图例的作用。
例题一
import numpy as np # 大数据三剑客:numpy pandas matplotlab
import matplotlib.pyplot as plt ## 本次课程,最核心的库,之前的图都在这里
data = np.array([2,4,1,5,6,2]) #定义一个numpy格式的数据,也是pandas库中Serise格式
#画图的一维数据 用列表,元组也是可以的
fig = plt.figure(figsize=(10,4)) #定义一个画框
ax = fig.add_subplot(121) #在画框上定义画轴 一行二列的画,位置是1
ax.plot(data)
bx = fig.add_subplot(122) #在画框上定义画轴 一行二列的画,位置是2
bx.plot(data)
plt.show()
例题二
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #为系统定义中文字体
x = ['9时','10时','11时','12时','13时','14时','15时','16时','17时','18时','19时','20时']
y=[5,6,7,8,8,8,8,7,7,6,5,4]
plt.plot(x,y)
plt.show()
例题三
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #为系统定义中文字体
x = ['9时','10时','11时','12时','13时','14时','15时','16时','17时','18时','19时','20时']
y=[5,6,7,8,8,8,8,7,7,6,5,4]
x2 =['a','b','c']
y2=[12,15,13]
plt.plot(x,y,x2,y2)
plt.show()
例题四
import numpy as np
import matplotlib.pyplot as plt
plt.plot([[1,2,1],[3,2,3],[5,4,6]])
plt.show()
例题五
import numpy as np
import matplotlib.pyplot as plt
x = ['3月1','3月2','3月3','3月4','3月5','3月6','3月7','3月8']
ly=[1,-1,0,9,7,3,3,5]
hy=[8,13,16,18,15,11,16,15]
plt.plot(x,ly,linestyle='--',marker="*") # P81是颜色 P85是线形 P87是标记点
plt.plot(x,hy,color='r',linestyle=':',marker="X")
plt.show()
例题六
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(4, 19)
y_max = np.array([32, 33, 34, 34, 33, 31, 30, 29, 30, 29, 26, 23, 21, 25, 31])
y_min = np.array([19, 19, 20, 22, 22, 21, 22, 16, 18, 18, 17, 14, 15, 16, 16])
plt.plot(x, y_max, label='Max Temperature')
plt.plot(x, y_min, label='Min Temperature')
# 填充最高温度和最低温度之间的颜色范围
plt.fill_between(x, y_max, y_min, color='skyblue', alpha=0.5)
plt.xlabel('Day')
plt.ylabel('Temperature (°C)')
plt.title('Daily Temperature Variation')
plt.legend()
plt.show()
例题七
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] # 为系统定义中文字体
wentu = pd.read_excel(r'D:\新建文件夹\2-1.xls')
# 将日期数据转换为字符串格式
wentu['日期'] = wentu['日期'].apply(lambda x: x.strftime('%m-%d'))
# 定义 x 轴的取值范围
x = np.arange(len(wentu))
plt.plot(wentu.日期, wentu.最高气温, label='Max Temperature')
plt.plot(wentu.日期, wentu.最低气温, label='Min Temperature')
# 填充最高温度和最低温度之间的颜色范围
plt.fill_between(x, wentu.最高气温, wentu.最低气温, color='skyblue', alpha=0.5)
plt.xlabel('Day')
plt.ylabel('Temperature (°C)')
plt.title('Daily Temperature Variation')
plt.xticks(rotation=45) # 旋转 x 轴刻度标签
plt.legend()
plt.show()
例题八
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi, 1000)
y2 = np.cos(x)
plt.plot(x, y2, label='$cos(x)$', color='red')
plt.xlim(0, 7)
plt.legend()
plt.show()