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入门的主要内容,如果未能解决你的问题,请参考以下文章