python数据分析(三)Matplotlib的简单了解

python数据分析(三)Matplotlib的简单了解

1、初见
matplotlib是python中非常强大的一款绘图库,主要用于绘制2D/3D图表,进而做到数据可视化。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。想更具体地进行了解,可以参考matplotlib画廊,或者echarts

2、Hello,matplotlib!
这里借助一个小例子激发一下大家学习matplotlib的兴趣,我们可以简单地看一下它的功能和绘图效果,更加具体的操作和代码解析会在下文陆续涉及。
打开Jupyter Notebook,创建一个新的文件。
在这里插入图片描述
键入代码

import matplotlib.pyplot as plt
%matplotlib inline #这一行主要是针对环境问题,如果没有但是也能显示图表,则可以不加

plt.figure()
plt.plot([1, 2, 3],  [4, 5, 6])
plt.show()

shift+enter开始运行,结果为
在这里插入图片描述
很有趣对不对,但是这里对代码的编写暂时不做解释。

3、matplotlib绘图准则(三层)
a. 容器层
( 1 ) (1) (1) 画板层( C a n v a s Canvas Canvas):生活需要仪式感,画一张图表我们也可以走艺术流,那么,首先需要一块画板。(在编写代码时,这一般不用管)
在这里插入图片描述
( 2 ) (2) (2) 画布层( F i g u r e Figure Figure):有了画板,我们还需要在画板上加一张承载图表的画纸呀,这里,我们将其称为画布层。

plt.figure()

在这里插入图片描述
( 3 ) (3) (3) 绘图区/坐标系( a x e s axes axes):现在有了画板和画布,我们就可以直接在画布上创造艺术品了(绘制图表)。并且,我们可以将一张画布分成任意个绘图区,在每个绘图区分别绘制图表。注意:每个绘图区都有坐标轴(一般是二维的)。

plt.subplots() #创建多个子图

b. 辅助显示层
顾名思义,这一层就是用来帮助用户更好地理解图表的,因此位于容器层的绘图区之上,主要就是 A x e s Axes Axes外观( f a c e c o l o r facecolor facecolor)、边框线( s p i n e s spines spines)、坐标轴( a x i s axis axis)、坐标轴名称( a x i s axis axis l a b e l label label)、坐标轴刻度( t i c k tick tick)、坐标轴刻度标签( t i c k tick tick l a b e l label label)、网格线( g r i d grid grid)、图例( l e g e n d legend legend)、标题( t i t l e title title)等信息。(这里之所以把英文都标注在后面,是因为它们都和代码的编写相关,最好能够熟记)

c. 图像层
图像层位于容器层的绘图区之上,这一点很好理解,因为图在这里插入代码片像层本质上就是我们需要绘制的图表(如折线图 p l o t plot plot),那么图表显然是需要画在坐标系中的。

4、折线图( p l o t plot plot)
我们直接根据一个例子来学习折线图的绘制。

import matplotlib.pyplot as plt
%matplotlib inline #这一行主要是针对环境问题,如果没有但是也能显示图表,则可以不加

plt.figure()
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show()

shift+enter查看运行结果:
在这里插入图片描述
首先,我们来看第一行代码:

import matplotlib.pyplot as plt

这里导入了 matplotlib 模块中的 pyplot ,并且将其改名为 plt (主要是因为简便,我建议大家在自己编写代码的时候也这么做,因为这几乎已经是公认的写法了)。先导入 matplotlib.pyplot ,是因为它包含了绝大多数常用的绘图函数,基本上满足了我们所有的绘图需求。这里注意一点, matplotlib.pyplot 中的函数只作用于当前画布层figure的当前绘图区axes。
接下来我们创建画布figure(容器层):

plt.figure()

这是所有绘图代码的第一步,因为只有先有了画纸,我们才能够在它上面进行图表的绘制。
有了画布,下面就可以开始绘制折线图:

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

plot() 函数就是用来绘制折线图的命令,它最少需要传入两个实参,数据结构都是列表,我们可以设为x和y,x中存储的是坐标轴上一系列点的横坐标,相应的,y中存储的就是一系列点的纵坐标【(x[i-1], y[i-1])自然就是第i个点的坐标表示】,plot()函数将坐标轴上的这些点连接起来,进而形成折线图。
根据上述内容,我们可以将这一行代码改为:

x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)

这里的效果是一样的,甚至你会认为改完之后好像更麻烦了,但是,一旦情况复杂起来,我们就能感受到这么做的优势了。

最终显示图像:

plt.show()

这一行的功能是将画布显示出来,也是检验绘图的最终效果。
————————容器层——————————————————————————
下面我们来改进一下代码(针对容器层),使得绘制的图表更美观(这些同样可以应用到其他图表中)。

plt.figure(figsize=(), dpi=)

这一行同样也是创建画布,但是传入了两个参数:
figsize:数据结构为一个元组,用来指定画布的规格(长和宽)
dpi(dot per inch):一个数值,用来指定图像的清晰度
现在再来看看效果:
在这里插入图片描述
这里,如果我们还想将图片保存下来呢,右击鼠标点击存储?不,我们可以来点儿更高级的:

path = #保存图片存储的文件路径
plt.savefig(path)

