数据可视化是数据分析中最重要的任务之一,有时构建网络交互可视化可能是最终目标之一。matplotlib是一个用于生成出版级质量图表的桌面绘图包,随着时间的推移,matplotlib已经产生了一些数据可视化的附加工具包,比如seaborn。
matplotlib的安装:
conda install -n Excercise matplotlib
pip install -n Excercise matplotlib
matplotlib绘图流程
借用一张图,说明可视化的作图流程:
matplotlib API入门
如果所有设置都正确,可以运行以下代码输出简单图形:
1 | import matplotlib.pyplot as plt |
plot([x],y,[fmt],data=None,**kwargs)
‘[]’代表参数选填,fmt传一个字符串,用来给图形做一些样式修改,默认是’b-‘。也可以用随机函数绘制一张折线图:
1 | import matplotlib.pyplot as plt |
1 | # 等价写法 |
1 | # 等价写法 |
matplotlib的基本使用
matplotlib的主函数plot接收带有x和y轴的数组以及一些可选的字符串缩写参数来指明颜色和线类型。
例如ax.plot(x,y,'g--')
等价于ax.plot(x,y,linestyle='--',color='g')
很多颜色缩写被用于常用颜色,也可以通过指定十六进制颜色代码的方式来指定任何颜色,总的来说,有以下三种方式:
1 | # 使用颜色的名称或缩写 |
折线图有时需要凸显实际的数据点,也可以用下面的表达方式,plt.plot(randn(30).cumsum(),'k0--')
等价于plt.plot(randn(30).cumsum(),color='k',linestyle='dashed',marked='o')
通过drawstyle
选项更改折线图的连接方式:
1 | import numpy as np |
指明线类型的常见字符串汇总:
字符 | 类型 | 字符 | 类型 |
---|---|---|---|
‘-‘ | 实线 | ‘–’ | 虚线 |
‘-.’ | 虚点线 | ‘:’ | 点线 |
‘.’ | 点 | ‘,’ | 像素点 |
‘o’ | 圆点 | ‘v’ | 下三角点 |
‘^’ | 上三角点 | ‘<’ | 左三角点 |
‘>’ | 右三角点 | ‘1’ | 下三叉点 |
‘2’ | 上三叉点 | ‘3’ | 左三叉点 |
‘4’ | 右三叉点 | ‘s’ | 正方点 |
‘p’ | 五角点 | ‘*’ | 星形点 |
‘h’ | 六边形点1 | ‘H’ | 六边形点2 |
‘+’ | 加号点 | ‘x’ | 乘号点 |
‘D’ | 实心菱形点 | ‘d’ | 瘦菱形点 |
‘_’ | 横线点 |
指明颜色的常见字符串汇总:
字符 | 类型 |
---|---|
‘b’ | 蓝色,blue |
‘g’ | 绿色,green |
‘r’ | 红色,red |
‘c’ | 青色,cyan |
‘m’ | 品红,magenta |
‘y’ | 黄色,yellow |
‘k’ | 黑色,black |
‘w’ | 白色,white |
设置线条样式
设置线条样式一般有三种方法:
使用
plot
方法:plot
方法就是用来绘制线条的,因此可以在绘制的时候就把线条相关的样式通过参数传递进去,例如:1
plt.plot(x,y,linewidth=2)
通过
Line2D
对象来设置:plot
方法会返回一个装有Line2D
对象的列表,比如lines = plt.plot(x1,y1,x2,y2)
因为绘制了两根线条,因此lines
中会有两根2D
对象,拿到这个line2D
对象后就可以通过set_属性名
设置线条样式了1
2
3
4lines = plt.plot(x,y)
line = lines[0]
line.set_aa(False) # 关掉反锯齿
line.set_alpha(0.5) # 设置0.5的透明度使用
plt.setp
来设置:setp
的好处是一次性可以设置多根线条的多个样式1
2lines = plt.plot(x,y)
plt.setp(lines,linewidth=10,alpha=0.5)
设置标题、轴标签和刻度标签
要改变x轴刻度,最简单的方式是使用set_xticks
和set_xticklabels
1 | import matplotlib.pyplot as plt |
默认情况下轴和标题是显示不了中文的,需要设置字体,可通过以下代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
# 定义每日票房数据
avenger = [17974.4,50918.4,30033.0,40329.1,52330.2,
19833.3,11902.0,24322.6,47521.8,32262.0,
22841.9,12938.7,4835.1,3118.1,2570.9]
# 修改图表的长宽
plt.figure(figsize=(10,5))
# 制图
plt.plot(avenger,marker='o')
# 加载字体
font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
# 修改字体大小
font.set_size(10)
# 修改行标签
plt.xticks(range(15),["第%d天"%x for x in range(1,16)],fontproperties=font,rotation=30)
# 设置x轴标签名称
plt.xlabel("上映天数",fontproperties=font)
plt.ylabel("票房(单位:万)",fontproperties=font)
# 设置图表标签名称
plt.title("复仇者联盟前15天票房记录",fontproperties=font)
#打开背景网格
plt.grid(True)
plt.show()Macbook的字体可通过<字体册.app>查看
在
Finder
中打开字体,并拷贝文件位置即可
添加图例
图例是用来区分绘图元素的一个重要内容,最简单的方法是在绘制每个图表的时候传递label
参数,然后使用plt.legend()
自动生成图例,代码示例可以参考前面<颜色、标记和线类型>部分
设置注释文本
使用plt.annotate(text,xy,xytext,arrowprops={})
来注释或标记某个图形,其中text
是文本内容,xy
是被注释点的坐标,xytext
是注释文本的坐标,arrowprops
是箭头的样式属性:
1 | import numpy as np |
设置图形样式
调整图片的大小和像素,可以使用plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
来实现。比如
1 | plt.figure(figsize=(20,8),dpi=80) |
可以使用grid函数显示图片背景网格:
1 | plt.plot(x,y,color="r") |
绘制图形
绘制图形时,如Rectangle(矩形)和Circle(圆形)可以在matplotlib.pyplot
中找到,但图形的全集位于matplotlib.patches
中
1 | import matplotlib.pyplot as plt |
保存图片
可以使用plt.savefig
将活动图片保存到文件,文件类型是从文件扩展名中推断出来的,比如:
plt.savefig('figpath.png')
plt.savefig
函数的参数汇总:
参数 | 描述 |
---|---|
fname | 包含文件路径的字符串。图片格式从文件扩展名中推断 |
dpi | 分辨路,默认为100 |
facecolor,edgecolor | 子图之外的图形背景颜色;默认是’w’(白色) |
format | 文件格式(‘png’,’pdf’,’svg’,’ps’,’eps’……) |
bbox_inches | 要保存的图片范围,如果传递’tight’,将除掉图片周围空白的部分 |
matplotlib设置
matplotlib配置了配色方案和默认设置,主要用来准备用于发布的图片,使用plt.rc
方法可以全局定制或修改图片参数,包括图形大小、子图间距、颜色、字体大小、网格样式等等。通过定义字典,同样可以批量修改全局参数。
1 | import matplotlib.pyplot as plt |
图片与子图
matplotlib所绘制的图位于Figure对象中,使用plt.figure
可以生成一个新的图片,并通过fig.add_subplot
或plt.subplot
创建一个或多个子图:
1 | import numpy as np |
‘k–’是用于绘制黑色分段线的style选项。fig.add_subplot
返回的对象是AxesSubplot
对象,使用这些对象可以直接在其他空白的子图上调用对象的实例方法进行绘图
1 | import numpy as np |
一个更加便捷地创建子图的方法是使用plt.subplots
函数,它会创建一个新的图片,然后返回包含了已生成子图对象的Numpy数组,这样子图对象可以像数组那样方便索引和调用。
1 | figure,axes = plt.subplots(2,2) |
plt.subplots
的选项如下:
参数 | 描述 |
---|---|
nrows | 子图的行数 |
ncols | 子图的列数 |
sharex | 所有子图使用相同的x轴刻度 |
sharey | 所有子图使用相同的y轴刻度 |
subplot_kw | 船用add_subplot 的关键字参数字典,用于生成子图 |
**fig_kw | 在生成图片时使用的额外关键字参数,例如plt.subplots(2,2,figsize=(8,6)) |
调整子图周围的间距
默认情况下,matplotlib会在子图的外部和子图之间留出一定的间距。你可以使用subplots_adjust
方法更改间距:
1 | import numpy as np |
风格设置
matplotlib内置来几种风格,可以通过plt.style.available
来查看内置的风格
在绘制时,可以使用plt.style.use()
方法来使用不同的风格,例如:
1 | plt.style.use("seaborn") |