数据可视化:Matplotlib详解及实战

 1 Matplotlib介绍

 Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表。

Matplotlib提供了一个套面向绘图对象编程的API接口,能够很轻松地实现各种图像的绘制,并且它可以配合Python GUI工具(如 PyQt、Tkinter 等)在应用程序中嵌入图形。同时 Matplotlib 也支持以脚本的形式嵌入到 IPython shell、Jupyter 笔记本、web 应用服务器中使用。

1.1 Matplotlib架构组成

matplotlib框架分为三层,这三层构成了一个栈,上层可以调用下层。

1.1.1 脚本层

主要用于可视化编程,pytplot模块可以提供给我们一个与matplotlib打交道的接口。可以只通过调用pyplot模块的函数从而操作整个程序包,来绘制图形。

  • 操作或者改动Figure对象,例如创建Figure对象
  • 大部分工作是处理样本文件的图形与坐标的生成

1.1.2 美工层

图形中所有能看到的元素都属于Artist对象,即标题、轴标签、刻度等组成图形的所有元素都是Artist对象的实例。

  • Figure:指整个图形(包括所有的元素,比如标题、线等)。
  • Axes(坐标系):axes是子图对象,子图对象指的是x和y轴。axes 常用有set_xlabel()、set_ylabel()设置x和y轴坐标名字。
  • Axis(坐标轴):坐标系中的一条轴,包含大小限制、刻度和刻度标签。

一个figure(图)可以包含多个axes(坐标系),但是一个axes只能属于一个figure。一个axes(坐标系)可以包含多个axis(坐标轴),包含两个即为2d坐标系,3个即为3d坐标系。

1.1.3 后端层

matplotlib的底层,实现了大量的抽象接口类,这些API用来在底层实现图形元素的一个个类。

  • FigureCanvas对象实现了绘图区域这一概念。
  • Renderer对象在FigureCanvas上绘图。

1.2 Pyplot介绍

通过Pyplot 对数据进行图形化展示,可以直观的了解数据的分布情况,更好的制定出学习方法。同时,它还可以展示出我们机器学习到的计算方法,了解其与实际情况是否相符等问题。

  • Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。
  • Pyplot 是常用的绘图模块,能很方便让用户绘制 2D 图表。
  • Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改,例如:给图像加上标记,生成新的图像,在图像中产生新的绘图区域等等。

Pyplot 绘图流程如下:

2 Pyplot函数

Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改

  • plot():用于绘制线图和散点图
  • scatter():用于绘制散点图
  • bar():用于绘制垂直条形图和水平条形图
  • hist():用于绘制直方图
  • pie():用于绘制饼图
  • imshow():用于绘制图像
  • subplots():用于创建子图

2.1 plt.plot参数说明

plt.plot(x,y,format_string,**kwargs)

`plt.plot()`函数是Matplotlib库中用于绘制线条图的函数,它有多个参数可以控制绘图的各个方面。以下是常用的一些参数:

  • x: x轴数据的列表或数组
  • y: y轴数据的列表或数组
  • linewidth: 线条的宽度,从0到无穷大的浮点数,例如2.5
  • color: 线条的颜色,可以是字符串、元组或RGBA值,代表不同的颜色。例如:红色'red'、绿色'green'、蓝色'blue'、黑色'black'、白色'white'、灰色'gray'等;RGB元组(0, 0, 1)表示蓝色,RGBA元组(0, 1, 0, 0.5)表示半透明的绿色
  • linestyle: 线条的样式,可以是字符串,如实线'-'、虚线'--'、点线':'、破折线'-.'等

  '-': 实线

  '--': 虚线

  '-.': 点划线

  ':': 点线

  '': 无线条,只显示标记

  'None': 无线条,不显示标记

  ' ': 无线条,不显示标记

  • marker: 数据点的标记样式
标记字符说明标记字符说明标记字符说明
' . '点标记' 1 '下花三角' h '竖六边形
' , '像素标记' 2 '上花三角' H '横六边形
' o '实心圆' 3 '左花三角' + '十字标记
' v '倒三角' 4 '右花三角' x 'x标记
' ^ '上三角' s '实心方形' D '菱形标记
' > '右三角' p '实心五角' d '菱形标记
' < '左三角' * '星形标记' | '直线标记

  • markersize: 标记的大小,从0到无穷大的浮点数,例如7.5
  • label: 字符串类型,代表绘制的线条的标签,在图例中显示。例如Line 1
  • alpha: 线条和标记的透明度,从0到1的浮点数,表示线条和标记的透明度。例如0.5
  • zorder: 整数类型,表示绘图的层数,数值越大越靠上。例如2