这里注意,保存图片的命令是不可以写在 plt.show() 的后面的,如果我们这样做了,保存的图片一定是空的,因为图片资源已经被 plt.show() 全部释放了。
全部代码:

import matplotlib.pyplot as plt
%matplotlib inline

plt.figure(figsize=(16, 10), dpi=80)
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)
path = "test.png"
plt.savefig(path)
plt.show()

shift+enter运行,由于这里我使用的是相对文件路径,所以我们直接在当前目录里找一下,OK,保存成功。
在这里插入图片描述
————————辅助显示层————————————————————————
做到了改变画布大小和图像清晰度,我觉得折线图还是差了点什么,没有那味儿,好的,我们继续改进代码(针对辅助显示层)。

运用函数 plt.xticks() 和 plt.yticks() 修改x和y刻度:

plt.xticks(ticks, [labels], **kwargs) # 函数原型

这两个函数的第一个实参主要针对刻度的规模,即起始刻度以及分度值。这里我们为了更好地体现效果,更新一下x,y,。
先看原始的图像。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
plt.show()

在这里插入图片描述
现在,我们利用 plt.xticks() 和 plt.yticks() 函数更改一下刻度范围。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
plt.xticks(range(0, 50)) # 刻度范围0~50
plt.yticks(range(0, 100)) # 刻度范围0~100
plt.show()

在这里插入图片描述

(主要看坐标系的变化,图像是随机跑出来的,折线走势不一样很正常),坐标系好丑,我们调一下分度值。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
plt.xticks(range(0, 50, 2)) # 刻度范围0~50,间隔为2
plt.yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.show()

在这里插入图片描述
这样,坐标系就顺眼了许多,和曲线图也更搭了。这时,我们来看一下 plt.xticks() 函数的第二个形参 [labels] ——刻度说明。简单的说,有的情况下,用户并不希望刻度仅仅只是单一的数字,而是更能说明问题的字符串(例如时间等)。来看代码:(这里是为了举例,不具备现实意义)

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
plt.xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
plt.yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.show()

在这里插入图片描述
这里提一下,刻度说明应该是不支持中文格式的,如果有相关需要,可以自行百度查找解决措施。至于 plt.xticks() 函数的第三个形参 **kwargs ,显然可以穿入多个实参,对刻度进行更多的描述和改造,但是,这里就不细说了。下面,我们来学习一下如何给坐标系加上网格。

plt.grid(b, which, axis, color, linestyle, linewidth, **kwargs) #这些形参都是由默认值的

我们一个一个来看,首先 b 是bool值的意思,它控制着网格线是否显示,我们将其调整为 True 。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
plt.xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
plt.yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.grid(True) # 显示网格线
plt.show()

在这里插入图片描述
网格线显示出来了。第二个参数which : 取值为’major’, ‘minor’, ‘both’。 默认为’major’。这个我们不用了解太多,一般使用默认值就可以。
第三个参数 axis : 取值为‘both’, ‘x’,‘y’。就是想绘制哪个方向的网格线,我们可以调整该参数来控制网格线的方向,感兴趣的话可以试一下,这里也不举例了。
第四个参数color : 设置网格线的颜色,可以直接用c来表示color,python 中有自己的一套色板,大家可以去了解一下。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
plt.xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
plt.yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.grid(True, c='orangered') # 显示网格线,并设置颜色
plt.show()

顺便说一下,调整颜色的时候,一般都是可以传入参数alpha来调整颜色的透明度。取值范围为0~1,这里就不举例了。
在这里插入图片描述
第五个参数和第六个参数都是设置网格线的格式。linestyle :可以用ls来代替linestyle, 设置网格线形状(如连续实线,虚线等,直接用字符串格式描述出来即可),linewidth : 设置网格线的宽度,即线的粗细。
这里给出一些常用的linestyle:

实线-
虚线- -
点划线-.
点虚线:
import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
plt.xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
plt.yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.grid(True, c='orangered', linestyle='--', linewidth=0.5) # 显示网格线,并设置颜色,网格线形状个和宽度
plt.show()

在这里插入图片描述
同样,最后一个形参 **kwargs 不再讲。看到这里还有两个东西令人不太满意,第一,x轴的刻度没有从最左边开始显示;第二,缺标题信息,下面一次搞定。
函数 plt.xlim() 和 plt.ylim() 限制x,y轴范围(注意和刻度相区别);函数 plt.xlabel() 和 plt.ylabel() 为x,y轴命名,函数 plt.title() 为图表命名。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
plt.xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
plt.yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.grid(True, c='orangered', linestyle='--', linewidth=0.5) # 显示网格线,并设置颜色,网格线形状个和宽度
plt.xlim(0, 50) # 限制x轴范围
plt.ylim(0, 100) # 限制y轴范围
plt.xlabel('x-axis') # 设置x轴名
plt.ylabel('y-axis') # 设置y轴名
plt.title('example') # 设置图表名
plt.show()

在这里插入图片描述
满意啦!但是如果我们还想再画一条折线图呢?
——————图像层————————————————————————————
首先准备另一套y的数据。

y_1 = [random.uniform(20, 80) for i in x] #随机生成0~100之间的数

