matplotlib入门

Posted 临风而眠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib入门相关的知识,希望对你有一定的参考价值。

matplotlib入门(1)

​ 简介:

matplotlib.pyplot包含一系列类似MATLAB中绘图函数的相关函数。每个matplotlib.pyplot中的函数对当前的图像进行一些修改,例如:产生新的图像,在图像中产生新的绘图区域,在绘图区域中画线,给绘图加上标记,等matplotlib.pyplot会自动记住当前的图像和绘图区域,因此这些函数会直接作用在当前的图像上。

​ 导入包:

在实际的使用过程中,常常以plt作为matplotlib.pyplot 的省略

import numpy as np
import matplotlib as plt

一.

1.plt.show()函数

默认情况下,matplotlib.pyplot不会直接显示图像,只有调用plt.show()函数时,图像才会显示出来。plt.show()默认是在新窗口打开一幅图像,并且提供了对图像进行操作的按钮。

ipython命令行魔法命令

使用这些魔法命令,在jupyter notebook中不用plt.show()也可以显示图片

不过在实际运用中,还是习惯用plt.show()

👉这里还有个博主的总结

​ 里面说%matplotlib inline适合导出为markdown

​ 很奇怪,为啥我啥也没加,也没有用plt.show()就能绘图啊

这和我用了%matplotlib inline之后的效果一样

%matplotlib notebook

这个好用!可以生成可交互的图片

弊端:

确实是这样子,我两个图到一起去了

​ 我用%matplotlib auto好像也是这个效果,而且也会两个图到一起去

还有个老外的很棒的总结

2.plt.plot()函数

基本用法

指定x和y:plt.plot(x,y)

①默认参数 x为0~N-1, plt.plot(y)

x可以默认不写,下面例子,列表的索引会作为x的取值,而列表中的值作为y的取值

​ 但是,当绘制多条曲线时,各条曲线的x值不能省略!!!(见后文)

plt.show([1,2,3,4])

​ 图片在上面plt.show()那里

plt.plot([1,29,19])

x是索引0,1,2

②x,y都给定

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

​ 如果用plt.show(),那就会直接显示图片,内存地址不会显示

③指定x、y轴名称

plt.plot([1,29,19])
plt.ylabel('y')
plt.xlabel('x')

指定中文名称

直接把刚刚的改成x轴,y轴,会发现显示不出来


④字符参数

常用颜色字符参数
字符颜色
’b’blue
‘g’green
‘r’red
‘c’cyan,青色
‘m’magenta,品红
k’black
‘w’white
‘y’yellow
类型字符参数
字符类型字符类型
‘-’实线‘–’虚线
‘-.’虚点线‘:’点线
‘.’‘,’像素点
‘o’(里面是字母o)圆点‘v’下三角点
‘^’上三角点‘<’左三角点
‘>’右三角点‘1’下三叉点
‘2’上三叉点‘3’左三叉点
‘4’右三叉点‘s’正方点
‘p’五角点‘*’星形点
‘h’六边形点1‘H’六边形点2
‘+’加号点‘x’乘号点
‘D’实心菱形点‘d’瘦菱形点
‘_’横线点
例如:红色圆点
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.show()

青色乘号点

⑤显示范围

由前面的例子可以看出,第一个点和最后一个点都在图像的边缘,所以要改变轴的显示范围

axis函数

语法:plt.axis([xmin,xmax,ymin,ymax])

plt.plot([1,2,3,4],[1,4,9,16],'mo--')
plt.axis([-1,6,-1,20])
plt.show()

注:

​ 格式控制的几个参数的位置可以随意,如'mo--''m--o'--mo等价

⑥传入numpy数组

传入numpy数组比传入列表更常用

​ In fact,传入的即使是列表,matplotlib也会在内部将其转化为数组进行处理

t=np.arange(0.,5.,0.2)
#从0到4.8,步长为0.2(5是开区间,左闭右开取不到5)
plt.plot(t,2*t,'g-.')
plt.show()
多条线画在一个图里面

直接在plt.plot里面加就好了

t=np.arange(0.,5.,0.2)
#从0到4.8,步长为0.2(5是开区间,左闭右开取不到5)
plt.plot(t,2*t,'g-.',2*t,t**2,'b_')
plt.show()

