前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matplotlib

matplotlib

作者头像
h3110_w0r1d
发布2024-02-19 19:21:18
1090
发布2024-02-19 19:21:18
举报

实例代码

代码语言:javascript
复制
# 导入 matplotlib 的所有内容(nympy 可以用 np 这个名字来使用)
from pylab import *

# 创建一个 8 * 6 点(point)的图,并设置分辨率为 80
figure(figsize=(8,6), dpi=80)

# 创建一个新的 1 * 1 的子图,接下来的图样绘制在其中的第 1 块(也是唯一的一块)
subplot(1,1,1)

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)

# 绘制余弦曲线,使用蓝色的、连续的、宽度为 1 (像素)的线条
plot(X, C, color="blue", linewidth=1.0, linestyle="-")

# 绘制正弦曲线,使用绿色的、连续的、宽度为 1 (像素)的线条
plot(X, S, color="green", linewidth=1.0, linestyle="-")

# 设置横轴的上下限
xlim(-4.0,4.0)

# 设置横轴记号
xticks(np.linspace(-4,4,9,endpoint=True))

# 设置纵轴的上下限
ylim(-1.0,1.0)

# 设置纵轴记号
yticks(np.linspace(-1,1,5,endpoint=True))

# 以分辨率 72 来保存图片
# savefig("exercice_2.png",dpi=72)

# 在屏幕上显示
show()

设置底层图片的大小

  1. figsize()函数设置散点图是几×几大小的
  2. dpi设置分辨率(像素)像素的定义:
  3. 在由一个数字序列表示的图像中的一个最小单位
  4. 当像素点的大小一定时,像素点约多,照片越大改变线条的颜色和粗细
  5. plot()函数
  6. color参数设置颜色
  7. linewidth参数设置线条粗细
  8. linestyle参数设置线条风格

plot函数详解:

  1. plt.plot(x,y,linestyle=’-‘,linewidth=’x’,label=’xxx’,color=’xxx’)
  2. x:x轴上的值
  3. y:y轴上的值
  4. linestyle:线条风格
  5. linewidth:线条粗细
  6. label:标签文本
plot函数常见问题:
代码语言:javascript
复制
x and y must have same first dimensition,but have shapes (4,) and (6,)
  1. 意为:x和y必须参数的个数相同(个数不相同,有的只有一个坐标你怎么画点呢?)
Lg0l1U.md.png
Lg0l1U.md.png
  1. ing

linestyle参数

代码语言:javascript
复制
'-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'

设置图片边界

设置记号

r表示不需要转义,raw(生的),LATEX用法,python中使用latex,需要在文本的后面加上$,\pi会转义为pi