然后直接用 plt.plot() 函数画。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
y_1 = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
plt.plot(x, y_1) # 添加线条
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
plt.xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
plt.yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.grid(True, c='orangered', linestyle='--', linewidth=0.5) # 显示网格线,并设置颜色,网格线形状个和宽度
plt.xlim(0, 50) # 限制x轴范围
plt.ylim(0, 100) # 限制y轴范围
plt.xlabel('x-axis') # 设置x轴名
plt.ylabel('y-axis') # 设置y轴名
plt.title('example') # 设置图表名
plt.show()

在这里插入图片描述
为了区分,python会自动改变第二条线的颜色,当然我们也可以在画线时添加参数自定义颜色。这就是,图像层的魅力了。针对图像层的改进,有一部分是直接在画图函数上进行修改的。比如这里的自定义颜色。

plt.plot(x, y, c='')

我们举个例子。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
y_1 = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
plt.plot(x, y_1, c='green') # 添加线条,并设置颜色
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
plt.xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
plt.yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.grid(True, c='orangered', linestyle='--', linewidth=0.5) # 显示网格线,并设置颜色,网格线形状个和宽度
plt.xlim(0, 50) # 限制x轴范围
plt.ylim(0, 100) # 限制y轴范围
plt.xlabel('x-axis') # 设置x轴名
plt.ylabel('y-axis') # 设置y轴名
plt.title('example') # 设置图表名
plt.show()

在这里插入图片描述
下面我们修改线条风格。

plt.plot(x, y, linestyle='')

看例子。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
y_1 = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y)
plt.plot(x, y_1, c='green', linestyle='--') # 添加线条,并设置颜色
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
plt.xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
plt.yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.grid(True, c='orangered', linestyle='--', linewidth=0.5) # 显示网格线,并设置颜色,网格线形状个和宽度
plt.xlim(0, 50) # 限制x轴范围
plt.ylim(0, 100) # 限制y轴范围
plt.xlabel('x-axis') # 设置x轴名
plt.ylabel('y-axis') # 设置y轴名
plt.title('example') # 设置图表名
plt.show()

在这里插入图片描述
但是问题来了,当坐标系中有多个图像时,我们如何进行区分呢?要修改两个方面。第一,图像层添加标签;第二,辅助显示层设置图例。看例子:

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
y_1 = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数
plt.figure(figsize=(16, 10), dpi=80)
plt.plot(x, y, label='y_0')
plt.plot(x, y_1, c='green', linestyle='--', label='y_1') # 添加线条,并设置颜色,设置标签
plt.legend() # 显示图例,没有这一条命令,两条折线的标签无法显示
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
plt.xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
plt.yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.grid(True, c='orangered', linestyle='--', linewidth=0.5) # 显示网格线,并设置颜色,网格线形状个和宽度
plt.xlim(0, 50) # 限制x轴范围
plt.ylim(0, 100) # 限制y轴范围
plt.xlabel('x-axis') # 设置x轴名
plt.ylabel('y-axis') # 设置y轴名
plt.title('example') # 设置图表名
plt.show()

在这里插入图片描述
注意,plt.legend() 函数还有许多有趣的功能,大家可以自行百度了解。这里分享一个 loc 形参控制图例位置的方法。

plt.legend(loc='') # 通过传入参数的值自定义图例位置

这里我列举出常用的几个实参(可以传入字符串,也可以传入数字)。

Location StringLocation Code
‘best’0
‘upper right’1
‘upper left’2
‘lower left’3
‘lower right’4
‘right’5
‘center left’6
‘center right’7
‘lower center’8
‘upper center’9
‘center’10

——————多个坐标系——————————————————————————
有时候,我们还会面临一种需求——想在两个坐标系中分别绘图,但是又想方便比较,如何满足这一需求呢? plt.subplots() !

plt.subplots(nrows=a, ncols=b, **kwargs) # 绘图区a行b列

由于绘图区的划分属于面对对象的画图方法,许多函数的使用发生了一定的改变,因此这里从头编写代码(模块引入和数据处理方面没有变化)。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
y_1 = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数
figure, ax = plt.subplots(nrows=1, ncols=2, figsize=(16, 10), dpi=80)
plt.show()

在这里插入图片描述
画布层首先发生了改变,我们使用 plt.subplots 定义1行2列的坐标系,并且像之前声明画布一样定义规格和透明度,关键在于要将其赋值给 figure 和 ax。这里,主要针对 ax 进行学习,因为我们可以这样理解——两个坐标系都被存在 ax 列表中了。并且,接下来的 plt. 函数都要改变。(函数名和用法基本没变化,但是这里用的是类中的方法)

ax[].plot()

我们先把两条曲线画上。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
y_1 = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数
figure, ax = plt.subplots(nrows=1, ncols=2, figsize=(16, 10), dpi=80)
ax[0].plot(x, y, label='y_0')
ax[1].plot(x, y_1, c='green', linestyle='--', label='y_1')
plt.show()

在这里插入图片描述
注意,没有辅助显示层的命令,标签没有显示嗷。添加上去

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
y_1 = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数
figure, ax = plt.subplots(nrows=1, ncols=2, figsize=(16, 10), dpi=80)
ax[0].plot(x, y, label='y_0')
ax[1].plot(x, y_1, c='green', linestyle='--', label='y_1')
ax[0].legend()
ax[1].legend()
plt.show()