还有一些其他参数:

  • solid_capstyle: 实线端点的样式,如普通平直样式"butt"、圆角样式"round"、斜角样式"projecting"等
  • dash_capstyle: 虚线端点的样式,与solid_capstyle类似
  • dash_joinstyle: 虚线连接处的样式,如圆弧连接"round"、斜接连接"bevel"、锐角连接"miter"等
  • solid_joinstyle: 实线连接处的样式,与dash_joinstyle类似
  • markevery: 标记显示的间隔,可以是数字、元组或者函数,可以是数字、元组或者函数。例如:每隔一个数据点标记一个点:markevery=2;从第二个开始,每个5个数据点标记一个点:markevery=(1, 5);根据某个函数的返回值来控制标记的位置:markevery=lambda i: i%3==0

`plt.plot()`函数的参数比较多,不同的参数组合可以实现各种各样的效果。

2.2 plt.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 → 散点的坐标,float or array-like, shape (n, )
  • s → 散点的面积,float or array-like, shape (n, ), optional
  • c → 散点的颜色(默认值为蓝色,'b',其余颜色同plt.plot( ))
  • marker → 散点样式(默认值为实心圆,'o',其余样式同plt.plot( ))
  • alpha → 散点透明度([0, 1]之间的数,0表示完全透明,1则表示完全不透明)
  • linewidths →散点的边缘线宽
  • edgecolors → 散点的边缘颜色

2.3 plt.bar参数说明

bar(x, height, width=0.8, bottom=None, ***, align='center', data=None, **kwargs)
  • x 表示x坐标,数据类型为int或float类型,
  • height 表示柱状图的高度,也就是y坐标值,数据类型为int或float类型,
  • width 表示柱状图的宽度,取值在0~1之间,默认为0.8
  • bottom 柱状图的起始位置,也就是y轴的起始坐标,
  • align 柱状图的中心位置,"center","lege"边缘
  • color 柱状图颜色
  • edgecolor 边框颜色
  • linewidth 边框宽度
  • tick_label 下标标签
  • log 柱状图y周使用科学计算方法,bool类型
  • orientation 柱状图是竖直还是水平,竖直:"vertical",水平条:"horizontal"

 2.4 plt.hist参数说明

