科研必会Python库之Matplotlib库教程
Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。Matplotlib 可以用来绘制各种静态,动态,交互式的图表。可是说是科研论文必备神器了。Matplotlib 通常与 NumPy 、 SciPy、Pandas配合使用, 这几个库相互协同几乎可以代替MatLab的一些常用功能。
1.matplotlib安装
我们可以通过终端指令来安装
pip install -U matplotlib
安装后可以通过如下指令来查看matplotlib库版本
import matplotlib
print(matplotlib.__version__)
2.Matplotlib.Pyplot介绍
Pyplot 是 Matplotlib 的子库,使用该子库可以很方方便的让用户绘制2D图表。
Pyplot 内置很多绘图函数,通过一些间的的调用就可以画出很多既好看又实用的图像。
在导入该库的时候,我们一般都使用如下指令给matplotlib.pyplot换一个名字
import matplotlib.pyplot as plt
3.折线图绘制
3.1 默认参数绘制
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints)
plt.show()
3.2 线条样式选择
linestyle参数控制
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, linestyle = 'dotted')
plt.show()
linestyle简写形式plt.plot(ypoints, ls = ‘-.’):
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, ls = '--')
plt.show()
线条样式对照表
类型 | 简写 | 说明 |
---|
‘solid’ (默认) | ‘-’ | 实线 | ‘dotted’ | ‘:’ | 点虚线 | ‘dashed’ | ‘–’ | 破折线 | ‘dashdot’ | ‘-.’ | 点划线 | ‘None’ | ‘’ 或 ’ ’ | 不画线 |
3.3 线条颜色选择
color 参数控制, color 参数同样可以简写为c,默认颜色为浅蓝色;
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, color = 'b')
plt.show()
颜色对照表
颜色标记 | 描述 |
---|
‘r’ | 红色 | ‘g’ | 绿色 | ‘b’ | 蓝色 | ‘c’ | 青色 | ‘m’ | 品红 | ‘y’ | 黄色 | ‘k’ | 黑色 | ‘w’ | 白色 |
经过测试发现自定义颜色也是支持的,只需要输入十六进制颜色值或者RGB参数就可以
这里给大家推荐一篇博文,里面给出了RGB颜色表
3.4 线条粗细选择
linewidth 参数来控制,同样可以简写为 lw,值可以是小数
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, linewidth = '10.5')
plt.show()
3.5 单图多线条绘制
import matplotlib.pyplot as plt
import numpy as np
y1 = np.array([3, 7, 5, 9])
y2 = np.array([6, 1, 12, 8])
plt.plot(y1)
plt.plot(y2)
plt.show()
这里注意一个细节,我们只给出了Y轴的数据,没有给X轴的数据,X 的值默认设置为 [0, 1, 2, 3]
我们也可以自己设置 X 坐标值
4.轴标签
xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签
import numpy as np
import matplotlib.pyplot as plt
x = np.array([2, 4, 6, 8])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.show()
5.标题
title() 方法设置标题
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)
plt.title("TITLE")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.show()
6.标签和标题无法显示中文问题
Matplotlib 默认情况不支持中文,我们可以使用以下简单的方法来解决
你也可以在网盘下载: https://pan.baidu.com/s/10-w1JbXZSnx3Tm6uGpPGOw,提取码:yxqu。
可以下载个 OTF 字体,比如 SourceHanSansSC-Bold.otf,将该文件文件放在当前执行的代码文件中
import matplotlib as matplotlib
import numpy as np
import matplotlib.pyplot as plt
zhfont1 = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")
x = np.arange(1, 11)
y = 2 * x + 5
plt.title("测试", fontproperties=zhfont1)
plt.xlabel("x 轴", fontproperties=zhfont1)
plt.ylabel("y 轴", fontproperties=zhfont1)
plt.plot(x, y)
plt.show()
7.加入网格线
grid() 方法来设置图表中的网格线
参数说明:
- b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
- which:可选,可选值有 ‘major’、‘minor’ 和 ‘both’,默认为 ‘major’,表示应用更改的网格线。
- axis:可选,设置显示哪个方向的网格线,可以是取 ‘both’(默认),‘x’ 或 ‘y’,分别表示两个方向,x 轴方向或 y 轴方向。
- kwargs:可选,设置网格样式,可以是 color=‘r’, linestyle=‘-’ 和 linewidth=2,分别表示网格线的颜色,样式和宽度。
- color:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,‘#008000’ RGB 颜色符串。
- linestyle:‘‐’ 实线,‘‐‐’ 破折线,‘‐.’ 点划线,‘:’ 虚线。
- linewidth:设置线的宽度,可以设置一个数字。
matplotlib.pyplot.grid(b=None, which='major', axis='both', )
eg:
import numpy as np
import matplotlib.pyplot as plt
x = np.array([2, 4, 6, 8])
y = np.array([1, 4, 9, 16])
plt.title("grid()")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y)
plt.grid()
plt.show()
8.单窗口多图绘制
我们可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图。
subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可
import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([0, 6])
ypoints = np.array([0, 100])
plt.subplot(1, 2, 1)
plt.plot(xpoints,ypoints)
plt.title("plot 1")
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.subplot(1, 2, 2)
plt.plot(x,y)
plt.title("plot 2")
plt.suptitle("RUNOOB subplot Test")
plt.show()
subplots()
matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
参数说明:
- nrows:默认为 1,设置图表的行数。
- ncols:默认为 1,设置图表的列数。
- sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 ‘none’、‘all’、‘row’ 或 ‘col’。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 ‘all’:所有子图共享 x 轴或 y 轴,‘row’ 设置每个子图行共享一个 x 轴或 y 轴,‘col’:设置每个子图列共享一个 x 轴或 y 轴。
- squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N1 或 1N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1。
- subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
- gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
- fig_kw:把详细的关键字参数传给 figure() 函数。
9.散点图绘制
9.1 默认参数绘制
我们可以使用 pyplot 中的 scatter() 方法来绘制散点图。
scatter() 方法语法格式如下:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, plotnonfinite=False, data=None, kwargs)
参数说明:
- x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。
- s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
- c:点的颜色,默认蓝色 ‘b’,也可以是个 RGB 或 RGBA 二维行数组。
- marker:点的样式,默认小圆圈 ‘o’。
- cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。
- norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。
- vmin,vmax:亮度设置,在 norm 参数存在时会忽略。
- alpha:透明度设置,0-1 之间,默认 None,即不透明。
- linewidths:标记点的长度。
- edgecolors:颜色或颜色序列,默认为 ‘face’,可选值有 ‘face’, ‘none’, None。
- plotnonfinite:布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
- kwargs:其他参数
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
plt.scatter(x, y)
plt.show()
9.2设置图标大小
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,100,200,500,1000,60,90])
plt.scatter(x, y, s=sizes)
plt.show()
9.3自定义点的颜色
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])
plt.scatter(x, y, c=colors)
plt.show()
9.4两组散点图
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y, color = 'hotpink')
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')
plt.show()
9.5使用随机数来设置散点图
(此处敲黑板,随机数画图,科研必备,不能说太直白[手动狗头])
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19680801)
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.title("RUNOOB Scatter Test")
plt.show()
10.柱形图绘制
10.1 默认参数绘制
我们可以使用 pyplot 中的 bar() 方法来绘制柱形图。
bar() 方法语法格式如下:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, align='center', data=None, kwargs)
参数说明:
- x:浮点型数组,柱形图的 x 轴数据。
- height:浮点型数组,柱形图的高度。
- width:浮点型数组,柱形图的宽度。
- bottom:浮点型数组,底座的 y 坐标,默认 0。
- align:柱形图与 x 坐标的对齐方式,‘center’ 以 x 位置为中心,这是默认值。 ‘edge’:将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align=‘edge’。
- kwargs:其他参数。
import matplotlib.pyplot as plt
import numpy as np
x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])
plt.bar(x,y)
plt.show()
10.2 垂直绘制
垂直方向的柱形图可以使用 barh() 方法来设置:
10.3 自定义各个柱形的颜色
import matplotlib.pyplot as plt
import numpy as np
x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])
plt.bar(x, y, color = ["#4CAF50","red","hotpink","#556B2F"])
plt.show()
10.4柱形图宽度
import matplotlib.pyplot as plt
import numpy as np
x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])
plt.bar(x, y, width = 0.1)
plt.show()
11.饼图
11.1 默认参数绘制
我们可以使用 pyplot 中的 pie() 方法来绘制饼图。
pie() 方法语法格式如下:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)
参数说明:
- x:浮点型数组,表示每个扇形的面积。
- explode:数组,表示各个扇形之间的间隔,默认值为0。
- labels:列表,各个扇形的标签,默认值为 None。
- colors:数组,表示各个扇形的颜色,默认值为 None。
- autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
- labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
- pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
- shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
- radius::设置饼图的半径,默认为 1。
- startangle::起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
- counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。
- wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={‘linewidth’:5} 设置 wedge 线宽为5。
- textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。
- center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
- frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
- rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。
import matplotlib.pyplot as plt
import numpy as np
y = np.array([35, 25, 25, 15])
plt.pie(y)
plt.show()
11.2设置饼图各个扇形的标签与颜色
import matplotlib.pyplot as plt
import numpy as np
y = np.array([35, 25, 25, 15])
plt.pie(y,
labels=['A','B','C','D'],
colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"],
)
plt.title("RUNOOB Pie Test")
plt.show()
11.3突出显示第二个扇形,并格式化输出百分比
import matplotlib.pyplot as plt
import numpy as np
y = np.array([35, 25, 25, 15])
plt.pie(y,
labels=['A','B','C','D'],
colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"],
explode=(0, 0.2, 0, 0),
autopct='%.2f%%',
)
plt.title("RUNOOB Pie Test")
plt.show()
参考资料
|