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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何为xl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值