在这里插入图片描述
下面来修改刻度,这时是不是有同学认为只要把所有的 plt 都改为 ax[ ] 就行了?这里变化来了嗷。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
y_1 = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数
figure, ax = plt.subplots(nrows=1, ncols=2, figsize=(16, 10), dpi=80)
ax[0].plot(x, y, label='y_0')
ax[1].plot(x, y_1, c='green', linestyle='--', label='y_1')
ax[0].legend()
ax[1].legend()
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
# 注意方法名的变化
ax[0].set_xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
ax[0].set_yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
ax[1].set_xticks(range(0, 50, 2), x_labels[::2]) # 刻度范围0~50,间隔为2,注意标签间隔同步
ax[1].set_yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.show()

在这里插入图片描述
咦,问题来了,我们对刻度的说明没有显示呀,问题出在哪里呢?实际上是方法 set_xticks() 的问题,我们查阅相关资料就会发现,这个方法只有两个形参,根本无法添加字符串格式,如果需要进行刻度说明,则需要引入方法 set_xticklabels(),看例子:

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
y_1 = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数
figure, ax = plt.subplots(nrows=1, ncols=2, figsize=(16, 10), dpi=80)
ax[0].plot(x, y, label='y_0')
ax[1].plot(x, y_1, c='green', linestyle='--', label='y_1')
ax[0].legend()
ax[1].legend()
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
# 注意方法名的变化
ax[0].set_xticks(range(0, 50, 2)) # 刻度范围0~50,间隔为2,注意标签间隔同步
ax[0].set_xticklabels(x_labels[::2])
ax[0].set_yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
ax[1].set_xticks(range(0, 50, 2)) # 刻度范围0~50,间隔为2,注意标签间隔同步
ax[1].set_xticklabels(x_labels[::2])
ax[1].set_yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
plt.show()

在这里插入图片描述
显示出来啦,丑一点就算了吧(调一下步长即可)。
增加网格线,设置轴范围和添加描述信息有的需要改方法名(加 set_ ),有的不需要,大家可以先猜一猜。

import random
import matplotlib.pyplot as plt
%matplotlib inline

x = range(44)
y = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数 
y_1 = [random.uniform(20, 80) for i in x] #随机生成20~80之间的数
figure, ax = plt.subplots(nrows=1, ncols=2, figsize=(16, 10), dpi=80)
ax[0].plot(x, y, label='y_0')
ax[1].plot(x, y_1, c='green', linestyle='--', label='y_1')
ax[0].legend()
ax[1].legend()
x_labels = ["x({})".format(i) for i in range(0, 50)] # 打造标签,用到了Python中的format格式化方法,感兴趣的同学可以去了解一下,这里就不细说了
# 注意方法名的变化
ax[0].set_xticks(range(0, 50, 2)) # 刻度范围0~50,间隔为2,注意标签间隔同步
ax[0].set_xticklabels(x_labels[::2])
ax[0].set_yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
ax[1].set_xticks(range(0, 50, 2)) # 刻度范围0~50,间隔为2,注意标签间隔同步
ax[1].set_xticklabels(x_labels[::2])
ax[1].set_yticks(range(0, 100, 5)) # 刻度范围0~100,间隔为5
ax[0].grid(True, c='orangered', linestyle='--', linewidth=0.5) # 显示网格线,并设置颜色,网格线形状个和宽度
ax[1].grid(True, c='orangered', linestyle='--', linewidth=0.5) # 显示网格线,并设置颜色,网格线形状个和宽度
ax[0].set_xlim(0, 50) # 限制x轴范围
ax[0].set_ylim(0, 100) # 限制y轴范围
ax[1].set_xlim(0, 50) # 限制x轴范围
ax[1].set_ylim(0, 100) # 限制y轴范围
ax[0].set_xlabel('x-axis') # 设置x轴名
ax[0].set_ylabel('y-axis') # 设置y轴名
ax[0].set_title('example_0') # 设置图表名
ax[1].set_xlabel('x-axis') # 设置x轴名
ax[1].set_ylabel('y-axis') # 设置y轴名
ax[1].set_title('example_1') # 设置图表名
plt.show()

在这里插入图片描述
OK,看到这里我相信大家对于多坐标系绘图已经有一些心得了,无非就是将原本的操作针对不同的坐标系做相应的处理罢了,主要的难点还是在于方法名的记忆上,实际上这也没什么,有一些“设置”我们可以直接感觉出来(要加 set_ ),有一些感觉不出来的我们可以直接试一试,根据报错再修改。当然,最好还是搜集相关的资料系统的了解一下(开头的matplotlib画廊就可以,而且非常好用,毕竟是官网)。
——————————————————————————————————————
好的,对于图表的各种设置我们就做以上简单了解,上述功能在实际运用中已经可以满足大部分需求(以折线图为例,其他图表都可以进行使用,方法和注意事项是一样的),如果有特殊情况,可以自行百度,也可以登陆matplotlib画廊查阅。

5、散点图( s c a t t e r scatter scatter)
正如折线图的核心是 plot() 函数,散点图的核心就是 scatter() 函数。下面我们来进行散点图的绘制。
首先,准备数据。

t = range(50)
x = [random.uniform(0, 100) for i in t] #随机生成0~100之间的数 
y = [random.uniform(0, 100) for i in t] #随机生成0~100之间的数 