t=np.arange(0.,5.,0.2)
#从0到4.8,步长为0.2(5是开区间,左闭右开取不到5)
plt.plot(t,2*t,'g-.',2*t,t**2,'b_',0.5*t,t**3,'ks')
plt.show()

⑦线条属性

字符参数那里是通过字符串来控制线条属性,其实可以用关键字来调节属性

  • linewidth调节线条宽度
  • color调节线条颜色
x=np.linspace(-np.pi,np.pi)#从-3.14到3.14
y=np.sin(x)
plt.plot(x,y,linewidth=4,color='c')
plt.show()

⑧用plt.plot()的返回值来设置线条属性

plot()函数返回值返回的是Line2D对象组成的列表,每个对象代表输入的一对组合,如:

  • line1,line2为两个Line2D对象
x=np.linspace(-np.pi,np.pi)#从-3.14到3.14
y=np.sin(x)
line1,line2=plt.plot(x,y,'r',x,y+1,'m')
#对line1进行调整
#antialiased 抗锯齿,改成False之后线条就变得没有那么光滑,变得比较毛糙
line1.set_antialiased(False)
plt.show()

  • lines是3个line2D对象组成的列表
lines=plt.plot(x,y,'r',x,y+1,'m')
lines

可以看出lines是一个列表

**此时无法直接对列表进行修改属性的操作!**若直接操作会报错!

那放入列表就不能操作了吗?非也

加上索引就取出对象了吖!❤️

lines[0].set_antialiased(False)

⑨plt.setp()修改线条性质

这个方法比较方便

x=np.linspace(-np.pi,np.pi)#从-3.14到3.14
y=np.sin(x)
line=plt.plot(x,y)
#默认是蓝色
#第一个参数是要修改的对象
plt.setp(line,color='g',linewidth=10)

还可以写成下面这种类似于matlab风格的形式

plt.setp(line,'color','g','linewidth',10)

3.子图

figure

figure()函数会产生一个指定编号为num的图:plt.figure(num)

若num为1,可以省略,因为plt默认产生一幅图

subplot

使用subplot可以在一幅图中生成多个子图,其参数为:plt.subplot(numrows,numcols,fignum)

numrows*numcols<10,中间逗号可以省略,如plt.subplot(211)就是plt.subplot(2,1,1)

​ 意思是2行1列,画其中的第一张图

#计算函数
def f(t):
    return np.exp(-t)*np.cos(2*np.pi*t)
t1=np.arange(0.0,5.0,0.1)
t2=np.arange(0.0,5.0,0.02)
#plt.figure生成一张空白图,生成尺寸为10✖15的空白图
plt.figure(figsize=(10,15))
#两行一列 画第一个子图
plt.subplot(211)
#子图一中包含两张图, 其中第二个用的是黑色,默认实线
plt.plot(t1,f(t1),'bo',t2,f(t2),'k')

#两行一列,画第二个子图
plt.subplot(212)
plt.plot(t1,-f(t1),'c--')

#计算函数
def f(t):
    return np.exp(-t)*np.cos(2*np.pi*t)
t1=np.arange(0.0,5.0,0.1)
t2=np.arange(0.0,5.0,0.02)
#plt.figure生成一张空白图,生成尺寸为10✖15的空白图
plt.figure(figsize=(10,10))
#两行一列 画第一个子图
plt.subplot(231)
#默认实线
plt.plot(t1,f(t1),'bo',t2,f(t2),'k')
plt.subplot(233)
plt.plot(t1,-f(t1),'c--')
#两行一列,画第二个子图
plt.subplot(235)
plt.plot(t1,-f(t1),'c--')

二.遇到的问题

1.导包

一开始导包的时候写成了import matplotlib as plt

应该写成import matplotlib.pyplot as plt

2.下载图片

用%matplotlib atuo或%matplotlib notebook弄出来的可交互图片有个下载按钮,但我点出来就是一个空白网页…无反应

目前还不知道为啥不能下载

3.plt.plot多个返回值那里

  • 我如果用线条属性linewidth,color就会报这种错

  • 但是如果我用字符参数来控制属性就不会报错

  • 还有,一条是不会报错的

🤨🤨🤨❓

以上是关于matplotlib入门的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib常用绘图示例入门

Python数据可视化利器Matplotlib从入门到高级4

Matplotlib

Matplotlib光速入门-从安装到常用实战

推荐net开发cad入门阅读代码片段

Matplotlib 入门