python数据分析之matplotlib使用
python 可视化
使用第三方包
Matplotlib
Seaborn
Pandas
Boken
Plotly
Vispy
Vega和gega-lite
Matplotlib介绍
Matplotlib (Matplotlib,是matrix + plot + library的缩写)库由各种可视化类构成,内部结构复杂,受Matlab启发
Matplotlib 包含两个模板
(1) 绘图API: pyplot,绘制各类可视化图形的命令子库
(2)集成库: pylab,是 Matplotlib 和 Scipy、Numpy的集成库
pylab
pylab 是 matplotlib 面向对象绘图库的一个接口。它的语法和 Matlab 十分相近。也就是说,它主要的绘图命令和 Matlab 对应的命令有相似的参数.
pyplot
matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式
Matplotlib 的画图方式可分为两种:inline 和 notebook
(1) inline 为静态绘图,嵌入到 jupyter notebook 中显示
(2) notebook 为交互式图,在 juputer notebook 只显示一行输出代码
虽然pyplot是Matplotlib下的子模块,但二者的调用关系却不是Matplotlib调用pyplot,而是在pyplot中调用Matplotlib,略显本末倒置。
pyplot模块集成了绝大部分常用方法接口,查看pyplot源码文件可以发现,它内部调用了Matplotlib路径下的大部分模块(不是全部),共同完成丰富的绘图功能。
其中两个重点: figure 和 axes,其中前者1为所有绘图操作定义了顶层类对象Figure,相当于提供了画板;而后者定义了画板中的每一个绘图对象 Axes,相当于画板内的各个子图。
import matplotlib.pyplot as plt
绘图基本步骤
实例:
# 0、导入包
import matplotlib.pyplot as plt
# 1、准备数据
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
# 2、创建图像
fig = plt.figure()
# 3、绘图
ax = fig.add_subplot(111)
ax.plot(x, y)
# 4、自定义设置
ax.set_xlim(1, 5)
# 5、保存图形(按需要使用)
plt.savefig('first_graph.png')
# 6、显示图形
plt.show()
基本绘图步骤分析:
在绘图结构中,figure创建窗口,subplot创建子图。所有的绘画只能在子图上进行。plt表示当前子图,若没有就创建一个子图。所有你会看到一些教程中使用plt进行设置,一些教程使用子图属性进行设置。他们往往存在对应功能函数。
(1) Figure:
Figure:面板(图),matplotlib中的所有图像都是位于figure对象中,一个图像只能有一个figure对象。
在第一步的创建图像方法plt.figure()中,我们可以通过传入参数来改变图像的显示属性。查阅官方文档,figure方法的参数包括figsize、dpi、facecolor、edgecolor、linewidth、frameon、subplotpars、tight_layout、constrained_layout。其中 subplotpars、tight_layout这两个参数与子图相关,暂时不详细展开,其他参数的含义如下:
figsize:图像宽高,单位为英寸。(1英寸等于2.5cm)
dpi:图像分辨率,即每英寸多少个像素,默认值80。
facecolor:图像背景颜色,含四个参数,(R,G,B,透明度)
edgecolor:图像边框颜色。含四个参数,(R,G,B,透明度)
linewidth:图像边框线宽。
frameon:是否显示边框。
constrained_layout:是否自动布局,若为True则使用constrained_layout,会自动调整plot的位置。
修改plt.figure(),传入相关参数,代码如下:
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
# 2、创建图像
fig = plt.figure(figsize=(3, 3),
dpi=100,
facecolor=(0,1,0,1), # (0,1,0,1)为颜色属性,分别为r,g,b和透明度, 此值代表绿色
edgecolor=(1,0,0,1), # 红色边框
frameon=True,
linewidth=1)
# 3、绘图
ax = fig.add_subplot(111)
ax.plot(x, y)
# 4、自定义设置
ax.set_xlim(1, 5)
# 6、显示图形
plt.show()
Figure 详解
figure和axes,其中前者为所有绘图操作定义了顶层类对象Figure,相当于是提供了画板;而后者则定义了画板中的每一个绘图对象Axes,相当于画板内的各个子图。
换句话说,figure是axes的父容器,而axes是figure的内部元素,而我们常用的各种图表、图例、坐标轴等则又是axes的内部元素。
(2) Subplot:
Subplot:子图,figure对象下创建一个或多个subplot对象(即axes)用于绘制图像。
import matplotlib.pyplot as plt
plt.figure(1) # 第一张图
plt.subplot(121) # 第一张图中的第一张子图
plt.plot([1,2,3])
plt.subplot(122) # 第一张图中的第二张子图
plt.plot([3,2,1])
plt.figure(2) # 第二张图
plt.plot([4,5,6]) # 默认创建子图subplot(111)
plt.title('Easy as 1,2,3') # 添加subplot 211 的标题
背景色
通过向如matplotlib.pyplot.axes()或者matplotlib.pyplot.subplot()这样的方法提供一个axisbg参数,可以指定坐标这的背景色。
subplot(111,axisbg=(0.1843,0.3098,0.3098))
以下示例需要引入的库包括
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
(3) 叠加图(plot函数含多个参数)
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0., 5., 0.2)
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()
pyplot绘图属性
属性 值类型
alpha 浮点值
animated [True / False]
antialiased or aa [True / False]
clip_box matplotlib.transform.Bbox 实例
clip_on [True / False]
clip_path Path 实例, Transform,以及Patch实例
color or c 任何 matplotlib 颜色
contains 命中测试函数
dash_capstyle ['butt' / 'round' / 'projecting']
dash_joinstyle ['miter' / 'round' / 'bevel']
dashes 以点为单位的连接/断开墨水序列
data (np.array xdata, np.array ydata)
figure matplotlib.figure.Figure 实例
label 任何字符串
linestyle or ls [ '-' / '--' / '-.' / ':' / 'steps' / ...]
linewidth or lw 以点为单位的浮点值
lod [True / False]
marker [ '+' / ',' / '.' / '1' / '2' / '3' / '4' ]
markeredgecolor or mec 任何 matplotlib 颜色
markeredgewidth or mew 以点为单位的浮点值
markerfacecolor or mfc 任何 matplotlib 颜色
markersize or ms 浮点值
markevery [ None / 整数值 / (startind, stride) ]
picker 用于交互式线条选择
pickradius 线条的拾取选择半径
solid_capstyle ['butt' / 'round' / 'projecting']
solid_joinstyle ['miter' / 'round' / 'bevel']
transform matplotlib.transforms.Transform 实例
visible [True / False]
xdata np.array
ydata np.array
zorder 任何数值
(1) pyplot的中文显示
第一种方法:rcParams
pyplot并不默认支持中文显示,需要rcParams修改字体实现
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['simhei'] #用于正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用于正常显示负号
rcParams的属性
最后再简单介绍几个比较常用的属性方法,matplotlib.rcParams[‘xtick_direction’] 、matplotlib.rcParams[‘ytick.direction’]可以设置刻度的方向,rcParams是pylot使用rc配置文件来自定义图形各种默认属性的方法,也叫rc配置或rc参数,通过rc参数可以修改图表的默认属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。plt.axis(‘off’)可以关闭坐标轴,如果想只关闭x轴或y轴,可以使用frame = plt.gca()获取当前子图,然后用frame.axes.get_xaxis().set_visible(False)或frame.axes.get_yaxis().set_visible(False)对x轴或y轴设置是否显示。
中文字体的种类
实例:
第二种方法:fontproperties
在有中文输出的地方,增加一个属性:fontproperties
坐标属性
在作拥有坐标轴的图表时,我们往往需要对坐标轴进行设置,例如坐标轴的名称、坐标轴的范围、坐标轴的刻度等。
(1) 设置坐标轴的名称:plt.xlabel,plt.ylabel 分别设置x轴和y轴的标签
(2) 设置坐标轴的范围:plt.xlim, plt.ylim 分别设置x轴和y轴的大小范围。
plt.axis(xmin,xmax,ymin,ymax) 给定了坐标范围
(3) 设置刻度坐标轴的刻度:plt.xticks, plt.yticks 用于分别设置x轴和y轴的坐标轴刻度和大小、方向,以及标签大小,其同样可以用来设置坐标轴的范围(不推荐)。
有时我们会根据需求设置不同的刻度表示形式,例如小数、百分数等等,此时我们使用plt.set_xticklabels/plt.set_yticklabels。假设我们要将上述的横坐标和纵坐标的刻度都用两位小数展示
# 0、导入包
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
# 2、创建图像
fig = plt.figure(figsize=(12, 3), dpi=100, facecolor=(0,1,0,1),
edgecolor=(1,0,0,1), frameon=True, linewidth=1)
# 3、绘图
ax1 = fig.add_subplot(131)
ax1.plot(x, y)
ax2 = fig.add_subplot(132) # 这里为了比较创建两个子图
ax2.plot(x, y)
ax3 = fig.add_subplot(133) # 这里为了比较创建两个子图
ax3.plot(x, y)
# 4、自定义设置
ax1.set_title('lim')
ax2.set_title('ticks')
ax3.set_title('set_yticks')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax1.set_xlim([1, 4]) # 设置边界
ax1.set_ylim([10, 40])
ax2.set_xticks(range(1, 5)) # 设置刻度
ax2.set_yticks([(i*10) for i in range(1, 5)])
ax3.set_xticklabels('%.2f' %i for i in range(1, 5)) # 设置刻度表示形式
ax3.set_yticklabels('%.2f' %(i*5) for i in range(2, 9))
# 5、保存图形(按需要使用)
plt.savefig('02.png')
plt.show()
线条属性
在第3步绘图的ax.plot()方法中,我们可以通过传入参数来改变线条的显示属性。常见的有color、 marker、linestyle、linewidth等。
color:线条颜色。常用的有r红, g绿, b蓝, c青, m紫红, y黄, k黑, w白。
marker:坐标点标记。
标记maker 描述
‘o’ 圆圈
‘.’ 点
‘D’ 菱形
‘s’ 正方形
‘h’ 六边形1
‘*’ 星号
‘H’ 六边形2
‘d’ 小菱形
‘_’ 水平线
‘v’ 一角朝下的三角形
‘8’ 八边形
‘<’ 一角朝左的三角形
‘p’ 五边形
‘>’ 一角朝右的三角形
‘,’ 像素
‘^’ 一角朝上的三角形
‘+’ 加号
‘\ ‘ 竖线
‘None’,’’,’ ‘ 无
‘x’ X
linestyle:线条形状。如"--","-", '-.'等。
linewidth: 线条宽度。
如果这两种颜色不够用,还可以通过两种其他方式来定义颜色值:
1、使用HTML十六进制字符串 color=’#123456’ 使用合法的HTML颜色名字(’red’,’chartreuse’等)。
2、也可以传入一个归一化到[0,1]的RGB元祖。 color=(0.3,0.3,0.4)
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
fig = plt.figure(figsize=(3, 3), dpi=100, facecolor=(1,1,1,1),edgecolor=(1,0,0,1), frameon=True,linewidth=1)
ax = fig.add_subplot(111)
ax.plot(x, y, color='y', marker='D', linestyle='--', linewidth=1.5)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()
legend()、 grid()
legend:图例。可传参数包括handles,labels,loc等。handles是图线序列,labels是要显示的图例标签,loc是图例显示的位置,共有11种可选,传参时用String或Code均可。
import matplotlib.pyplot as plt
plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
legend(loc='upper left')
grid:给图表添加网格。可传参数包括b, which, axis和其他可选参数。b是否显示网格线,当提供color,linestyle等可选参数时,会默认b为True。which应用网格线,可传’major’, ‘minor’, 'both’分别表示使用主刻度、次刻度、两者。axis应用轴,可传 ‘x’, ‘y’, 'both’分别表示使用x轴、y轴、两者。可选参数包括color、linestyle、linewidth等。下面添加一个简单的网格线:
MultipleLocator, FormatStrFormatter:修改主次刻度。主刻度和次刻度就类似于一把直尺上cm与mm的关系。MultipleLocator生成刻度标签,FormatStrFormatter生成刻度标签格式,然后分别用set_major_locator、set_major_formatter、set_minor_locator、set_minor_formatter进行主次刻度的设置。下面对x轴进行主次刻度的设置:
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
fig = plt.figure(figsize=(8, 3), dpi=100, facecolor=(1,1,1,1),
edgecolor=(1,0,0,1), frameon=True, linewidth=1)
# 3、绘图
ax1 = fig.add_subplot(121)
ax1.plot(x, y)
ax2 = fig.add_subplot(122)
ax2.plot(x, y)
# 4、自定义设置
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
# 设置边界
ax1.set_xlim([1, 4])
ax1.set_ylim([10, 40])
ax2.set_xlim([1, 4])
ax2.set_ylim([10, 40])
# 设置图例
ax1.legend(['leg'], loc=0)
ax2.legend(['legend'], loc=0)
# 添加网格线(使用主次刻度需要先设置,这里暂时忽略,直接用both)
ax1.grid(True, which='both', axis='both', color='y', linestyle='--', linewidth=1)
# 设置主刻度 次刻度
x_major_locator = MultipleLocator(1) #将x轴主刻度标签设置为1的倍数
ax2.xaxis.set_major_locator(x_major_locator)
x_major_formatter = FormatStrFormatter('%.0f') #设置x轴标签文本的格式
ax2.xaxis.set_major_formatter(x_major_formatter)
x_minor_locator = MultipleLocator(0.5) #将x轴次刻度标签设置为0.5的倍数ax.xaxis.set_minor_locator(xminorLocator)
ax2.xaxis.set_minor_locator(x_minor_locator)
# 添加网格线
ax2.grid(True, which='both', axis='both', color='y', linestyle='--', linewidth=1)
plt.show()
text()、 annotate()
plt.text()添加文字说明
Text语法说明:
text(x,y,string,fontsize=15,verticalalignment="top",horizontalalignment="right")
x,y: 是放置文本的位置
string: 表示说明文字
fontdict: 用于覆盖默认文本属性的字典,例如fontsize, fontproperties, color 等,如果fontdict为none,则默认值由rc参(matplotlib.rcParams)决定。
arrowprops: #箭头参数,参数类型为字典dict 参数:width点箭头的宽度,headwidth在点的箭头底座的宽度,headlength点箭头的长度,shrink 总长度为分数“缩水”从两端,facecolor箭头颜色.
bbox:给标题增加外框 其中常用参数: boxstyle方框外形,facecolor(简写fc)背景颜色,edgecolor(简写ec)边框线条颜色,edgewidth边框线条大小.
x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
fig = plt.figure(figsize=(3, 3), dpi=100, facecolor=(0,1,0,1),
edgecolor=(1,0,0,1), frameon=True, linewidth=1)
# 3、绘图
ax1 = fig.add_subplot(111)
ax1.plot(x, y)
# 4、自定义设置
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_xlim([1, 4])
ax1.set_ylim([10, 40])
# 设置图例
ax1.legend(['legend'], loc=0)
ax1.grid(True, which='both', axis='both', color='y', linestyle='--', linewidth=1)
# 添加注释
plt.text(2, 20, 'text', fontsize=10, fontproperties = 'SimHei', color='red')
plt.show()
文本注释annotate()
在图形中增加带箭头的注释
plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict, *args, **kwargs)
参数:
s 为注释文本内容
xy 为被注释的坐标点
xytext 为注释文字的坐标位置
xycoords 参数如下:
figure points:图左下角的点
figure pixels:图左下角的像素
figure fraction:图的左下部分
axes points:坐标轴左下角的点
axes pixels:坐标轴左下角的像素
axes fraction:左下轴的分数
data:使用被注释对象的坐标系统(默认)
polar(theta,r):if not native ‘data’ coordinates t
color 设置字体颜色
weight 设置字体线型
{‘ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’, ‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’}
color 设置字体颜色
arrowprops #箭头参数,参数类型为字典dict
width:箭头的宽度(以点为单位)
headwidth:箭头底部以点为单位的宽度
headlength:箭头的长度(以点为单位)
shrink:总长度的一部分,从两端“收缩”
facecolor:箭头颜色
bbox给标题增加外框 ,常用参数如下:
boxstyle:方框外形
facecolor:(简写fc)背景颜色
edgecolor:(简写ec)边框线条颜色
edgewidth:边框线条大小
# 1. 把arrowprops参数改成通过dict传入参数(facecolor = “r”, headlength = 10, headwidth = 30, width = 20)。
# 2. 把bbox参数改成通过dict传入参数(boxstyle=‘round,pad=0.5’, fc=‘yellow’, ec=‘k’,lw=1 ,alpha=0.5)。
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 6)
y = x * x
fig = plt.figure(figsize=(8, 3), dpi=100, facecolor=(0,1,0,1),
edgecolor=(1,0,0,1), frameon=True, linewidth=1)
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
ax1.plot(x, y, marker='o')
ax2.plot(x, y, marker='D')
for xy in zip(x, y):
ax1.annotate("(%s,%s)" % xy, xy=xy, xytext=(-20, 10), textcoords='offset points',
arrowprops = dict(facecolor = "r", headlength = 10, headwidth = 30, width = 20))
for xy in zip(x, y):
ax2.annotate("(%s,%s)" % xy, xy=xy, xytext=(-20, 10), textcoords='offset points',
bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='k', lw=1, alpha=0.5))
plt.show()
https://blog.csdn.net/qq_36387683/article/details/101377416
title() pyplot的文本显示
title: 常用参数:fontsize设置字体大小、fontweight设置字体粗细、fontstyle设置字体类型、verticalalignment设置水平对齐方式 ,可选数: : ‘center’ , ‘top’ , ‘bottom’ ,‘baseline’
horizontalalignment: 设置垂直对齐方式,可选参数:left,right,center
rotation(旋转角度): 可选参数为:vertical,horizontal 也可以为数字
alpha: 透明度,参数值0至1之间
backgroundcolor: 标题背景颜色
(5)颜色设置
调用matplotlib.pyplot.colors()可以得到matplotlib支持的所有颜色。
其中,k表示黑色、m表示洋红色、c表示青色、w表示白色。
背景色:matplotlib.pyplot.axes() 或者 matplotlib.pyplot.subplot()提供一个axisbg参数,可以指定坐标中的颜色。
设置matplotlib参数(配置文件修改)
在代码执行过程中,有两种方式可以更改参数:
使用参数字典(rcParams)
调用matplotlib.rc()命令,通过传入关键字元组,修改参数
如果不想每次使用matplotlib时都在代码部分进行配置,可以修改matplotlib的文件参数。可以用matplot.get_config()命令来找到当前用户的配置文件目录。
配置文件包括以下配置项:
figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置
font: 字体集(font family)、字体大小和样式设置
grid: 设置网格颜色和线性
legend: 设置图例和其中的文本的显示
line: 设置线条(颜色、线型、宽度等)和标记
xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。
axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
backend: 设置目标暑促TkAgg和GTKAgg
patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。
verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying
其修改模式与上节所讲属性的修改相同
子图
在Matplotlib中,整个图像就是一个Figure对象,在Figure对象中可以包含一个或多个Axes对象,而每个Axes对象都是拥有自己的坐标系系统的绘图区域。在同一个Figure图像下的每个图表都代表这个图像的一个子图。
第一种,利用Figure对象的add_subplot方法生成子图然后再向其中填充图表。
add_subplot方法的参数包括nrows, ncols, index以及可选参数。其中nrows, ncols是子图的行列大小,index是当前创建的子图的索引,即作为图像的第几个子图。
第二种,使用 plt.add_subplots 方法同时生成Figure对象和axes对象数组,每个axes对象就相当于一个子图。add_subplots方法的参数包括nrows, ncols, sharex, sharey, squeeze, subplot_kw, gridspec_kw。其中nrows, ncols就是子图的行列大小,共生成nrows*ncols个子图。sharex, sharey设置是否共享x轴或y轴,默认不共享。squeeze默认True,挤压多余尺寸,一般默认即可。subplot_kw、gridspec_kw可选参数,用来设置子图的属性。
首先使用subplots方法得到axes对象数组,然后分别取出相应子图进行设置,同样,这里创建的axes也只是占位符。
第三种,
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import MultipleLocator
# 保证图片在浏览器内正常显示
%matplotlib inline
#使用numpy产生数据
x=np.arange(-5,5,0.1)
y=x*3
#创建窗口、子图
#方法1:先创建窗口,再创建子图。(一定绘制)
fig = plt.figure(num=1, figsize=(15, 8),dpi=80) #开启一个窗口,同时设置大小,分辨率
ax1 = fig.add_subplot(2,1,1) #通过fig添加子图,参数:行数,列数,第几个。
ax2 = fig.add_subplot(2,1,2) #通过fig添加子图,参数:行数,列数,第几个。
print(fig,ax1,ax2)
#方法2:一次性创建窗口和多个子图。(空白不绘制)
fig,axarr = plt.subplots(4,1) #开一个新窗口,并添加4个子图,返回子图数组
ax1 = axarr[0] #通过子图数组获取一个子图
print(fig,ax1)
#方法3:一次性创建窗口和一个子图。(空白不绘制)
ax1 = plt.subplot(1,1,1,facecolor='white') #开一个新窗口,创建1个子图。facecolor设置背景颜色
print(ax1)
#获取对窗口的引用,适用于上面三种方法
# fig = plt.gcf() #获得当前figure
# fig=ax1.figure #获得指定子图所属窗口
# fig.subplots_adjust(left=0) #设置窗口左内边距为0,即左边留白为0。
#设置子图的基本元素
ax1.set_title('python-drawing') #设置图体,plt.title
ax1.set_xlabel('x-name') #设置x轴名称,plt.xlabel
ax1.set_ylabel('y-name') #设置y轴名称,plt.ylabel
plt.axis([-6,6,-10,10]) #设置横纵坐标轴范围,这个在子图中被分解为下面两个函数
ax1.set_xlim(-5,5) #设置横轴范围,会覆盖上面的横坐标,plt.xlim
ax1.set_ylim(-10,10) #设置纵轴范围,会覆盖上面的纵坐标,plt.ylim
xmajorLocator = MultipleLocator(2) #定义横向主刻度标签的刻度差为2的倍数。就是隔几个刻度才显示一个标签文本
ymajorLocator = MultipleLocator(3) #定义纵向主刻度标签的刻度差为3的倍数。就是隔几个刻度才显示一个标签文本
ax1.xaxis.set_major_locator(xmajorLocator) #x轴 应用定义的横向主刻度格式。如果不应用将采用默认刻度格式
ax1.yaxis.set_major_locator(ymajorLocator) #y轴 应用定义的纵向主刻度格式。如果不应用将采用默认刻度格式
ax1.xaxis.grid(True, which='major') #x坐标轴的网格使用定义的主刻度格式
ax1.yaxis.grid(True, which='major') #x坐标轴的网格使用定义的主刻度格式
ax1.set_xticks([]) #去除坐标轴刻度
ax1.set_xticks((-5,-3,-1,1,3,5)) #设置坐标轴刻度
ax1.set_xticklabels(labels=['x1','x2','x3','x4','x5'],rotation=-30,fontsize='small') #设置刻度的显示文本,rotation旋转角度,fontsize字体大小
plot1=ax1.plot(x,y,marker='o',color='g',label='legend1') #点图:marker图标
plot2=ax1.plot(x,y,linestyle='--',alpha=0.5,color='r',label='legend2') #线图:linestyle线性,alpha透明度,color颜色,label图例文本
ax1.legend(loc='upper left') #显示图例,plt.legend()
ax1.text(2.8, 7, r'y=3*x') #指定位置显示文字,plt.text()
ax1.annotate('important point', xy=(2, 6), xytext=(3, 1.5), #添加标注,参数:注释文本、指向点、文字位置、箭头属性
arrowprops=dict(facecolor='black', shrink=0.05),
)
#显示网格。which参数的值为major(只绘制大刻度)、minor(只绘制小刻度)、both,默认值为major。axis为'x','y','both'
ax1.grid(b=True,which='major',axis='both',alpha= 0.5,color='skyblue',linestyle='--',linewidth=2)
axes1 = plt.axes([.2, .3, .1, .1], facecolor='y') #在当前窗口添加一个子图,rect=[左, 下, 宽, 高],是使用的绝对布局,不和以存在窗口挤占空间
axes1.plot(x,y) #在子图上画图
plt.savefig('aa.jpg',dpi=400,bbox_inches='tight') #savefig保存图片,dpi分辨率,bbox_inches子图周边白色空间的大小
plt.show() #打开窗口,对于方法1创建在窗口一定绘制,对于方法2方法3创建的窗口,若坐标系全部空白,则不绘制
第四种,利用pandas的DataFrame生成多系列图,然后拆分成子图。上述两种创建子图方法中的第三个子图都使用了pandas创建数据并在图表中展示了4条折线。这里我们依旧使用这个pandas数据,然后进行拆分直接生成子图。
# 导入包
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 准备数据
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
# 拆分生成子图
df.plot(figsize=(6, 6), subplots=True, layout=(2, 2))
plt.show()
在这里插入代码片
在前两种子图创建方法中,我们发现各个子图之间的间距非常小,尤其是垂直方向上的间距,看着很不舒服,我们使用subplots_adjust方法来调整子图间的间距,subplots_adjust方法接收wspace, hspace两个参数分别表示水平方向和垂直方向上的间距。以第二种方法为例,我们向其中加入subplots_adjust方法。
# 0、导入包
import matplotlib.pyplot as plt
import numpy as np
# 1、准备数据
data1 = np.random.rand(100).cumsum()
data2 = 50-np.random.rand(100).cumsum()
# 2、创建图像
fig, axes = plt.subplots(2, 2, figsize=(6, 6), facecolor=(0, 1, 0, 1))
# 3、绘图
ax1 = axes[0, 0]
ax1.plot(data1)
ax2 = axes[0, 1]
ax2.plot(data2)
ax3 = axes[1, 0]
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
ax3.plot(df)
# 4、自定义设置
ax1.set_title("No.1")
ax2.set_title("No.2")
ax3.set_title("No.3")
# 调整子图间间距
plt.subplots_adjust(wspace=0.2, hspace=0.4)
# 5、保存图形(按需要使用)
# plt.savefig(‘xxx.png’)
# 6、显示图形
plt.show()
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
理念:设定网格,选中网格,确定选中行列区域数量,编号从0开始
plt.subplot2grid((3,3),(1,0),colspan=2)
内嵌图
除了像子图这种图表比较外,我们有时候也常常在已有的图表中再生成图表来进行比较,这种方式就叫做内嵌。
# 0、导入包
import matplotlib.pyplot as plt
# 1、准备数据
x = [1, 2, 3, 4]
y1 = [10, 20, 30, 40]
y2 = [40, 30, 20, 10]
# 2、创建图像
fig = plt.figure(figsize=(3, 3), dpi=100, facecolor=(0,1,0,1),
edgecolor=(1,0,0,1), frameon=True, linewidth=1)
# 3、绘图
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
# 在ax1中内嵌
ax2 = fig.add_axes([0.2, 0.6, 0.25, 0.25])
# 4、自定义设置
ax1.plot(x, y1, 'r')
ax1.set_title('No.1')
ax2.plot(x, y2, 'b')
ax2.set_title('No.2')
# 5、保存图形(按需要使用)
# plt.savefig(‘xxx.png’)
# 6、显示图形
plt.show()
pyplot的绘图区域
plt.subplot(nrows, ncols, plot_number)
在全局绘图区域中创建一个 分区体系,并定位到一个子 绘图区域
plt.subplot(3,2,4)
plt.subplot(324)
pyplot的基础图标函数
说明 | |
---|---|
plt.plot(x,y,fmt,…) | 绘制一个坐标图 (线性二维图,折线图) |
plt.boxplot(data,notch,position) | 绘制一个箱形图 |
plt.scatter(x,y) | 绘制散点图,其中,x和y长度相同 |
plt.plot_date() | 绘制数据日期 |
plt.bar(left,height,width,bottom) | 绘制一个条形图 |
plt.barh(width,bottom,left,height) | 绘制一个横向条形图 |
plt.polar(theta, r) | 绘制极坐标图 |
plt.pie(data, explode | 绘制饼图 |
plt.hist(x,bins,normed) | 绘制直方图 |
plt.cohere(x,y,NFFT=256,Fs) | 绘制X‐Y的相关性函数 |
plt.psd(x,NFFT=256,pad_to,Fs) | 绘制功率谱密度图 |
plt.specgram(x,NFFT=256,pad_to,F) | 绘制谱图 |
plt.step(x,y,where) | 绘制步阶图 |
plt.contour(X,Y,Z,N) | 绘制等值图 |
plt.vlines() | 绘制垂直图 |
plt.stem(x,y,linefmt,markerfmt) | 绘制柴火图 |
pyplot 的 plot 函数
plt.plot(x,y, format_string, **kwargs)
∙ x : X轴数据,列表或数组,可选
∙ y :Y轴数据,列表或数组
∙format_string: 控制曲线的格式字符串,可选
∙ **kwargs: 第二组或更多(x,y,format_string)
当绘制多条曲线时,各条曲线的x不能省略
注意:如果向plot()指令提供了一维的数组或者列表,则matplotlib将默认它是一系列的y值,并且自动为其生成x的值。默认的x向量从0开始并且具有和y同样的长度。
∙format_string: 控制曲线的格式字符串
由颜色字符、风格字符和标记字符组成
plt.plot(x,y, format_string, **kwargs)
∙ **kwargs: 第二组或更多(x,y,format_string)
color : 控制颜色, color=‘green’ linestyle: 线条风格, linestyle=‘dashed’ marker : 标记风格, marker=‘o’ markerfacecolor: 标记颜色, markerfacecolor=‘blue’ markersize: 标记尺寸, markersize=20
plt.plot()
只有一个输入列表或数组时,参数被当作Y轴,X轴以索引自动生成
import matplotlib.pyplot as plt
plt.plot([3, 1, 4, 5, 2])
plt.ylabel("Grade")
plt.savefig('test', dpi=600) # png 文件
plt.show()
plt.plot(x,y)当有两个以上参数时,按照X轴和Y轴顺序绘制数据点
import matplotlib.pyplot as plt
plt.plot([0, 2, 4, 6, 8] ,[3, 1, 4, 5, 2])
plt.ylabel("Grade")
plt.axis([-1, 10, 0, 6]) # 确定 x,y 轴坐标
plt.savefig('test1', dpi=600) # png 文件
plt.show()
pyplot饼图的绘制
plt.pie()
pyplot直方图的绘制
plt.hist()
pyplot极坐标图的绘制
pyplot 散点图的绘制
在matplotlib中使用函数 matplotlib.pyplot.scatter 绘制散点图,matplotlib.pyplot.scatter的函数签名如下:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
常用参数有:x,y组成了散点的坐标;s为散点的面积;c为散点的颜色(默认为蓝色’b’);marker为散点的标记;alpha为散点的透明度(0与1之间的数,0为完全透明,1为完全不透明);linewidths为散点边缘的线宽;如果marker为None,则使用verts的值构建散点标记;edgecolors为散点边缘颜色。
其他参数如cmap为colormap;norm为数据亮度;vmin、vmax和norm配合使用用来归一化亮度数据,这些与数据亮度有关,可以参考这篇文章。
https://blog.csdn.net/u011915116/article/details/88525867
3D图
量场图
灰度图
等高线图
Matplotlib中的fill_between()函数总结
曲线覆盖
import numpy as np
import matplotlib.pyplot as plt
x = np.array([i for i in range(30)])
y = np.random.rand(30)
plt.plot(x, y)
plt.fill_between(x, 0, y, facecolor='green', alpha=0.3)
plt.show()
注意:fill_between()函数中的几个参数:
x:第一个参数表示覆盖的区域,直接复制为x,表示整个x都覆盖
0:表示覆盖的下限
y: 表示覆盖的上限是y这个曲线
facecolor:覆盖区域的颜色
alpha:覆盖区域的透明度[0,1],其值越大,表示越不透明
部分区域覆盖:plt.fill_between(x[2:15], 0.2, 0.6, facecolor=‘green’, alpha=0.3)
两曲线之间的覆盖:
y1 = np.random.rand(30)
y2 = y1 + 0.3
plt.plot(x, y1,'b',x,y2,'r')
plt.fill_between(x, y1, y2, facecolor='green', alpha=0.3)
import:
https://blog.csdn.net/u011915116/article/details/88525867
https://www.cnblogs.com/chenzhijuan-324/p/10700585.html
https://www.jianshu.com/go-wild?ac=2&url=http%3A%2F%2Fmatplotlib.org%2Fgallery.html