Matplotlib是Python的绘图库,将数据图形化,用来绘制各种静态,动态,交互式的图表(线图、散点图、等高线图、条形图、柱状图、3D图形、图形动画等等),并且提供多样化的输出格式。

Matplotlib 通常与NumpyScipy一起使用,这种组合广泛用于替代 MatLab,是一个强大的科学计算环境。

一、pyplot

plot( ):用于绘制线图和散点图

Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。

未声明哪一画板,就近原则,无则自动创建;未声明哪一画布,就近原则,无则自动创建;

结构 面对对象风格 面对过程风格(就近原则)
figure-画板 figure1=plt.figure(figsize(1,1)) plt.figure(figsize(1,1))
(可隐式创建画板)
axes-画布 axes1=plt.subplot(2,2,1) plt.subplot(2,2,1)
(可隐式创建画布)
title-标题 axes1.set_title() plt.title()
axis-轴
( axislabel-轴标签 )
axes1.set_xlabel() plt.xlabel()
tickes-刻度
( ticklabel-刻度标签 )
axes1.set_xticks() # x轴刻度位置
axes1.set_xticklabels() # x轴刻度标签
plt.xticks()# 刻度位置+标签
刻度限 axes1.set_xlim()
axes1.axis([0, 10, -1, 2])
plt.xlim(x.min(),x.max()+2)
grid-网格线 axes1.grid() plt.grid()
legend-图例 axes1.legend() plt.legend(['1','2'])
annotate-注释 axes1.annotate() plt.annotate()
绘制图像 axes1.plot() plt.plot()
显示图像 plt.show() plt.show()

import matplotlib.pyplot as plt
import numpy as np

from matplotlib import rcParams

# 设置中文字体(Windows 系统常用“SimHei”黑体) 
rcParams['font.sans-serif'] = ['SimHei'] 

# 解决负号显示问题
rcParams['axes.unicode_minus'] = False  

#全局画布颜色,白色 ; 浅灰 lightgray
plt.rcParams['axes.facecolor'] = 'w' 
   
#显示绘图的静态图像
%matplotlib inline 




x = np.arange(0, np.pi*2, 0.05)
y1 = np.sin(x)
y2 = np.cos(x)

#========================面对对象风格========================


#========================面对过程风格========================

# 设置画板 
# plt.figure(figsize=(width, height), dpi=resolution)
# 图表宽度和高度(英寸); 图表每英寸点数(分辨率),默认为 100。

# 单条线: plt.plot ( [x], y, [fmt], *, data=None, **kwargs )
# 多条线: plt.plot ( [x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs )


# - 实线 | : 虚线  | -- 破折线 |  -. 点划线

# r 红色 | g 绿色 | b 蓝色 | c 青色 | m 品红 | y 黄色 | k 黑色 | w 白色

# . 点 | , 像素点 | o 实心圆 | v 下三角 | ^ 上三角 | < 左三角 | > 右三角 
# 1 下三叉 | 2 上三叉 | 3 左三叉 | 4 右三叉 
# 8 八角形 | s 正方形 | p 五边形 | * 星号 | h 六边形1 | H 六边形2 
# + 加号 | x 乘号 | D 菱形 | d 瘦菱形 | | 竖线 | _ 横线 



#网格线: matplotlib.pyplot.grid(b=None, which='major', axis='both', )
#参数说明:
#b:可选,默认为 None,可设置布尔值,true 为显示,false 为不显示,如果设置 **kwargs 参数,则值为 true。
#which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。
#axis:可选, 'both'(默认),'x' (x 轴方向)或 'y'( y 轴方向)。
#**kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。

# 设置画布
#==============================================
#==============================================
# 绘制多个子图
# 法一:subplot() 
# subplot(nrows, ncols, index, **kwargs)

# 法二:subplots() 
# fig, axes = plt.subplots(nrows=2, ncols=2)
# plt.subplots()返回值为(元组) : (figure,axes_array)
# 也可 fig,(axes1,axes2)
# axes[0, 0].plot([1, 2, 3], [1, 4, 9])  



plt.subplot(2, 2, 1)
plt.plot(x,y1,label='First Line')
plt.title("plot 1")        #画布标题
plt.xlabel("x - label")   #x轴标签
plt.ylabel("y1 - label")   #y轴标签
plt.legend() 

plt.subplot(2, 2, 2)
plt.plot(x,y2,label='Second Line')
plt.title("plot 2")        #画布标题
plt.xlabel("x - label")   #x轴标签
plt.ylabel("y2 - label")   #y轴标签

plt.suptitle("Test")   #画板标题
#==============================================
#==============================================


#在plt.show()前,用来标示图形的文本标签图例
# 方式一
# plt.plot(x,y1,label='1') 
# plt.plot(x,y2,label='2') 
# plt.legend() 

