【Python3 爬虫学习笔记】绘制图形

Python 除了擅长于数据抓取,把抓到的数据绘制成统计图形更是它的强项。
Matplotlib 是Python在2D绘图领域使用最广泛的组件,通过它可以让用户轻松地将数据图形化,并且提供了多种输出格式。Matplotlib功能强大,尤其在绘制各种科学图形方面更有非凡表现。
如果绘制的图形不是特别复杂,小巧的Bokeh组件就足以应付,它所需的资源大约只有Matplotlib的五分之一,却能绘出各种实用的图形,并可以在网页中进行呈现。

Matplotlib基本绘图

import matplotlib.pyplot as plt

Matplotlib绘图的主要功能是绘制x、y坐标图。绘图时,我们需要把x、y坐标保存在列表变量中并传给Matplotlib。例如,我们要绘制6个点:

listx = [1,5,7,9,13,16]
listy = [15,50,80,40,70,50]

x坐标的列表及y坐标的元素数目必须相同,否则执行时会产生“x and y must have same first dimension”的错误。
matplotlib.pyplot中绘制线形图的方法为plot(),其语法格式为:

包名.plot(x坐标列表, y坐标列表)

例如,我们要用listx及listy的列表进行绘图:

plt.plot(listx, listy)

绘图后如果不会自动显示,可用show()方法显示,例如:

plt.show()

执行结果如下:
在这里插入图片描述

plot()方法的参数及图形设置

matplotlib.pyplot包中的plot()方法,除了x坐标列表及y坐标列表为必需的参数外,还有数十个可选参数用于设置绘图的不同特性,下面是4个常用的可选参数:

  • color:设置线条颜色。默认为蓝色,要设置线条为红色,则color=“red”。
  • linewidth or lw:设置线条宽度。默认为1.0,如果要设置线条宽度为5.0,则linewidth=5.0。
  • linestyle or ls:设置线条样式。可选值有"-"(实线)、"–"(虚线)、"-."(虚点线)及":"(点线),默认为"-"。
  • label:设置图例名称,例如设置图例名称为money:label=“money”。此属性需搭配legend()方法使用才可生效。
    例:绘制红色、虚线、线宽为5、名称为food的线形图。
plt.plot(listx, listy, color="red", lw=5.0, ls=="--", label="food")

设置好属性后,执行legend()方法进行显示:

plt.legend()
同时绘制多个图形

在同一个坐标系中可以绘制多个图形,我们通常会将所有图形都绘制完成后再显示。例如我们要绘制两个图形。

listx1 = [1,5,7,9,13,16]
listy1 = [15,50,80,40,70,50]
plt.plot(listx1, listy1)
listx2 = [2,6,8,11,14,16]
listy2 = [10,40,30,50,80,60]
plt.plot(listx2, listy2)
plt.show()

在这里插入图片描述##### 图形的属性设置
图形绘制完成后,可对图形的属性做一些设置,如图形标题、x及y坐标轴标题等,这样可以让图形看起来更加直观。
设置图形的标题、x坐标轴标题、y坐标轴标题的语法分别为:

组件名称.title(图形标题)
组件名称.xlabel(x坐标标题)
组件名称.ylabel(y坐标标题)

例如:

plt.title("学生成绩")  # 图形标题
plt.xlabel("座号")  # x坐标标题
plt.ylabel("成绩")  # y坐标标题

如果没有指定x坐标及y坐标范围,系统会根据数据大小判断最适合的x坐标及y坐标取值范围。我们也可以自行设置x、y的坐标范围,语法为:

组件.xlim(起始值, 终止值)  # 设置x坐标范围
组件.ylim(起始值, 终止值)  # 设置y坐标范围

例如设置x坐标范围为0到100,y坐标范围为0到50:

plt.xlim(0, 100)  # 设置x坐标范围
plt.xlim(0, 50)  # 设置y坐标范围

线形图的绘制

import matplotlib.pyplot as plt