其次,创建画布。

plt.figure(figsize=(16,10), dpi=80)

再次,绘制图像。

plt.scatter(x, y)

最后,显示图像。

plt.show()

综合起来:

import random
import matplotlib.pyplot as plt
%matplotlib inline

t = range(50)
x = [random.uniform(0, 100) for i in t] #随机生成0~100之间的数 
y = [random.uniform(0, 100) for i in t] #随机生成0~100之间的数 
plt.figure(figsize=(16,10), dpi=80)
plt.scatter(x, y)
plt.show()

在这里插入图片描述
这里只是简单介绍一下散点图的绘制,上面在折线图的绘制中讲解的改进操作同样可以运用到散点图中。

6、柱状图( b a r bar bar)
柱状图的核心则是 bar() 函数。下面直接开始绘制。
首先,准备数据,这次我们来点儿情景。

names = ['Mike', 'John', 'Marry', 'Tom']
ages = [44, 23, 18, 100]

其次,创建画布。

plt.figure(figsize=(16,10), dpi=80)

再次,绘制图像,这次我们需要看一下 bar() 函数的原型:

matplotlib.pyplot.bar(x, y, width, align='center', **kwargs)

x和y没什么好讲的,就是我们的核心数据,width则是用来指定柱状图的宽度,align是位置,通常我们用默认值就可以了(还有’edge’),**kwargs继续不讲(设置颜色啥的)。

plt.bar(range(len(names)), ages)

最后,显示图像。

plt.show()

综合起来:

import random
import matplotlib.pyplot as plt
%matplotlib inline

names = ['Mike', 'John', 'Marry', 'Tom']
ages = [44, 23, 18, 100]
plt.figure(figsize=(16,10), dpi=80)
plt.bar(range(len(names)), ages)
plt.show()

在这里插入图片描述
不对呀,我的字符串横坐标呢?实际上,我们无法直接传入字符串作为核心数据进行绘图,但是我们可以修改x刻度呀。

import random
import matplotlib.pyplot as plt
%matplotlib inline

names = ['Mike', 'John', 'Marry', 'Tom']
ages = [44, 23, 18, 100]
plt.figure(figsize=(16,10), dpi=80)
plt.bar(range(len(names)), ages)
plt.xticks(range(len(names)), names)
plt.show()

在这里插入图片描述
OK,就是柱状图颜色太丑了趴,改!

import random
import matplotlib.pyplot as plt
%matplotlib inline

names = ['Mike', 'John', 'Marry', 'Tom']
ages = [44, 23, 18, 100]
colors = ['orangered', 'y', 'g', 'r']
plt.figure(figsize=(16,10), dpi=80)
plt.bar(range(len(names)), ages, color=colors)
plt.xticks(range(len(names)), names)
plt.show()

在这里插入图片描述
顺眼了一些,如果还有什么自定义效果想要实现,同样参照折线图板块中介绍的各种操作。但是,有时候面对同一对象,我们有多个数据想要体现,又想画在同一张柱状图中,该如何实现呢?
首先,准备数据。

names = ['Mike', 'John', 'Marry', 'Tom']
ages = [44, 23, 18, 100]
scores = [100, 88, 97, 76]

其次,创建画布。

plt.figure(figsize=(16,10), dpi=80)

再次,绘制新版柱状图。

x = range(len(names))
plt.bar(x, ages, width=0.1, labels='age', c='y')
plt.bar([i+0.1 for i in x], scores, width=0.1, labels='score', c='orangered')
plt.xticks([i+0.05 for i in x], names) #这里同样注意位置,否则不美观
plt.legend() #别忘了将图例显示出来

这里注意一定要控制住状图的宽度和位置,否则很容易出现覆盖的情况。
最后,显示图像。

plt.show()

综合起来:

import random
import matplotlib.pyplot as plt
%matplotlib inline

names = ['Mike', 'John', 'Marry', 'Tom']
ages = [44, 23, 18, 100]
scores = [100, 88, 97, 76]
plt.figure(figsize=(16,10), dpi=80)
x = range(len(names))
plt.bar(x, ages, width=0.2, color='y', label='age')
plt.bar([i+0.2 for i in x], scores, width=0.2, color='orangered', label='score')
plt.xticks([i+0.1 for i in x], names) #这里同样注意位置,否则不美观
plt.legend() #别忘了将图例显示出来
plt.show()

在这里插入图片描述

7、直方图( h i s t o g r a m histogram histogram)
直方图的核心是 hist() 函数。直方图的外表和柱状图比较相似,但是柱状图通常是为了比较,而直方图则往往显示数据分布。如果使用过直方图,大家应该知道组数(统计数据时,将数据按一定标准分为不同的数据组)和组距(每一组两个端点的差)是直方图中很重要的两项指标。两者需要在图像中很好的体现出来,例如直方图中柱子的宽度是有意义的。下面来看例子:
首先,准备数据。

t = range(200)
x = [random.uniform(0, 200) for i in t] #随机生成200个0~200之间的数 

其次,创建画布。

plt.figure(figsize=(16,10), dpi=80)

再次,绘制图形,先来看一下 hist() 函数的原型:

matplotlib.pyplot.hist(x, bins=None, normed=False) # 还有许多个有默认值的形参,这里先不列举了,大家可以去官网上查阅

