当在一张图中包含大量数据和多个曲线时,线条的样式,颜色等风格化的变量设置就显得尤为重要,今天我来总结一下在Matplotlib中常用的参数和用法。
首先我们先通过一个例子来看看,先导入绘图所需要的数据
import pandas as pd
data = pd.read_csv("Added value of high-tech industry.csv")
再来定义一会儿要用到的变量
x = data['Years']
l1 = data['Actual']
l2 = data['GM(1,1)']
l3 = data['LSSVR']
l4 = data['ANN']
l5 = data['GLV']
l6 = data['FGLV']
l7 = data['FDGLV']
接下来,开始画图
import matplotlib.pyplot as plt #导入matplotlib
fig, ax = plt.subplots(figsize=(8,4))
plt.title('Added value of high-tech industry') #设置标题
plt.plot(x, l1,'bo',label='Actual Data')
plt.plot(x, l2,c='#EA4335',ls='-',label='GM(1,1)',linewidth=1)
plt.plot(x, l3,c='#960B4F',ls= '--',label='SSVR',linewidth=1)
plt.plot(x, l4,c='#34A853',ls='-.', label='ANN',linewidth=1)
plt.plot(x, l5,c='#24016F',ls=':', label='GLV',linewidth=1)
plt.plot(x, l6,c='#F78104',ls='--', label='FGLV',linewidth=1)
plt.plot(x, l7,c='#008081',ls='-', label='FDGLV',linewidth=1)
先讲一下在上面这几行代码中提到的几个元素:
-
color (简写 ‘ c ‘)
再多条曲线中颜色的选择很重要,这里我推荐一个不错的网站:https://www.schemecolor.com, 里面提供了大量的颜色和组合可供选择可以直接复制,节省了很大的时间。 -
linestyle(简写 ‘ ls ’)
线条的样式也是一个很重要的因素,目前官方提供的样式有以下几种
实线: ‘-’
虚线: ‘–’
点线: ‘:’
点: ‘.’
虚点线: ‘-.’
3.linewidth(线宽),可以自己调整。
其实还有很多的参数可供设置,在这里我不依依赘述,有兴趣大家可前往matplotlib的官网:https://matplotlib.org,里面有更详细的讲解和介绍。
接下来我们继续看代码
from matplotlib.pyplot import MultipleLocator #导入设置时间的库
x_major_locator = MultipleLocator(2)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
#设置x轴时间刻度显示(2年显示一次)
plt.xlabel('Years') #x轴标签
plt.ylabel('$10^9$ (¥)') #y轴标签
plt.vlines(2019, -200, 8000, colors = "k", linestyles = "-",lw=0.8) #添加分割竖线
plt.text(2012,4400,'Data for building the model',fontsize=10,c='red') #添加文本注解
plt.text(2020,6500,'Trend prediction',fontsize=10,c='red')
其中关于垂直分割线的用法:
vlines(x, ymin, ymax)
x(竖线的横坐标),ymin(竖线纵坐标的下限),ymax(竖线纵坐标的上限)
接着我们来添加箭头
ax.annotate('', xy=(2018,4500), xytext=(2019,4500),
arrowprops=dict(arrowstyle="->", color="r"))
ax.annotate('', xy=(2020,6600), xytext=(2019,6600),
arrowprops=dict(arrowstyle="->", color="r"))
xy为箭头的起始坐标,xytext为箭头的终点坐标,arrowprops来设置箭头的属性,arrowstyle是箭头的形状。
最后我们来设置图例
plt.legend()
leg = plt.legend()
leg.get_frame().set_linewidth(0.0) #使图例边框为透明色
同样,如果想对图例的位置进行设置,例如:
upper right 1
upper left 2
等…
可以使用(‘loc=#’)
最后
plt.show()
完整代码如下:
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
data = pd.read_csv('Urbanization Rate.csv')
x=data['Years']
l1=data['Actual']
l2=data['GM(1,1)']
l3=data['LSSVR']
l4=data['ANN']
l5=data['GLV']
l6=data['FGLV']
l7=data['FDGLV']
fig, ax = plt.subplots(figsize=(8,4))
plt.title('Urbanization Rate')
plt.plot(x, l1,'bo',label='Actual Data')
plt.plot(x, l2,c='#EB1344',ls='-',label='GM(1,1)',linewidth=1)
plt.plot(x, l3,c='#333274',ls= '--',label='SSVR',linewidth=1)
plt.plot(x, l4,c='#4AC7A7',ls='-.', label='ANN',linewidth=1)
plt.plot(x, l5,c='#E36414',ls=':', label='GLV',linewidth=1)
plt.plot(x, l6,c='#E52F9E',ls='--', label='FGLV',linewidth=1)
plt.plot(x, l7,c='k',ls='-', label='FDGLV',linewidth=1)
plt.vlines(2019, 0.6, 0.85, colors = "k", linestyles = "-",lw=0.8)
x_major_locator = MultipleLocator(2)
ax= plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.xlabel('Years')
plt.text(2012,0.696,'Data for building the model',fontsize=10,c='red')
plt.text(2020,0.747,'Trend prediction',fontsize=10,c='red')
ax.annotate('', xy=(2018,0.7), xytext=(2019,0.7),
arrowprops=dict(arrowstyle="->", color="r"))
ax.annotate('', xy=(2020,0.75), xytext=(2019,0.75),
arrowprops=dict(arrowstyle="->", color="r"))
plt.legend()
leg = plt.legend(loc=4)
leg.get_frame().set_linewidth(0.0)
#plt.show()
结果展示
更多详细信息请参考:https://matplotlib.org/api/pyplot_summary.html
(里面有更详细的代码用法解释)