matplotlib.pyplot.hist(  x, bins=10, range=None, normed=False,   weights=None, cumulative=False, bottom=None,   histtype=u'bar', align=u'mid', orientation=u'vertical',   rwidth=None, log=False, color=None, label=None, stacked=False,   hold=None, **kwargs)  
  • x : (n,) array or sequence of (n,) arrays,这个参数是指定每个bin(箱子)分布的数据,对应x轴
  • bins : integer or array_like, optional,这个参数指定bin(箱子)的个数,也就是总共有几条条状图
  • normed : boolean, optional,If True, the first element of the return tuple will be the counts normalized to form a probability density, i.e.,n/(len(x)`dbin),这个参数指定密度,也就是每个条状图的占比例比,默认为1
  • color : color or array_like of colors or None, optional,这个指定条状图的颜色

3.5 plt.pie参数说明

pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None)
  • x: 数组序列,数组元素对应扇形区域的数量大小。
  • labels: 列表字符串序列,为每个扇形区域备注一个标签名字。
  • colors; 为每个扇形区域设置颜色,默认按照颜色周期自动设置。
  • autopct: 格式化字符串"fmt%pct",使用百分比的格式设置每个扇形区的标签,并将其放置在扇形区内。
  • pctdistance:设置百分比标签与圆心的距离;
  • labeldistance:设置各扇形标签(图例)与圆心的距离;
  • explode: 指定饼图某些部分的突出显示,即呈现爆炸式;()
  • shadow:是否添加饼图的阴影效果

2.6 plt.imshow参数说明

matplotlib.pyplot.imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None,extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, hold=None, data=None, **kwargs)
  • X:图像数据。支持的数组形状是:

    • (M,N) :带有标量数据的图像。数据可视化使用色彩图。
    • (M,N,3) :具有RGB值的图像(float或uint8)。
    • (M,N,4) :具有RGBA值的图像(float或uint8),即包括透明度。
      前两个维度(M,N)定义了行和列图片,即图片的高和宽;
      RGB(A)值应该在浮点数[0, ..., 1]的范围内,或者
      整数[0, ... ,255]。超出范围的值将被剪切为这些界限。
  • cmap:将标量数据映射到色彩图,颜色默认为:rc:image.cmap
  • norm :~matplotlib.colors.Normalize,如果使用scalar data ,则Normalize会对其进行缩放[0,1]的数据值内。默认情况下,数据范围使用线性缩放映射到颜色条范围。 RGB(A)数据忽略该参数。

  • aspect:{'equal','auto'}或float,可选,控制轴的纵横比。该参数可能使图像失真,即像素不是方形的。equal:确保宽高比为1,像素将为正方形。(除非像素大小明确地在数据中变为非正方形,坐标使用 extent )。auto: 更改图像宽高比以匹配轴的宽高比。通常,这将导致非方形像素。

  • interpolation:str,使用的插值方法,支持的值有:'none', 'nearest', 'bilinear', 'bicubic','spline16', 'spline36', 'hanning', 'hamming', 'hermite', 'kaiser','quadric', 'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc','lanczos'.如果interpolation = 'none',则不执行插值

  • alpha:alpha值,介于0(透明)和1(不透明)之间。RGBA输入数据忽略此参数。

  • vmin, vmax : scalar,如果使用* norm 参数,则忽略 vmin vmax *。vmin,vmax与norm结合使用以标准化亮度数据。
  • origin : {'upper', 'lower'},将数组的[0,0]索引放在轴的左上角或左下角。'upper'通常用于矩阵和图像。请注意,垂直轴向上指向“下”但向下指向“上”。
  • extent:(left, right, bottom, top)数据坐标中左下角和右上角的位置。 如果为“无”,则定位图像使得像素中心落在基于零的(行,列)索引上。

2.7 plt.subplots参数说明

matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
  • nrows,ncols:整型,可选参数,默认为1。表示子图网格(grid)的行数与列数。
  • sharex,sharey:布尔值或者{'none','all','row','col'},默认:False,控制x(sharex)或y(sharey)轴之间的属性共享:

   1.True或者'all':x或y轴属性将在所有子图(subplots)中共享.

   2.False或'none':每个子图的x或y轴都是独立的部分
   3.'row':每个子图在一个x或y轴共享行(row)
   4.'col':每个子图在一个x或y轴共享列(column)

当子图在x轴有一个共享列时('col'),只有底部子图的x tick标记是可视的。同理,当子图在y轴有一个共享行时('row'),只有第一列子图的y tick标记是可视的。

  • squeeze:布尔类型,可选参数,默认:True。

如果是True,额外的维度从返回的Axes(轴)对象中挤出。
        如果只有一个子图被构建(nrows=ncols=1),结果是单个Axes对象作为标量被返回。
        对于N*1或1*N个子图,返回一个1维数组。
        对于N*M,N>1和M>1返回一个2维数组。
如果是False,不进行挤压操作:返回一个元素为Axes实例的2维数组,即使它最终是1x1。

  • subplot_kw:字典类型,可选参数。把字典的关键字传递给add_subplot()来创建每个子图。
  • gridspec_kw字典类型,可选参数。把字典的关键字传递给GridSpec构造函数创建子图放在网格里(grid)。
  • **fig_kw:把所有详细的关键字参数传给figure()函数 

3 Matplotlib绘图

3.1 绘制一条直线

import matplotlib.pyplot as pltplt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()

我们为plot命令提供了一个list或者是array,matplotlib认为这个序列是Y轴上的取值,并且会自动生成X轴上的值。因为python中的范围是从0开始的,因此X轴就是从0开始,长度与Y的长度相同,也就是[0,1,2,3],所以显示如下:

 3.2 绘制一条折线

import matplotlib.pyplot as pltplt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.ylabel('some numbers')
plt.show()

plot的参数可以是任意数量,上面参数表示的是(x,y)对,(1,1)(2,4)(3,9)(4,16)。这里有第三个可选参数,它是字符串格式的,表示颜色和线的类型。它是颜色字符串和线的类型字符串的组合。默认情况下,该字符串参数是’b-‘,表示蓝色的实线。显示如下:

 3.3 绘制一个点集

import matplotlib.pyplot as pltplt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

'ro'表示红色圆圈绘制上述点集,显示如下:

3.4 通过numpy数据绘制多个点集

import numpy as np
import matplotlib.pyplot as plt# 0到5之间每隔0.2取一个数
t = np.arange(0., 5., 0.2)# 红色的破折号,蓝色的方块,绿色的三角形
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()

构建三组numpy数据,通过不同的样式展示出来,显示如下:

 3.5 绘制多图形(figures)和多坐标系(axes)

import numpy as np
import matplotlib.pyplot as pltdef 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("2subplot")
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()

pyplot所有的绘图命令都是应用于当前图形(figure)和当前坐标系(axes),分别在两个坐标系绘制一个图形,显示如下:

 3.6 绘图直方图

import numpy as np
import matplotlib.pyplot as pltmu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)# 直方图
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75)plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

text()命令可以被用来在任何位置添加文字,xlabel()、ylabel()、title()被用来在指定位置添加文字。所有text()命令返回一个matplotlib.text.Text实例,可以通过关键字参数在text()定制文本样式,也可以通过setp()来定制文字的样式: 

t = plt.xlabel('my data', fontsize=14, color='red')
setp(t,color='blue')

import matplotlib.pyplot as plt
import numpy as np# 生成三组随机数据
data1 = np.random.normal(0, 1, 1000)
data2 = np.random.normal(2, 1, 1000)
data3 = np.random.normal(-2, 1, 1000)# 绘制直方图
plt.hist(data1, bins=30, alpha=0.5, label='Data 1')
plt.hist(data2, bins=30, alpha=0.5, label='Data 2')
plt.hist(data3, bins=30, alpha=0.5, label='Data 3')# 设置图表属性
plt.title('matplotlib hist() ')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.grid()
plt.legend()# 显示图表
plt.show()

3.7 绘制Y轴使用不同刻度下的曲线图

import numpy as np
import matplotlib.pyplot as plt# 在区间[0,1]制造一些数据
# np.random.normal为高斯分布
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))# 创建一个窗口
plt.figure(1)# 线性
plt.subplot(221)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')
plt.grid(True)# 对数
plt.subplot(222)
plt.plot(x, y)
plt.yscale('log')
plt.title('log')
plt.grid(True)# symmetric log
plt.subplot(223)
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthreshy=0.05)
plt.title('symlog')
plt.grid(True)# logit
plt.subplot(224)
plt.plot(x, y)
plt.yscale('logit')
plt.title('logit')
plt.grid(True)plt.show()

 matplotlib.pylot不仅仅提供了线性的坐标,还提供了对数(logarithmic)和分对数(logit)坐标。当数据的维度跨越许多数量级时,这种坐标就很有用

 3.8 绘制散点图

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colorsx = np.random.randn(50)
y = np.random.randn(50)  
color =  np.random.rand(50)
changecolor = colors.Normalize(vmin=0.4, vmax=0.8)
plt.scatter(x, y, c=color, s=60, alpha=0.3, cmap='viridis',norm=changecolor)
plt.colorbar()  # 显示颜色条
plt.show()

参数 vmin、vmax 分别为要设置的数据范围的最小值和最大值(注意:设置之后,原来大于vmax的值被“拉低”成vmax;原来小于vmin的值被“拉高”成vmin) 

class matplotlib.colors.Normalize(vmin=None, vmax=None)

颜色表如下:

 

import numpy as np
import matplotlib.pyplot as plt# 随机数生成器的种子
np.random.seed(2)
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radiiplt.scatter(x, y, s=area, c=colors, alpha=0.5) # 设置颜色及透明度plt.title("matplotlib Scatter ") # 设置标题
plt.colorbar()plt.show()

 

 3.9 绘制饼图

import matplotlib.pyplot as plt#定义饼的标签,
labels = ['one','two','three','four','five','other']#每个标签所占的数量
x = [200,500,1200,7000,200,900]#饼图分离
explode = (0.03,0.05,0.06,0.04,0.08,0.1)#设置阴影效果
#plt.pie(x,labels=labels,autopct='%3.2f%%',explode=explode,shadow=True)plt.pie(x,labels=labels,autopct='%3.2f%%',explode=explode, labeldistance=1.35, pctdistance=1.2)
plt.legend()
plt.show()

 3.10 绘制条形图

import numpy as np
import matplotlib.pyplot as plt
import matplotlib# 将全局的字体设置为黑体
matplotlib.rcParams['font.family'] = 'SimHei'# 数据
N = 5
y = [20, 10, 30, 25, 15]
x = np.arange(N)# 绘图 x x轴, height 高度, 默认:color="blue", width=0.8
p1 = plt.bar(x, height=y, width=0.5, )# 展示图形
plt.show()

"""水平条形图,需要修改以下属性orientation="horizontal"
"""
import numpy as np
import matplotlib.pyplot as plt# 数据
N = 5
x = [20, 10, 30, 25, 15]
y = np.arange(N)# 绘图 x= 起始位置, bottom= 水平条的底部(左侧), y轴, height 水平条的宽度, width 水平条的长度
p1 = plt.bar(x=0, bottom=y, height=0.5, width=x, orientation="horizontal")# 展示图形
plt.show()

import numpy as np
import matplotlib.pyplot as plt# 设置画布颜色为 blue
plt.style.use("seaborn-v0_8-whitegrid")
fig, ax = plt.subplots()# y 轴数据
data = [[5,25,50,20],[4,23,51,17],[6,22,52,19]]X = np.arange(4)
width=0.25plt.bar(X+width*0, data[0], color = 'darkorange', width = width,label = 'A')
plt.bar(X+width*1, data[1], color = 'steelblue', width =width,label="B")
plt.bar(X+width*2, data[2], color = 'violet', width = width,label = 'C')# 添加文字描述
W = [width*0,width*1,width*2]# 偏移量
for i in range(3):for a,b in zip(X+W[i],data[i]):#zip拆包plt.text(a,b,"%.0f"% b,ha="center",va= "bottom")#格式化字符串,保留0位小数plt.xlabel("Group")
plt.ylabel("Num")# 在(0,48)这个位置,显示note 这个值
plt.text(1,48,"note",fontsize=15, ha='left', rotation=15, wrap=True)   # family参数是一个字体参数
plt.text(1.5,32,"deep",fontsize=15, ha='left', rotation=15, wrap=True,bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k',lw=1 ,alpha=0.5))   plt.legend()
plt.show()

 

 3.11 绘制多子图

import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(3, 3, figsize=(6,6))fig.text(0.5, 0, 'x', ha='center')
fig.text(0, 0.5, 'y', va='center')x = np.linspace(0, 2*np.pi, 50, endpoint=False)
sins = np.sin(x)
coss = np.cos(x)ax[1][1].plot(x, sins, 'r', alpha=0.5, lw=0.5, ls='-', marker='+', label='sin')
ax2 = ax[1][1].twinx()
ax2.plot(x, coss, 'g', alpha=0.5, lw=0.5, ls='-', marker='+', label='cos')
for tl in ax2.get_yticklabels():tl.set_color("r")plt.tight_layout()
plt.show()

 3.12 绘制时间变化图

import random
import timeimport matplotlib.pyplot as plt
from pylab import mplmpl.rcParams["font.sans-serif"] = ["SimHei"]  # 设置显示中文字体
mpl.rcParams["axes.unicode_minus"] = False  # 设置正常显示符号x = range(1, 101)
times = [random.randint(10, 200) for i in range(100)]
plt.figure(figsize=(15, 5), dpi=80)  # 创建画布
plt.plot(x, times, color='r', linestyle='-', label='t = 2', marker='v')  # 绘制折线图,点划线plt.legend(loc=0)  # 显示图例
# 描述信息
plt.xlabel("设备数/个")
plt.ylabel("时间/s")
plt.title("时间变化图", fontsize=18)plt.savefig("./time.jpg")  # 保存至指定位置
plt.show()  # 显示图像

3.13 绘制多张图片显示

# opencv显示
import cv2
# plt显示
from PIL import Image
import matplotlib.pyplot as pltPATH = 'D:/dataset/cat_dog/valid/3.jpg'
plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文plt.subplot(1, 3, 1)
im = Image.open(PATH)
plt.imshow(im)
plt.xlabel('原图')plt.subplot(1, 3, 2)
im = cv2.imread(PATH, 0)  # 参数0为灰度显示,参数1为RGB显示
plt.imshow(im, cmap='gray')
plt.xlabel('单通道图')plt.subplot(1, 3, 3)
im = cv2.imread(PATH, 0)  # 参数0为灰度显示,参数1为RGB显示
im = cv2.equalizeHist(im)  # 直方图均衡
plt.imshow(im, cmap='gray')
plt.xlabel('直方图')plt.show()

 3.14 绘制3D图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 生成3D figure
fig = plt.figure()
ax = Axes3D(fig, auto_add_to_figure=False)
fig.add_axes(ax)# X, Y value
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)Z = np.sin(R)ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'), edgecolor='k')
ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap='rainbow')ax.set_zlim(-2, 2)
plt.show()

 

 

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#定义坐标轴
fig = plt.figure()
ax1 = plt.axes(projection='3d')
#ax = fig.add_subplot(111,projection='3d')  #这种方法也可以画多个子图
#定义三维数据
xx = np.arange(-5,5,0.5)
yy = np.arange(-5,5,0.5)
X, Y = np.meshgrid(xx, yy)
Z = np.sin(X)+np.cos(Y)
#作图
ax1.plot_surface(X,Y,Z)
ax1.contour(X,Y,Z, zdim='z',offset=-2,cmap='rainbow')   #等高线图,要设置offset,为Z的最小值fig = plt.figure()  #定义新的三维坐标轴
ax3 = plt.axes(projection='3d')
#定义三维数据
xx = np.arange(-5,5,0.5)
yy = np.arange(-5,5,0.5)
X, Y = np.meshgrid(xx, yy)
Z = np.sin(X)+np.cos(Y)
#作图
ax3.plot_surface(X,Y,Z,cmap='rainbow')
ax3.contour(X,Y,Z, zdim='z',offset=-2,cmap='rainbow')   #等高线图,要设置offset,为Z的最小值
plt.show()

 3.15 给绘图添加注释

import matplotlib.pyplot as plt
import numpy as npfig, geeeks = plt.subplots()t = np.arange(0.0, 5.0, 0.001)
s = np.cos(3 * np.pi * t)
line = geeeks.plot(t, s, lw=2)# Annotation
geeeks.annotate('Local Max', xy=(3.3, 1),xytext=(3, 1.8),arrowprops=dict(facecolor='green',shrink=0.05), )geeeks.set_ylim(-2, 2)# Plot the Annotation in the graph
plt.show()

annotate()方法添加注释,有两点需要注意:需要被注释的地方,使用xy参数来指出,还有就是注释文本所放置的位置,使用参数xytext来指定位置,这两个参数都是(x,y)元组,这里的xy和xytext所使用的坐标是根据XY轴的刻度的坐标,称为data coordinates。

 

import numpy as np 
import matplotlib.pyplot as plt x = np.arange(0, 10, 0.005) 
y = np.exp(-x / 3.) * np.sin(3 * np.pi * x) fig, ax = plt.subplots() 
ax.plot(x, y) 
ax.set_xlim(0, 10) 
ax.set_ylim(-1, 1) # Setting up the parameters 
xdata, ydata = 5, 0
xdisplay, ydisplay = ax.transData.transform((xdata, ydata)) bbox = dict(boxstyle ="round", fc ="0.8") 
arrowprops = dict( arrowstyle = "->", connectionstyle = "angle, angleA = 0, angleB = 90,\ rad = 10") offset = 72# Annotation 
ax.annotate('data = (%.1f, %.1f)'%(xdata, ydata), (xdata, ydata), xytext =(-2 * offset, offset), textcoords ='offset points', bbox = bbox, arrowprops = arrowprops) disp = ax.annotate('display = (%.1f, %.1f)'%(xdisplay, ydisplay), (xdisplay, ydisplay), xytext =(0.5 * offset, -offset), xycoords ='figure pixels', textcoords ='offset points', bbox = bbox, arrowprops = arrowprops) # To display the annotation 
plt.show()

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/54464.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware Workstation下载不同的版本

1&#xff1a;访问下载链接 https://customerconnect.vmware.com/cn/downloads/#all_products 2&#xff1a;拉倒下面去选择对应的下载内容 3&#xff1a;先选择大版本 4&#xff1a;大版本选择之后&#xff0c;就可以选择对应的小版本 各位再根据自己的选择进行下载就好了

Spring Boot 单元测试

目录 1.什么是单元测试&#xff1f; 2.单元测试的优点 3.Spring Boot 单元测试使用 3.1 生成单元测试的类 3.2 添加 Spring Boot 框架测试注解&#xff1a;SpringBootTest 3.3 添加单元测试业务逻辑 3.4 注解 Transactional 4. 断言 1.什么是单元测试&#xff1f; 单元…

运维第四次作业

1. 简述静态网页和动态网页的区别。 静态网页和动态网页的区别在于内容的生成方式。静态网页的内容在服务器上预先创建好&#xff0c;并在用户访问时直接传送给浏览器&#xff0c;内容不会改变。而动态网页的内容是在用户访问时才在服务器上生成&#xff0c;可以根据用户的请求…

数据结构——红黑树

文章目录 一.红黑树的定义二.红黑树的插入1.红黑树节点的定义2.红黑树的插入操作3.总结&#xff1a; 三.红黑树与AVL树的比较四.检验手写的红黑树五.源码 一.红黑树的定义 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff…

Typescript+React入门

初识Typescript 出现背景 Typescript&#xff08;以下简称TS&#xff09;实际上就是JavaScriptType&#xff0c;用数据类型的方式来约束了JS的变量定义 在JS的基础上增加了类型支持 在JS中大多数错误都是因为数据类型造成的&#xff0c;所以TS为了规避这个问题加入了类型限制…

【小沐学NLP】在线AI绘画网站(网易云课堂:AI绘画工坊)

文章目录 1、简介1.1 参与方式1.2 模型简介 2、使用费用3、操作步骤3.1 选择模型3.2 输入提示词3.3 调整参数3.4 图片生成 4、测试例子4.1 小狗4.2 蜘蛛侠4.3 人物4.4 龙猫 结语 1、简介 Stable Diffusion是一种强大的图像生成AI&#xff0c;它可以根据输入的文字描述词&#…

从特斯拉FSD v11.4.6,看FSD入华

从特斯拉FSD v11.4.6&#xff0c;看FSD入华 1. 芝加哥城区a. 亮点b. 问题 2. 小镇中心a. 亮点b. 问题 3. FSD入华a. 技术路线b. 场景 4. 参考视频 FSD最近更新了v11.4.6&#xff0c;本文根据2个FSD城区测试视频&#xff0c;一起看一下有哪些亮点和问题。 FSD入华的消息也甚嚣尘…

CentOS7安装Maven详细教程

&#x1f60a; 作者&#xff1a; Eric &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_47316183?typeblog &#x1f389; 主题&#xff1a;CentOS7安装Maven详细教程 ⏱️ 创作时间&#xff1a; 2023年08月06日 第一步&#xff1a;上传或下载安装包&#x…

python 输入oracle sql查询语句导出excel表

Author: liukai 2810248865qq.com Date: 2022-08-18 04:28:52 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-08-02 18:27:08 FilePath: \PythonProject02\python 连接oracle数据库导出Excel带数据库表头.py Description: 这是默认设置,请设置customMade, 打开ko…

DevOps系列文章之 Docker 安装 NFS 服务器

Docker 安装 NFS 服务器 环境&#xff1a; 192.186.2.105 NFS 服务器 192.168.2.106 Client 客户端 安装 一、服务器端 https://github.com/f-u-z-z-l-e/docker-nfs-server 1、创建目录 mkdir /nfsdata mkdir -p /docker/nfs/2、启动脚本 vim start.sh# 内容 docker run …

Android平台GB28181设备接入端如何降低资源占用和性能消耗

背景 我们在做GB28181设备接入模块的时候&#xff0c;考虑到好多设备性能一般&#xff0c;我们一般的设计思路是&#xff0c;先注册设备到平台侧&#xff0c;平台侧发calalog过来&#xff0c;获取设备信息&#xff0c;然后&#xff0c;设备侧和国标平台侧维持心跳&#xff0c;…

百度秋招攻略,百度网申笔试面试详解

百度秋招简介 作为行业巨头&#xff0c;百度向社会提供的岗位一直都是非常吃香的&#xff0c;每年也都有很多考生密切关注&#xff0c;百度发布的招聘广告&#xff0c;以尽可能的让自己进入这家企业工作&#xff0c;实现自己的人生价值。那么百度每年的秋招时间是多久&#xf…