我们主要关注前两个就行了,x是数据列表,bins则是刚刚提到的组数,这里提一下求解组数的公式:极差/组距,即 ( max ⁡ ( x ) − min ⁡ ( x ) ) / (\max(x)-\min(x))/ (max(x)min(x))/组距,最后,别忘了组数是整数。normed是一个bool,指示是否显示频率,这里不使用。

dis = 4 # 组距是自定义的,根据需要来即可
b = int((max(x) - min(x)) / dis)
plt.hist(x, bins=b)

最后,显示图像。

plt.show()

综合起来:

import random
import matplotlib.pyplot as plt
%matplotlib inline

t = range(200)
x = [random.randint(0, 200) for i in t] #随机生成200个0~200之间的数 
plt.figure(figsize=(16,10), dpi=80)
dis = 5 # 组距是自定义的,根据需要来即可
b = int((max(x) - min(x)) / dis)
plt.hist(x, bins=b)
plt.show()

在这里插入图片描述
实话实说,很丑,而且很多信息也没有显示出来,下面继续改进。
我们先来修改x轴刻度。

import random
import matplotlib.pyplot as plt
%matplotlib inline

t = range(200)
x = [random.randint(0, 200) for i in t] #随机生成200个0~200之间的数 
plt.figure(figsize=(16,10), dpi=80)
dis = 5 # 组距是自定义的,根据需要来即可
b = int((max(x) - min(x)) / dis)
plt.hist(x, bins=b)
plt.xticks(range(min(x), max(x)+2, dis))
plt.show()

在这里插入图片描述
图像不一样很正常,因为数字是随机生成的,主要看效果。还有其他自定义要求,同样结合上述知识自行实现。

8、饼图( p i e pie pie)
饼图的核心就是 pie() 函数:

matplotlib.pyplot(x, labels=, autopct=, colors=)

x:数据,函数会将其自动转换为百分比
labels:每一块的名称
autopct:指定如何显示占比格式
colors:每一块的颜色
下面我们来绘制一下简单的饼图:
首先,准备数据。

names = ['Mike', 'John', 'Marry', 'Tom']
scores = [100, 88, 97, 76]

其次,创建画布。

plt.figure(figsize=(16,10), dpi=80)

再次,绘制图像。

plt.pie(scores, labels=names, colors=['orangered', 'y', 'g', 'r'], autopct='%1.2f')

最后,显示图像。

plt.show()

综合起来:

import random
import matplotlib.pyplot as plt
%matplotlib inline

names = ['Mike', 'John', 'Marry', 'Tom']
scores = [100, 88, 97, 76]
plt.figure(figsize=(16,10), dpi=80)
plt.pie(scores, labels=names, colors=['orangered', 'y', 'g', 'r'], autopct='%1.2f') #显示小数点后两位,可以自定义格式
plt.legend()
plt.show()

在这里插入图片描述

9、总结与补充
这篇博客写了很长时间,所以内容有一点混乱,写得时候也有一些细节没有考虑到。因此,最后决定写一个总结来做一个回顾。
a. matplotlib库
开头只说了matplotlib库是专门用于开发2D图表(包括3D图表)的Python库,以及能够用来绘制许多图形,这里,再补充几点它的优越性:
⋅ \hspace{0.5cm}\cdot 方便快捷,因为封装了许多的绘图函数,了解一下api就可以直接用
⋅ \hspace{0.5cm}\cdot 以渐进、交互式方式实现数据可视化
⋅ \hspace{0.5cm}\cdot 对图像元素控制力较强
⋅ \hspace{0.5cm}\cdot 可输出PNG、PDF、SVG和EPS等多种格式
matplotlib库的设计初衷就是尽可能贴近matlab的绘图环境,在这个方面,matplotlib做得很出色,但这并不意味着这个库能够独立完成这个任务。实际上,我们往往要结合其他的Python库,例如NumPy、pandas等,只有这样,才能做到真正的分析数据并可视化。

b. Jupiter Notebook
Jupyter Notebook是一款非常强大的Python开发工具,因为它的互动性非常强,而且经过相当一段时间的发展与升级,这个工具的功能也更加全面、强大。

c. matplotlib架构
从逻辑上来讲,matplotlib的整体架构主要分为3层,每一层之间是单向通信的,即每一层只能和它的下一层通信,下层是无法和上层进行通信的。
⋅ \hspace{0.5cm}\cdot S c r i p t i n g Scripting Scripting(脚本)层
数据分析和可视化主要还是依据该层,因为它包含了pyplot接口,学习了上述内容,相信大家都应该知道它的强大功能。

