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

这篇具有很好参考价值的文章主要介绍了数据可视化:Matplotlib详解及实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 1 Matplotlib介绍

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

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

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

1.1 Matplotlib架构组成

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

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 文章来源地址https://www.toymoban.com/news/detail-625773.html

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坐标系。

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 

1.1.3 后端层

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

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

1.2 Pyplot介绍

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

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

Pyplot 绘图流程如下:

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 

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 plt

plt.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],所以显示如下:

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 3.2 绘制一条折线

import matplotlib.pyplot as plt

plt.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-‘,表示蓝色的实线。显示如下:

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 3.3 绘制一个点集

import matplotlib.pyplot as plt

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

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

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

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数据,通过不同的样式展示出来,显示如下:

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

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

import numpy as np
import matplotlib.pyplot as plt

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("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),分别在两个坐标系绘制一个图形,显示如下:

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 3.6 绘图直方图

import numpy as np
import matplotlib.pyplot as plt

mu, 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')

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

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()

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

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)坐标。当数据的维度跨越许多数量级时,这种坐标就很有用

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 3.8 绘制散点图

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors

x = 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)

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

颜色表如下:

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 

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 radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5) # 设置颜色及透明度

plt.title("matplotlib Scatter ") # 设置标题
plt.colorbar()

plt.show()

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 

 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()

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 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()

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

"""
    水平条形图,需要修改以下属性
    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()

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

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.25

plt.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()

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 

 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()

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 3.12 绘制时间变化图

import random
import time
 
import matplotlib.pyplot as plt
from pylab import mpl
 
mpl.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()  # 显示图像

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

3.13 绘制多张图片显示

# opencv显示
import cv2
# plt显示
from PIL import Image
import matplotlib.pyplot as plt


PATH = '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()

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 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()

 

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 

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()

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 3.15 给绘图添加注释

import matplotlib.pyplot as plt
import numpy as np

fig, 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。

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 

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()

 

数据可视化:Matplotlib详解及实战,python,matplotlib,开发语言

 

 

 

到了这里,关于数据可视化:Matplotlib详解及实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python Matplotlib数据可视化绘图之(六)————图片大小、颜色、标题、纵横坐标、画布和绘图区域背景颜色、Legend(图例)等的参数设置详解

    前面五期的文章详细讲述了Python Matplotlib数据可视化绘图的方法技巧,主要涉及柱状图(《Python Matplotlib数据可视化绘图之(一)————柱状图》)、箱线图(《Python Matplotlib数据可视化绘图之(二)————箱线图》)、散点图(《Python Matplotlib数据可视化绘图之(三)—

    2024年02月06日
    浏览(70)
  • 基于Python的疫情数据可视化(matplotlib,pyecharts动态地图,大屏可视化)

    有任何学习问题可以加我微信交流哦!bmt1014 1、项目需求分析 1.1背景 2020年,新冠肺炎疫情在全球范围内爆发,给人们的健康和生命带来了严重威胁,不同国家和地区的疫情形势也引起了广泛的关注。疫情数据的监测和分析对疫情防控和科学防治至关重要。本报告以疫情数据

    2024年02月05日
    浏览(39)
  • Matplotlib:Python数据可视化的全面指南

    数据可视化是数据分析的一个重要方面,可以帮助我们有效地传达数据中的洞察和模式。Python提供了几个用于数据可视化的库,其中最突出和广泛使用的是Matplotlib。在本文中,我们将探索Matplotlib的基本概念和功能,并学习如何创建各种类型的图表和图形。 在深入了解Matplo

    2024年02月10日
    浏览(37)
  • Python数据可视化之matplotlib绘图教程

    目录 一、快速绘图 1. 折线图 2. 柱状图 3. 饼状图 4. 散点图 5. 图片保存  二、基本设置 1. 图片 2. 坐标轴 3. 刻度 4. 边距 5. 图例 6. 网格 7. 标题 8. 文本 9. 注释文本 10. 主题设置 11. 颜色 12. 线条样式 13. 标记形状 三、绘图进阶 1. 折线图 2. 条形图  3. 散点图 4. 饼状图 5. 多图并

    2024年02月04日
    浏览(35)
  • Matplotlib Mastery: 从基础到高级的数据可视化指南【第30篇—python:数据可视化】

    Matplotlib是一个功能强大的数据可视化库,为数据科学家提供了丰富的工具和功能,可以以直观的方式呈现数据。 1. 基础 1.1 安装Matplotlib 在使用Matplotlib之前,请确保已经安装了Matplotlib库。可以使用以下命令进行安装: 1.2 创建第一个简单的图表 安装好Matplotlib后,让我们来创

    2024年01月21日
    浏览(37)
  • Python-数据可视化:matplotlib模块、pyecharts模块

    返回Python系列文章目录 matplotlib 是一个基于python 的绘图库,完全支持二维图像,有限支持三维图形,Matplotlib是python编程语言及其数据科学扩展包NumPy的可视化操作界面库。 matplotlib模块 导入方式 可参考文章:Python之数据可视化——matplotlib系统介绍 Echarts 是一个由百度开源的

    2024年02月08日
    浏览(36)
  • 【python】数据可视化——解决matplotlib显示中文乱码

    D:anaconda3envstest1libtkinter_ init _.py:839: UserWarning: Glyph 31532 (N{CJK UNIFIED IDEOGRAPH-7B2C}) missing from current font. func(*args) D:anaconda3envstest1libtkinter_ init _.py:839: UserWarning: Glyph 19968 (N{CJK UNIFIED IDEOGRAPH-4E00}) missing from current font. func(*args) D:anaconda3envstest1libtkinter_ init _.py:839: UserWarnin

    2024年01月22日
    浏览(39)
  • python数据可视化神库:Matplotlib快速入门

    Matplotlib易于使用,是Python中了不起的可视化库。它建立在NumPy数组的基础上,旨在与更广泛的SciPy堆栈一起工作,并由几个图组成:线图、条形图、散点图、直方图等。 在上面的例子中,X和Y的元素提供了X轴和Y轴的坐标,并根据这些坐标绘制了一条直线。 Pyplot是一个Matplotli

    2023年04月27日
    浏览(33)
  • Python 实战之ChatGPT + Python 实现全自动数据处理/可视化详解

    一、引言 二、成果演示——口述式数据可视化 三、远原理述 四、实现过程   (一)环境配置   (二)申请OpenAI账号   (一)调用ChatGPT API   (二)设计AI身份,全自动处理数据 五、再谈此次探索 六、总结 OpenAI 公司开发的 ChatGPT 已经火了一年多了,这期间各种 AI 产品以

    2024年02月10日
    浏览(34)
  • Python Matplotlib数据可视化绘图之(三)————散点图

    文本 本文我们主要介绍利用Python中的Matplotlib模块进行几种散点图的画法,包括整张图片只有一种颜色的不分组散点图、整张图片有好几种颜色的不分组散点图、整张图片有好几种颜色的分组散点图等。 主要利用Python中的Matplotlib模块完成该功能。 表格如下(示例): 班别

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包