listx1 = [1,5,7,9,13,16]
listy1 = [15,50,80,40,70,50]
plt.plot(listx1, listy1, label="Male")
listx2 = [2,6,8,11,14,16]
listy2 = [10,40,30,50,80,60]
plt.plot(listx2, listy2, color="red", linewidth=5.0, linestyle="--", label="Female")
plt.legend()
plt.xlim(0, 20)
plt.ylim(0, 100)
plt.title("Pocket Money")
plt.xlabel("Age")
plt.ylabel("Money")
plt.show()

在这里插入图片描述

在Matplotlib中显示中文

Matplotlib默认无法显示中文,所以在前面的例子中各种标题及图例使用的都是英文。若想在Matplotlib显示中文,只需将其默认使用的字体更改为简体中文即可。更改默认字体的操作方法有两种:
第一种方法是在文本编辑器中打开<\Anaconda3\Lib\sit-packages\matplotlib\mpl-data>matplotlibc文件,查找下面的文本行:

# font.sans-serif: ......

在冒号后面加上一个简体中文字体SimHei就可以了:

# font.sans-serif : SimHei, .......

第二种是直接在代码中导入pylab包,并把字体参数传递给配置文件:

from pylab import *
rcParams['font.sans-serif'] = ['SimHei']

绘制柱状图及饼图

Matplotlib除了可绘制线形图外,还可绘制柱状图或饼图。
柱状图的绘制是通过bar()方法来实线的,其语法为:

包名.bar(x坐标列表, y坐标列表, 其他参数...

绘制柱状图的参数与绘制线形图类似,除了一些线形图的属性参数(如线宽、线形等)不能使用外,其余参数在绘制柱状图时都可以使用。

柱状图绘制
import matplotlib.pyplot as plt
from pylab import *
rcParams['font.sans-serif'] = ['SimHei']

listx1 = [1,5,7,9,13,16]
listy1 = [15,50,80,40,70,50]
plt.bar(listx1, listy1, label="男性")
listx2 = [2,6,8,11,14,16]
listy2 = [10,40,30,50,80,60]
plt.bar(listx2, listy2, color="red", label="女性")
plt.legend()
plt.title("零花钱统计")
plt.xlabel("年龄")
plt.ylabel("零花钱数量")
plt.show()

在这里插入图片描述

绘制圆形饼图

饼图是用pie()方法来绘制的,其语法为:

包名.pie(数据列表[, 可选参数列表])

“数据列表”是列表型数据,可省略,其值作为饼图的数据源。
“可选参数列表”可有可无,其名称与功能如下:

  • labels:由每个项目标题组成的列表。
  • colors:由每个项目颜色组成的列表。
  • explode:由每个项目的凸出值组成的列表。“0”表示不突出。
  • labeldistance:项目标题与圆心的距离是半径的多少倍。例如“1.1”表示项目标题与圆心的距离是半径的1.1倍。
  • autopct:项目百分比的格式,语法为“%格式%%”。例如“%2.1f%%”表示整数占2位,小数占1位。
  • shadow:布尔值,True表示图形有阴影,False表示图形没有阴影。
  • startangle:绘图的起始角度,绘图时按逆时针旋转顺序进行。
  • pctdistance:百分比数值与圆心的距离是半径的多少倍。
    默认绘制的饼图是椭圆形,若要绘制正圆形饼图,需用下列方法让x、y轴单位相等:
包名.axis("equal")

饼图的展示效果虽然不错,但仅适合少量数据的呈现,若将圆饼图分块太多,那么比例太小的数据就会看不清楚。

以饼图的方式表现东、南、北、中各区的业绩
import matplotlib.pyplot as plt

labels = ["东部","南部","北部","中部"]
sizes = [5, 10, 20, 15]
colors = ["red", "green", "blue", "yellow"]
explode = (0, 0, 0.05, 0)
plt.pie(sizes, explode=explode, labels=labels, colors=colors,\
        labeldistance=1.1, autopct="%3.1f%%", shadow=True,\
        startangle=90, pctdistance=0.6)
plt.axis("equal")
plt.legend()
plt.show()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/htsait4113/article/details/84630584