⋅ \hspace{0.5cm}\cdot A r t i s t Artist Artist(表现)层
该层位于中间层,图形中所有的可视化元素,都属于Artist对象,标题、轴标签、刻度等元素都是Artist对象的实例。例如,下图就是利用matplotlib绘制出来的图像:
在这里插入图片描述
我们来简单地看一下它们的层级关系。
1. F i g u r e ← 2. A x e s { 3. T i t l e 4. L e g e n d 5. Y − a x i s { Y − t i c k s Y − l a b e l 6. X − a x i s { X − t i c k s X − l a b e l 7. L i n e 2 D 1.Figure\leftarrow2.Axes\begin{cases}3.Title\\\\4.Legend\\\\5.Y-axis\begin{cases}Y-ticks\\\\Y-label\end{cases}\\\\6.X-axis\begin{cases}X-ticks\\\\X-label\end{cases}\\\\7.Line2D\end{cases} 1.Figure2.Axes3.Title4.Legend5.YaxisYticksYlabel6.XaxisXticksXlabel7.Line2D
在Artist层,通常需要处理Figure、Axes和Axis等位于高层级的对象,这时一张图表的基础,没有它们,我们是没有办法进行下一步的绘制的。
( 1 ) (1) (1) F i g u r e Figure Figure对象在Artist层的最上面,也是前面提到的画布层
( 2 ) (2) (2) A x e s Axes Axes对象的作用是表示图形或图表是对什么内容进行作图的。标题、 x x x轴标签、 y y y轴标签等对象都属于Axes对象
( 3 ) (3) (3) A x i s Axis Axis对象的作用是展示在Axes对象上面的数值,定义数值范围,管理刻度和刻度纸标签。刻度的位置通常用Locator对象调整,刻度标签的格式通常用Formatter对象设置

⋅ \hspace{0.5cm}\cdot B a c k e n d Backend Backend(后端)层
该层位于最底层,matplotlib API就位于该层,它们主要是用来在底层实现图形元素的类,例如:
( 1 ) (1) (1) F i g u r e C a n v a s FigureCanvas FigureCanvas对象实现了绘图区域
( 2 ) (2) (2) R e n d e r e r Renderer Renderer对象实现了在FigureCanvas上绘制图像
( 3 ) (3) (3) E v e n t Event Event对象处理用户的输入事件(键盘和鼠标)

d. p y p l o t pyplot pyplot模块
pyplot模块由一组命令式函数组成,它们都是运用于图像绘制的。因此,在导入该模块之后,我们就可以直接调用它内置的各个函数操作或改动Figure对象,例如,创建画布和绘图区域,绘制图表,添加图表说明信息等。此外,我们要注意一点,pyplot具有状态性特征,它能跟踪当前图形和绘图区域的状态,因此在调用pyplot的内置函数时,函数只作用在当前图形上。

e. 常用 p y p l o t pyplot pyplot函数
如果我们不指定图表样式,matplotlib使用pyplot内置函数绘图时,会直接采用默认设置:
⋅ \hspace{0.5cm}\cdot 轴长与输入数据范围一致
⋅ \hspace{0.5cm}\cdot 无标题和轴标签
⋅ \hspace{0.5cm}\cdot 无图例
⋅ \hspace{0.5cm}\cdot 图表颜色为蓝色
因此,如果我们想要将图表绘制得更加美观,往往需要下列一些常用函数的帮助(个人常用的),这里主要给出一系列绘图函数和设置函数的api讲解,由于**kwargs通常都是用来设置颜色、透明度之类的,有必要的话会拎出来说(如果出现没列出来的形参),但是想要详细了解的话,建议官网查找资料,因为真的很多。
( 1 ) (1) (1) 绘制箭头

matplotlib.pyplot.arrow(x, y, dx, dy, **kwargs)

x,y:箭头起始点的坐标(x, y)(float)
dx,dy:箭头沿x和y方向的长度(float)
width:箭头尾部的宽度( float,default: 0.001)
shape: [‘full’, ‘left’, ‘right’] 箭头头部的形状(default: ‘full’)

( 2 ) (2) (2) 绘制柱状图

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs

x:x轴数据,通常是类别
height:高度数据
width:柱状图的宽度,缺省为0.8
bottom:官网并没有太多的说明,由于是可选的,我平时一般也不用,感兴趣的可以自己做实验试一下功能
align : {‘center’, ‘edge’},可选的,缺省为: ‘center’
‘center’:居中
‘edge’:左对齐
如果想实现右对齐,则设置宽度为负,并传入align=‘edge’
color:柱状图颜色
edgecolor:柱状图边缘色
linewidth:柱状图描边的边宽
tick_label:柱状图的刻度标签

( 3 ) (3) (3) 绘制网格

matplotlib.pyplot.grid(b=None, which='major', axis='both', **kwargs)

b : bool or None, 用来指定是否显示表格
which : {‘major’, ‘minor’, ‘both’},,参数变化作用在网格线上,缺省为’major’,一般来说直接用缺省值即可
axis : {‘both’, ‘x’, ‘y’},字面意思,缺省为’major’(x轴、y轴都显示)
color:定义网格线的颜色属性
linewidth:定义网格线的线宽属性
linestyle:定义网格线的格式属性,一般可选项在上文提到过了,这里就不赘述了

( 4 ) (4) (4) 绘制直方图

matplotlib.pyplot.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)

x:输入值,可以是单个数组,也可以是数组序列(不要求长度相同)
bins:组数,一般都是自定义的,根据需要计算出来,再传入即可
range : tuple(元组) or None, 可选,是bins的上界和下界。如果未提供,范围自动生成 (x.min(), x.max())。
weights :直方图图中的组宽
align : {‘left’, ‘mid’, ‘right’},直方图对齐格式,缺省为’mid’居中
color:设置颜色
orientation : {‘horizontal’, ‘vertical’},字面意思,缺省为竖直显示
histtype : {‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’},设置直方图的类型,缺省为’bar’:
‘bar’:传统的条形直方图。 如果给出多个数据,则条形图并排排列
‘barstacked’:一种条形直方图,其中多个数据相互堆叠。
‘step’:生成默认情况下未填充的线图
‘stepfilled’:生成默认情况下已填充的线图
直方图的形参非常多,但是大多都不用掌握,或者说是我个人使用频率不高,感兴趣的可以查阅资料,再实操感受一下

( 5 ) (5) (5) 显示图例

matplotlib.pyplot.legend(*args, **kwargs)

一般有三种调用方式:

  1. legend()
    使用这条命令的前提,是我们在绘制图像的同时,已经传入了参数’label=’,那么我们调用函数legend()是为了将图例显示出来
  2. legend(labels)
    这种方法不介绍,容易混淆,我个人也从来不用
  3. legend(handles, labels)
    handles:我们需要绘制图例的图像
    labels:图像图例,与上面的handles对应好,两者一般都采用列表格式传入,所以做好一一对应很重要
    loc:图例显示位置,上面已经提到过了,这里也不赘述
    ncol:图例显示的列数,缺省为1
    title:图例的标题,可以传入字符串作为标题,缺省为’None’

( 6 ) (6) (6) 绘制饼图

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, data=None

x:数据列表,一般是比重,但是可以直接传入数据,python会自动计算权值
explode:与数据列表对应的列表,是每一块与中心的距离,缺省为’None’,可以理解为0,调整这个值,可以体现出某块或某几块“突出来”的效果
labels:与数据列表对应的列表,为每一块设置标签
colors:与数据列表对应的列表,为每一块设置颜色
autopct :设置比重显示的数据格式,上面提到过
radius:饼图总半径,float,缺省为1.0

( 7 ) (7) (7) 绘制折线

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

x, y:数据的横、纵坐标列表
之所以是*args,是因为可以混着传入数据,但是一般我不会这么操作,因为担心会搞混
color or c:设置折线颜色
label:设置折线标签
linestyle or ls:{’-’, ‘–’, ‘-.’, ‘:’, ‘’, (offset, on-off-seq), …},设置折线格式,上面提到过
linewidth:设置折线线宽
实际上折线有很多更高级的用法,但是由于形参玩不溜,所以我都不太会。

( 8 ) (8) (8) 保存图片

matplotlib.pyplot.savefig(*args, **kwargs)

fname:存储路径与格式
dpi:图片分辨率
format:文件格式,实际上可以利用参数fname直接设置,一步到位

( 9 ) (9) (9) 绘制散点图

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)

x, y:两个列表,两者一一对应,组合起来构成三点的坐标集合
s:散点的大小
c:散点颜色,可以传入列表,也可以结合cmap绘制渐变色
marker:散点的样式,‘o’, ‘v’, ‘^’, ‘<’, ‘>’, ‘8’, ‘s’, ‘p’, ‘*’, ‘h’, ‘H’, ‘D’, ‘d’, ‘P’, ‘X’,这里给出常用的样式,可以自行挑选
linewidths:每一个散点周围是有框的,这个参数可以调整线宽
edgecolors : {‘face’, ‘none’, None},散点边界的颜色,缺省为’face’,表示和填充色相同

( 10 ) (10) (10) 显示图像

matplotlib.pyplot.show(*args, **kw)

没什么好说的,最后再加上这条命令,它会释放所有的绘图元素,也就是说,如果在这条命令之后执行保存图片,图片是空的。一般不需要传参。

( 11 ) (11) (11) 多坐标系

matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
我个人一般用:plt.subplot(nrows=a, ncols=b, **kwargs) # 绘图区a行b列

这个还可以调整figsize和dpi,上文提到过,实际上这个函数还有许多的默认值参数,但是,多坐标系的内容非常复杂,因为还涉及到创建之后的绘图问题,因此本篇文章就简单说一下上文的内容,不多作补充,有机会再写一篇单独的博客。

( 12 ) (12) (12) 设置图像标题

matplotlib.pyplot.title(label, fontdict=None, loc='center', pad=None, **kwargs)

label:图像标题
loc : {‘center’, ‘left’, ‘right’},标题位置

( 13 ) (13) (13) 设置x、y轴标签

matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)
matplotlib.pyplot.ylabel(ylabel, fontdict=None, labelpad=None, **kwargs)

xlabel,ylabel:标签名

( 14 ) (14) (14) 设置x、y轴范围

matplotlib.pyplot.xlim(*args, **kwargs)
matplotlib.pyplot.ylim(*args, **kwargs)

直接传入范围元组

( 15 ) (15) (15) 设置刻度

matplotlib.pyplot.xticks(ticks=None, labels=None, **kwargs)
matplotlib.pyplot.yticks(ticks=None, labels=None, **kwargs)

ticks:当前刻度的位置
labels:与ticks配套使用,将指定位置的刻度替换为指定标签

上述内容就是针对matplotlib的简单了解,首先说一声抱歉,这篇博客写得时间比较长,所以思路有一点混乱。另外,matplotlib库十分强大,这导致它的内容非常繁多,这里仅仅介绍了一丢丢知识,如果需要深入学习,还是建议参考官网文档。如有错误,欢迎指正。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值