# 方式二
# axes1=plt.plot(x,y1) 
# axes2=plt.plot(x,y2)  
# plt.legend([axes1,axes2],['1','2']) 

# 方式三
# axes1=plt.plot(x,y1,label='1') 
# axes2=plt.plot(x,y2,label='2') 
#plt.legend(handles=[axes1, axes2])

# 在一个 axes 中添加多个图例

plt.legend() 



plt.savefig('.\lineplot.svg',dpi = 500)
#保存与屏幕上显示的图形完全相同的图形,则应在调用 show() 之前调用 savefig(),否则将保存空文件。

# plt.savefig(fname, dpi=None, bbox_inches='tight', pad_inches=0.1, format=None, kwargs)

# fname − 要保存图形的文件名或路径。文件扩展名决定文件格式,例如 ".png"、".pdf"。
# dpi − 每英寸点数,即保存图形的分辨率。默认为 "None",使用 Matplotlib 默认值。
# bbox_inches − 指定要保存图形的哪一部分。选项包括 'tight'、'standard' 或以英寸为单位指定的边界框。
# pad_inches − 当 bbox_inches='tight' 时,图形周围的填充。
# format − 显式指定文件格式。如果为 'None',则从 fname 中的文件扩展名推断格式。
# kwargs − 特定于所选文件格式的其他关键字参数。


plt.show()

图像函数

Imread 将图像从文件读取到数组中。

Imsave 将数组保存为图像文件。

Imshow 在坐标轴上显示图像。

plot参数 作用: 类型/格式 说明
[x] (可选) x轴数据 数组或标量,默认为range(len(y)) 如果省略,x会自动生成[0, 1, 2, ..., len(y)-1]
y(必选) y轴数据 数组或标量 必需的参数,表示y坐标值
[fmt] (可选) 格式字符串,快速设置基本格式(如颜色、标记和线条样式)
默认“-b”,无标记实线蓝色。
'[marker][line][color]'
点型(marker)
线型(linestyle)
颜色(color)
data (可选) 指定数据来源 带索引的对象(如DataFrame) 当提供data参数时,x和y可以是字符串,表示data中的列名
**kwargs key word args(可选) 其他关键字参数,
精细控制属性
marker: 标记样式
linestyle: 线条样式
color: 颜色
markersize(简写 ms): 标记大小,默认为 6
markerfacecolor(简写 mfc):标记内部颜色
markeredgecolor(简写 mec):标记边框颜色

linewidth(lw): 线宽

label: 图例标签

从文件加载数据


import matplotlib.pyplot as plt

import csv           #方法一 : csv
import numpy as np   #方法二 :numpy

#===================方法一=========================
x1=[]
y1=[]

with open('example.txt','r')as csvfile:
    plots csv.reader(csvfile,delimiter=',')
    for row in plots:
        x1.append(int(row[0]))
        y1.append(int(row[1]))

#CSV读取器自动按行分割文件,然后使用分隔符分割文件中的数据。
#注意:csv模块和csv reader不需要文件在字面上是一个.csv文件,
#可以是任何具有分隔数据的简单的文本文件。

plt.plot(x1,y1,label='Loaded from file!')

plt.xlabel('x1')
plt.ylabel('y1')
plt.title('Interesting Graph\ncheck it out')

plt.legend()
plt.show()


#===================方法二=========================
x2, y2 = np.loadtxt('example.txt', delimiter=',', unpack=True)
#loadtxt函数不要求文件是一个.txt文件,可以是.csv,python列表对象。

plt.plot(x2,y2, label='Loaded from file!')

plt.xlabel('x2')
plt.ylabel('y2')
plt.title('Interesting Graph\nCheck it out')

plt.legend()
p1t.show()

从网络加载数据

读取网站的源代码,然后通过简单的拆分来分离数据。



色标 Matplotlib 库提供了一个用于处理色标的工具,包括其创建、放置和自定义。

matplotlib.colorbar 模块负责创建色标,但是可以使用Figure.colorbar() 或其等效的 pyplot 包装器pyplot.colorbar() 函数创建色标。这些函数在内部使用 Colorbar 类以及make_axes_gridspec(用于 GridSpec 定位的轴)或make_axes(用于非 GridSpec 定位的轴)。

并且色标需要是一个“可映射” (即 matplotlib.cm.ScalarMappable) 对象,通常是通过 imshow() 函数生成的 AxesImage。如果您想在没有附加图像的情况下创建色标,则可以使用没有关联数据的 ScalarMappable。

颜色表示格式

RGB 或 RGBA 元组 (0.1 ,0.2,0.3)

十六进制 RGB 或 RGBA 字符串 ‘#0F0F0F’

灰度级字符串 ‘0.7’ (范围 [0,1])

命名颜色 “b”:蓝色,“g”:绿色,“r”:红色,