代码语言:javascript
复制
xticks(lis,[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$-\pi$',r'$-\pi$'])

后面数组中的每一个元素都与前面元素一一对应

设置轴:

matplotlib的图中,默认有四个轴,两个横轴和两个竖轴,通过ax.plt.gca()方法获取,gca是get current axes的缩写(axes是轴的意思)

总共有四个轴:top,bottom,left,right

由于axes会获取到四个轴,而我们只需要两个轴,所以我们需要把另外两个轴隐藏,把顶部和右边轴的颜色设置为none,将不会显示

代码语言:javascript
复制
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

将会看见top和right边被隐藏

移动下面和左边的轴到指定的位置

具体函数:ax.spines[‘四个轴的位置’].set_position(‘值的类型’,具体值)
代码语言:javascript
复制
一定一定要注意,spines后面是[]而非(),set_position後面是()
我對此的理解為:[]表示选择,ax在gca()时已经初始化了,[]是在top,bottom,left和right中的选择;()表示需补充参数,参数未经过初始化
区分选择和补充的含义
以下是set_position中各种值的类型

data:移动轴的位置到交叉轴的指定坐标

outward:不太懂

axes:0.0~1.0之间的值,整个轴上的比例

center:(‘axes’,0.5)

zero:(‘data’,0.0)

代码语言:javascript
复制
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
LrlVm9.png
LrlVm9.png
LrlZwR.png
LrlZwR.png

由上图可看出,这个轴其实不是坐标轴,而是图形的边界

我认为:top和right的轴是图形的边界,不能够改变坐标轴

而left和bottom可以改变坐标轴的位置,参数如上图所示

添加图例:

在plot函数中以[键-值] 的形式增加一个参数

代码语言:javascript
复制
plot(X,S,color="blue",linewidth=2.5,linestyle="-",lable="图例名称")
legend(loc="位置")

legend位置参数:upper,bottom,left,right

常用legend函数参数:

loc:图例位置

fontsize:字体大小

edgecolor: frame edgecolor

facecolor: frame facecolor

特殊点添加注释:函数scatter(意为分散的点)

前提:x,y轴包括数值以及大小和颜色

https://www.jb51.net/article/127806.htm

代码语言:javascript
复制
scatter([t,],[np.cos(t),],50,color='blue')

scatter(x,y,[size],[color],[marker])

scatter参数详解:

x,y:形如shape[n,]不全的数组,即添加注释点的位置

size:直接给出点的大小,标量或者形如shape[n,]的数组

color:色彩或颜色序列

marker:markstyle,可选,默认’o’

annotate参数详解

代码语言:javascript
复制
annotate(s,xy,xytext=None,xycoords='data',textcoords=None)

s:被注释内容

xy:被注释的坐标点,二维元组形如[x,y]

xytext:注释文本的坐标点,也是二维元组,默认与xy相同

xycoords:被注释点的坐标系属性

textcoords设置注释文本的坐标系属性

代码语言:javascript
复制
annotate(r'$sin(\frac{2\pi}{3})'=\frac{\sqrt{3}}{2}$',xy=(t,np.sin(t)),xycoords='data',xytext=(+10,+30),textcoords='offset points')

看过李师哥的备课后的补充

构建画框的骨架的两种方法:

代码语言:javascript
复制
fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])

代码语言:javascript
复制
fig = plt.figure()
ax = gca()//初始化四个轴
left = bottom = 0.1
right = top = 0.8
ls = [left,bottom,right,top]
for i in ls:
ax.spines[top].set_position(i)

子图的划分

如果两个图片的x轴的范围不同的情况下,放在同一张画布下是不易显示的

格式一

代码语言:javascript
复制
figure = plt.figure()
plt.subplot(nrows,ncols,plot_number)

其中nrows表示要划分的行数

ncols表示要划分的列数

plot_number表示当前的子图区

代码语言:javascript
复制
from pylab import *
x = []
y = []
figure = figure((m,n),dpi)//创建一个m*n点的图像
axes1 = figure.add_subplot(2,1,1)//划分为两行,将第一行作为当前需要描绘的子图区
plot(x,y)
x = []
y = []
axes2 = figure.add_subplot(2,1,2)//选取第二块子图区
plot(x,y)
show()

plt.rcParams属性总结

  1. plt使用rc配置文件;来自定义图形的各种观点默认属性,称之为rc配置或rc参数,通过rc参数可以修改默认的属性,包括窗体大小,每英寸的点数,线条宽度,颜色,样式,坐标轴坐标,网络属性,文本,字体
  2. plt.rcParams[‘font.sans-serif’] = ‘SimHei’设置字体
  3. plt.rcParams[‘axes.unicode_minus’] = False字符显示:减号使用unicode编码而不是连字符号

设置中文字体:

plt.rcParams[‘font.san-serif’]=[‘SimHei’]:SimHei是设置字体为黑体

plt.rcParams[‘axes.unicode_minus’] = False设置字符显示

这个地方的unicode_minus我的理解为减去unicode即为不使用Unicode编码

如果设置为false,则负负得正,使用Unicode编码

获取用户配置路径

代码语言:javascript
复制
import matplotlib
matplotlib.get_gonfigdir()

获取用户当前使用配置文件的路径

代码语言:javascript
复制
import matplotlib
matplotlib.matplotlib_fname()

查看rc参数的方法与rc参数的使用

查看:

代码语言:javascript
复制
import matplotlib as mpl
print(mpl.rcParams)

修改:(用中括号去取下标)

代码语言:javascript
复制
import matplotlib
matplotlib.rcParams['具体参数名称'] = xxx

通过matplotlib.rc一次设置多个参数

代码语言:javascript
复制
import matplotlib
matplotlib.rc('lines',linewidth=2,color='red')

rc参数说明:

代码语言:javascript
复制
lines.linewidth:线宽
lines.linestyle:线的风格
lines.color:线的颜色
lines.marker:None 默认标记
lines.markersize:标记大小
lines.antialiased:True 使用抗锯齿渲染:没有缺口
rc参数字体属性:

font.family

font.style:normal(roman),italic,oblique

font.variant:normal,small-caps

font.weight:normal,bold,bolder,lighter,100,200,300…900

font.stretch

font.size:默认字体大小,以磅为单位

网格:

代码语言:javascript
复制
grid.color:网格颜色
grid.linestyle:点
grid.linewidth:pt
具体参数详见博客地址
代码语言:javascript
复制
https://www.cnblogs.com/shuaishuaidefeizhu/p/14035247.html

思路

  1. 引入matpoltlib库
  2. 创建一个图作为背景figure
  3. x轴坐标,y轴坐标
  4. plot绘制曲线
  5. 设置横轴上下限xlim
  6. 设置横轴记号和纵轴记号
  7. 保存图片savefig
  8. 在屏幕上显示show

正弦函数图像

代码语言:javascript
复制
from pylab import *
figure(figsize=(8,6),dpi=80)
x = np.linspace(-np.pi,np.pi,256,endpoint=True)
y = np.sin(x)
plot(x,y,color='blue',linewidth='10',linestyle='-')
xlim(-4.0,4.0)
ylim(-1.0,1.0)
xticks(np.linspace(-4,4,9,endpoint=True))
yticks(np.linspace(-1.0,1.0,3,endpoint=True))
ax = gca()
ax.spines['right'].set_color('None')
ax.spines['top'].set_color('None')
ax.spines['bottom'].set_position(('axes',0.5))
ax.spines['left'].set_position(('axes',0.5))
show()

二次曲线图像

代码语言:javascript
复制
from pylab import *
from numpy import *
x = np.linspace(-1,1,66,endpoint=True)

y = x**2
plot(x,y,linestyle='-',lw='10',color='blue')

show()

正余弦函数图像

代码语言:javascript
复制
from pylab import *
fig = figure(figsize=(8,6),dpi=80)#dpi参数是分辨率
fig.add_axes([0.1,0.1,0.8,0.8])

subplot(1,1,1)#创建一个1*1子图,接下来图样的绘制在第一块

x = np.linspace(-np.pi,np.pi,256,endpoint=True)
c,s = np.cos(x),np.sin(x)
plot(x,c,color="blue",linewidth=1.0,linestyle="solid",label="cosine")

plot(x,s,color="green",linewidth=1.0,linestyle="dotted",label="sine")

legend(loc='upper left',fontsize="18")
xlim(-4.0,4.0)

lis = ([-np.pi,-np.pi/2.0,0,np.pi/2.0,np.pi])

#xticks(np.linspace(-4,4,9,endpoint=True))

ylim(-1.0,1.0)
#yticks(np.linspace(-4,4,9,endpoint=True))
#xticks(lis)
xticks(lis,[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$-\pi$',r'$-\pi$'])#r表示不需要转义,raw(生的),LATEX用法,python中使用latex,需要在文本的后面加上$,\pi会转义为pi
yticks(lis)

ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('axes',0.5))
ax.spines['left'].set_position(('axes',0.5))

t = 2*np.pi/3
plot([t,t],[0,np.cos(t)],color='blue',linewidth=2.5,linestyle='--')
scatter([t,],[np.cos(t),],50,color='blue')

t = 2*np.pi/3
plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
scatter([t,],[np.cos(t),], 50, color ='blue')

annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
         xy=(t, np.sin(t)), xycoords='data',
         xytext=(+10, +30), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
scatter([t,],[np.sin(t),], 50, color ='red')

annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
         xy=(t, np.cos(t)), xycoords='data',
         xytext=(-90, -50), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

show()

将一个figure对象划分为6个子图,分别绘制不同的曲线,不同的颜色和标记的线条

代码语言:javascript
复制
from pylab import *
x = [1,2,3,4,5,6]
y = [3,5,7,1,9,12]
figure = figure(figsize=(8,6),dpi = 80)
axes1 = figure.add_subplot(2,3,1)
axes2 = figure.add_subplot(2,3,2)
axes3 = figure.add_subplot(2,3,3)
axes4 = figure.add_subplot(2,3,4)
axes5 = figure.add_subplot(2,3,5)
axes6 = figure.add_subplot(2,3,6)
axes1.plot(x,y,'ro')
axes2.plot(x,y,'r-*')
axes3.plot(x,y,'bs')
axes4.plot(x,y,'^g-.')
axes5.plot(x,y,'m8')
axes6.plot(x,y,'yd:')
show()
  1. plot中的线条的线性,标记的符号和线条的颜色参数的前后位置没有要求

条形图

特点:

  1. 在条形图中可以非常直观地通过位置比较比较数值大小,因为在条形图中条的高度就是数值,所以一眼就可以看出数值的高度

函数

代码语言:javascript
复制
bar(x,height,width,bottom)

参数:

(x,height)定义在什么位置上,多高的bar(这个地方的高度其实是条形图的宽度,因为是躺着的,所以叫高度)

width定义bar的宽度(这个地方的宽度是条形图的高度,因为是躺着的,座椅叫做宽度)

bottom定义bar的实际高度(我的理解是bar的实际底在哪里)

默认参数:

height:柱子的高度,y轴上的坐标

width:柱子的宽度,默认值是0.8

bottom:柱子的基准高度,浮点数或者类数组结构,默认值为0

bar orientation:给定的是一个向量,该向量指定单元局部坐标系的纵轴方向

条形图实例

代码语言:javascript
复制
from pylab import *
x = [1,2,3,4,5,6]
y = [2,3,54,6,7,4]
figure = figure(figsize=(8,6),dpi = 80)
bar(x,y)
show()

横向条形图实例

代码语言:javascript
复制
from pylab import *
x = [1,2,3,4,5,6]
y = [3,5,1,7,9,12]
#x指定其实位置从0开始,bottom指定水平条其实位置为左侧,height指定绘图的水平条的宽度,width指定绘制的水平条的长度,orientation指定要绘制的是水平条,color指定颜色
bar(x=0,bottom=y,height=0.3,width=x,orientation='horizontal',color='red')
show()

注意重叠问题:

在绘制多组条形图进行对比时需要注意一点,bar_width的范围是(0,1)没错,但是多组图表需要保证几组图表的范围之和不超过1(范围之和!和!!和!!!)

代码语言:javascript
复制
```

## 2022/11再复习

1.   导入包

2.   ```python
     import matplotlib.pyplot as plt
     import numpy as np

划分数据,从哪到哪平均分为几份,使用numpy库中的linespace函数

```python x = np.linespace(-1,1,50)

代码语言:javascript
复制
5.   新建图表

6.   ```python
     plt.figure(num=1,figsize=(8,5),dpi=10)
     # figsize用来设置图像大小
     # num用来设置图像是第几个,编号为几

设置坐标轴的范围,matplotlib库中的xlim和ylim函数,x-limit和y-limit

```python plt.xlim((-1,2)) plt.ylim((-2,3))

代码语言:javascript
复制
9.   设置坐标轴上单位的小标

10.   ```python
    # 设置单位的小标
    new_ticks = np.linspace(-1,2,5)
    plt.xticks(new_ticks)
    plt.yticks([-2,-1.8,-1,1.22,3],
               [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])

设置x轴和y轴的名字,matplotlib库中的xlabel和ylabel

```python plt.xlabel(‘i am x’) plt.ylabel(‘i am y’)

代码语言:javascript
复制
13.   设置单位的小标,使用xticks和yticks来设置横坐标和纵坐标

14.   ```python
      new_ticks = np.linspace(-1,2,5)
      plt.xticks(new_ticks)

gca = ‘get current axis’

```python ax = plt.gca()

将右边和上边的坐标轴颜色设置为空,不显示

ax.spines[‘right’].set_color(‘none’) ax.spines[‘top’].set_color(‘none’)

将x轴设置为底部bottom,将y轴设置为顶部top

ax.xaxis.set_ticks_position(‘bottom’) ax.xaxis.set_ticks_position(‘left’)

将x轴和y轴(底轴和左轴的位置设置为坐标原点)

ax.spines[‘bottom’].set_position((‘data’,0)) ax.spines[‘left’].set_position((‘data’,0))

代码语言:javascript
复制
17.   添加legend图例

18.   ```
      l1 = plt.plot(x,y2,label='注记名称') # x,y2用来选择某条线
      l2 = plt.plot(x,y1,label='注记名称') # 前两个参数可以确定某条线
      #legend函数用来画出图例
      plt.legend()
      # 其中loc=''参数默认是best,会自动选择不会挡住图像的最佳位置
      # labels=['1','2'] 图像标注会覆盖掉plt.plot函数中的label
      # handles=[]参数会选择要画的线,其中画的线由plt.plot函数赋值

添加Annotation标注,特别标注某个点并给出文字

```python x0 = 1 y0 = 2 * x0 + 1 plt.Scatter(x0,y0,s=50,color=’blue’) # Scatter用来画出点,s用来设置Scatter.size,color用来设置颜色 plt.plot([x0,x0],[y0,0],’k–’,lw=2.5) # [从.x,到.x][从.y,到.y]

代码语言:javascript
复制
22.   ```python
      import matplotlib.pyplot as plt
      import numpy as np
      
      x = np.linspace(-1,1,50)
      
      y1 = 2*x + 1
      y2 = x**2
      
      plt.figure()
      # 设置坐标轴的范围
      plt.xlim((-1,2))
      plt.ylim((-2,3))
      
      # 设置x轴和y轴的名字
      plt.xlabel('i am x')
      plt.ylabel('i am y')
      
      # 设置单位的小标
      new_ticks = np.linspace(-1,2,5)
      plt.xticks(new_ticks)
      plt.yticks([-2,-1.8,-1,1.22,3],
                 [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])
      
      plt.plot(x,y1)
      plt.plot(x,y2)
      
      ax = plt.gca()
      ax.spines['right'].set_color('none')
      ax.spines['top'].set_color('none')
      
      ax.xaxis.set_ticks_position('bottom')
      ax.yaxis.set_ticks_position('left')
      
      ax.spines['bottom'].set_position(('data',0))
      ax.spines['top'].set_position(('data',0))
      
      # 添加legend图例
      plt.plot(x,y1,label='2*x+1')
      plt.plot(x,y2,label='x**2')
      plt.legend()
      
      plt.show()

numpy数组

  1. numpy用于处理数组,对象称为ndarray
  2. 可以用array()函数创建一个numpy ndarray对象
代码语言:javascript
复制
arr = np array([1,2,3,4,5])
print(arr)
print(type(arr))

numpy和list的区别:

  1. 内存大小–numpy数据结构占用的内存空间更小
  2. 性能–numpy底层是用c写的,比列表更快
  3. 运算方法–内置优化了代数运算等方法

np.linspace函数

代码语言:javascript
复制
from pylab import *
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
c,s = np.cos(x),np.sin(x)
  1. linspace函数:指定的间隔内返回均匀间隔的数字
  2. endpoint:bool类型,如果为true则包含stop,否则不包含stop(结尾点)

参数:

  1. start:序列的起始点
  2. end:序列的终止点,如果endpoint设置为true,则包含最后一个点(全闭区间)
  3. num:生成的样本数,默认是50,必须为非负

网上的大部分解释

  1. pyplot:方便快速绘图,matplotlib通过pyplot模块提供了与一套和MATLAB类似的绘图API,将众多绘图对象构成的复杂结构隐藏在这套API内部 2, pylab:matplotlib还提供了一个名为pylab的模块,其中包含许多Numpy和pyplot模块中常用的函数

作用:

  1. pylab = pyplot+大部分numpy
  2. 也就是说pylab只是提供了一个方便的导入常用包的接口

和matlab的区别:

  1. 在matlab中,画了一条线以后,如果想接着画另一条线,则需要hold on函数
  2. python中直接画即可
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实例代码
    • 设置底层图片的大小
      • plot函数详解:
      • linestyle参数
    • 设置图片边界
      • 设置记号
        • 设置轴:
          • 由于axes会获取到四个轴,而我们只需要两个轴,所以我们需要把另外两个轴隐藏,把顶部和右边轴的颜色设置为none,将不会显示
          • 移动下面和左边的轴到指定的位置
        • 添加图例:
          • 常用legend函数参数:
        • 特殊点添加注释:函数scatter(意为分散的点)
          • scatter参数详解:
          • annotate参数详解
      • 看过李师哥的备课后的补充
        • 构建画框的骨架的两种方法:
          • 子图的划分
            • 格式一
          • plt.rcParams属性总结
            • 设置中文字体:
            • 获取用户配置路径
            • 获取用户当前使用配置文件的路径
            • 查看rc参数的方法与rc参数的使用
        • 思路
        • 正弦函数图像
        • 二次曲线图像
        • 正余弦函数图像
        • 将一个figure对象划分为6个子图,分别绘制不同的曲线,不同的颜色和标记的线条
        • 条形图
          • 特点:
            • 函数
              • 参数:
              • 条形图实例
              • 横向条形图实例
              • 注意重叠问题:
          • 将右边和上边的坐标轴颜色设置为空,不显示
          • 将x轴设置为底部bottom,将y轴设置为顶部top
          • 将x轴和y轴(底轴和左轴的位置设置为坐标原点)
          • numpy数组
          • numpy和list的区别:
          • np.linspace函数
            • 参数:
            • 网上的大部分解释
            • 作用:
            • 和matlab的区别:
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档