python Matplotlib库基础

2023-10-27

Matplotlib 数据可视化入门

注意:使用Matplotlib 库之前建议先掌握一定 NumPy 库和 Pandas 库知识。
使用 Matplotlib 库应先导入 matplotlib 包下 pyplot 模块,习惯性,我们将导入后的模块重新命名为 plt 。或者直接导入 matplotlib 包,习惯性,我们将导入后的包重新命名为 mpl 。

import matplotlib.pyplot as plt
import matplotlib as mpl

实际上,Pandas 库的 DataFrame 类本身也具有画图方法。因此,接下来会分为基于 matplotlib 的数据可视化和基于 dataframe 的数据可视化分别介绍。
注意,无论使用哪种绘图方法,都需要用 pandas 库读取数据并保存在数据框中,都需要用 matplotlib 库将图显示出来。

注意:如果用 JupyterLab 进行画图,还需要添加如下代码:

%matplotlib inline

Pyplot 绘图

自定义配置文件 rcParams

plt.rcParams 是一个类似于字典的对象,保存了自定义图形窗口的所有配置,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。我们可以用修改字典的方式修改 plt.rcParams 中保存的配置信息。
最常用的设置为:

plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False

上面一个用于设置显示中文,下面一个用于设置显示负号。
此外还有(简单举一些例子):
plt.rcParams[‘font.family’] 设置字体样式(例如 ‘YaHei Consolas Hybrid’ )
plt.rcParams[‘font.size’] 传入字符串设置字体大小(例如 ‘16’ )
plt.rcParams[‘font.weight’] = ‘normal’ 设置字体粗细(正常 ‘normal’ 和加粗 ‘bold’ )
plt.xticks(rotation=45) 设置横坐标标签旋转

创建绘图窗口

plt.figure() 函数可以用于创建绘图窗口,可以传入以下常用参数(这些参数均为可选):

参数 作用
num 传入整数或字符串。整数可以指定创建或激活对应编号窗口并保存至 number 属性,字符串可以设置该窗口标题
figsize 传入两个浮点数组成的元组,设置绘图窗口的宽和高
dpi 传入整数,设置分辨率
facecolor 传入代表颜色的字符串,设置背景色
edgecolor 传入代表颜色的字符串,设置边框颜色
clear 如果传入True,且当前窗口已经有绘图时,清空当前绘图

将 plt.figure() 返回值(画布对象)赋值给一个变量 fig ,即可利用该 fig 对象的方法对指定绘图窗口进行进一步调整和修改,而不需要再调用 plt.figure() 函数激活,具体参考该对象的 help 文档,接下来只介绍对当前激活窗口的设置和绘图。

plt.title() 函数可以传入一个字符串,将其设置为图表的标题,另外可以传入以下关键字:

参数 作用
fontdict 传入一个字典,用于设定字体的各种格式(fontsize、fontweight、color等)
loc 传入 ‘center’, ‘left’, ‘right’ 中的一个,用于设置标题位置
plt.grid() 传入 True 可以设置显示网格。
plt.xlabel(),plt.ylabel() 传入字符串设置坐标轴名称。
绘制子图

方法一:plt.subplot() 函数创建子图,返回 axes 对象,可调用所有绘图方法。
方法二:fig.add_subplot() 方法也可用于创建子图,同样也返回 axes 对象。
这两个函数(方法)都传入三位整数,代表行数、列数、子图编号。

注意:fig.add_axes 也可以绘制子图(更准确说时绘制坐标系),传入一个列表

ax2 = fig.add_axes([left,bottom,width,height])	# 左下角点的横坐标、纵坐标、子图宽度、高度

fig.add_subplot() 传入 projection 参数为 ‘polar’,可绘制极坐标系。

绘制饼图

此处参考:
python 用 matplotlib 饼图参数详解 plt.pie() by 百里希文

plt.pie() 函数用于绘制饼图,传入一个序列(数组、列表也可以,常用数据框的列属性)包含需要用于作图的数据的数值,且包含如下常用关键字参数。

参数 作用
explode 传入一个序列,包含若干个浮点数,表示每个扇形块到中心的距离(默认为0,显示为一个完整的圆)
labels 传入一个序列,包含传入的每个数据的标签
colors 传入一个序列,包含每个数据对应扇形块的颜色
autopct 传入一个格式化字符串,将数据的数值除以总数传入该格式化字符串中格式化后显示(或者传入一个函数),注意如果不传入任何东西,默认不显示数值
pctdistance 传入一个浮点数(0 ~ 1),表示扇形块数据标注的径向距离
shadow 传入 True 可绘制阴影
labeldistance 传入一个浮点数(>1),表示扇形块标签的径向距离
startangle 传入一个整数,表示初始位置所在的角度(默认水平向右为0度,逆时针计算)
radius 传入一个浮点数,表示饼图的半径,默认为1
counterclock 传入 False 可让扇形块按顺时针排列(默认逆时针)
rotatelabels 传入 True 可让标签旋转至对应扇形块的角度,默认为水平
绘制折线图

plt.plot() 函数用于绘制折线图,返回 Line2D 对象,参数格式有两种:

  1. 绘制单条折线
    plot([x], y, [fmt], *, data=None, **kwargs)
  2. 绘制多条折线
    plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)

其中中括号内的参数为可选的参数。

参数 作用
x 传入序列、列表类型的对象,包含各个点的横坐标数值,默认为 0~len(y)-1
y 传入序列、列表类型的对象,包含各个点的纵坐标数值
fmt 传入一个字符串,代表所绘制线条的样式(按颜色、点型、线型顺序),具体用法见附录1
data 关键字参数,传入一个具有索引功能的对象,此时 x、y 只需传入一个字符串来表示是该对象的这个索引
kwargs 中常用参数:
参数 作用
----- -----
color 设置线条的颜色,可用十六进制的RGB字符串精确设置颜色
label 设置线条的标签

plt.legend() 函数用于显示每条折线对应标签的图标,有如下三种用法:

  1. 已设置好标签情况下直接显示标签
    plt.legend()
  2. 重新设置标签,传入一个列表或元组对象,包含每条折线的标签(按折线绘制顺序)
    plt.legend(labels)
  3. 在传入标签列表参数的前面,加入一个列表或元组对象,指定每个标签对应的 line2D 对象
    plt.legend(handles, labels)

在此基础上有关键字参数 loc 传入一个字符串或整数序号用于设置标签图表的位置。

字符串 序号
‘best’ 0
‘upper right’ 1
‘upper left’ 2
‘lower left’ 3
‘lower right’ 4
‘right’ 5
‘center left’ 6
‘center right’ 7
‘lower center’ 8
‘upper center’ 9
‘center’ 10

plt.xlabel() 传入一个字符串作为横坐标标签
plt.ylabel() 传入一个字符串作为纵坐标标签

绘制条形图

plt.bar() 函数用于绘制条形图,传入两个序列或列表参数,格式为:
bar(x, height, width=0.8, bottom=None, *, align=‘center’, data=None, **kwargs)
x 为一个序列,包含所有数据的横坐标(例如日期格式的字符串,可以理解为标签),height 为每个横坐标对应的具体数值构成的序列(也就是每个条形的高度)。
此外还有如下常用关键字参数(包含 kwargs 内的):

参数 作用
width 传入0~1的浮点数,设置条形的宽度,默认为0.8
bottom 设置y轴的起始坐标
color 条形的颜色,参数格式同上文提到的
edgecolor 条形边框的颜色
linewidth 传入整数,代表条形边框的宽度为多少像素
log 传入True,设置y轴用科学计数法显示
orientation 传入两个字符串之一,默认 “vertical” 代表竖直条,传入 “horizontal” 代表水平条

plt.xlabel() 传入一个字符串作为横坐标标签
plt.ylabel() 传入一个字符串作为纵坐标标签

注:plt.barh() 可以绘制横向条形图。
注:复杂条形图和堆叠条形图,用 DataFrame 绘图更方便。

绘制散点图

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=< deprecated parameter>, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)
x,y 为两个列表,传入对应点的横纵坐标列表。
部分参数功能如下:

参数 作用
s 输入一个数组,设置点的大小,数组长度可以为1或散点个数
c 输入字符串列表,设置点的颜色,列表长度可以为1或三点个数,若c为浮点数列表则需要再传入cmap参数
marker 输入一个字符串,设置散点形状
norm 输入一个浮点数列表,设置点的亮度,浮点数范围为0~1,数值越大越亮
cmap 当 c 传入 0~1 之间浮点数列表时,使用此参数,可以实现渐变色
绘制热点图

利用好绘制散点图的 s、c、cmap 参数,即可绘制热点图。
cmap传入一个字符串,得到一个颜色条,c 为从0到1的浮点数,对应于颜色条上的某个颜色。
cmap可以传入的字符串有如下:
摘自:python 画图colorbar 颜色大全 plt.cm.get_cmap by Lee_Yu_Rui
注:名字后加 _r 可以取反
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

举例如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

N = 50
plot_df = pd.DataFrame(
    np.random.randint(1,50,3*N).reshape(N,3),
    columns = list('ABC')
)
c_max = max(plot_df.C)
plot_df.plot(x='A',y='B',kind='scatter',rot=0,s=plot_df.C*10,
             c=plot_df.C/c_max,cmap='seismic')
plt.show()

运行结果

绘制箱型图

boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, *, data=None)
x 为一维数组或二维数组,若为二维数组,则以其中每一个数组画一个箱型图。
部分参数功能如下:

参数 作用
notch 是否是凹口的形式展现箱线图,默认 False
sym 指定异常点的形状,默认为 ‘b+’
vert 是否需要将箱线图垂直摆放,默认 True,表示垂直摆放
whis 指定上下须与上下四分位的距离,默认为 1.5,表示1.5倍的四分位差
positions 指定箱线图的位置,默认为 range(1, N+1),N为箱型图个数
widths 指定箱线图的宽度,默认为0.5
meanline 是否用线的形式表示均值,默认 False,用点来表示
showmeans 是否显示均值,默认 False
showcaps 是否显示箱线图顶端和末端的两条线,默认 True
showbox 是否显示箱线图的箱体,默认 True
showfliers 是否显示异常值,默认 True
labels 传入一个字符串列表,列表长度为箱型图个数,为箱线图添加标签(在横坐标的位置)
绘制分类图背景

这个可以在画样本分类图时,同时表现出分类范围。或者在其他需要设置图的背景颜色(例如画地形图时)使用。主要需要用到 np.meshgrid() 函数用于生成网格坐标对应的 (x,y),z 保存每个坐标点代入模型 .predict() 方法得到的预测值,用 plt.pcolormesh() 函数传入坐标参数、每个坐标分类标签预测值和每个标签对应的颜色。
具体使用方法可套用下例,这里不详细讲了。

xx, yy = np.meshgrid(np.arange(x_min, x_max, .02), np.arange(y_min, y_max, .02))
z = model.predict(np.c_[xx.ravel(), yy.ravel()])
plt.pcolormesh(xx, yy, z, cmap=plt.cm.Pastel1)

cmap参数除了传入前面提到的颜色条字符串,也可以直接传入颜色条对象,或者用 mpl.colors.ListedColormap() 函数自定义对象。

import matplotlib as mpl
#传入代表颜色的字符串列表
cm_mine = mpl.colors.ListedColormap(['g', 'r', 'b']) 
显示绘图窗口

注:大多数图形都适用绘制折线图中提到的 plt.legend() 函数

plt.show() 函数可用于将绘制好的绘图窗口显示出来。
plt.savefig() 函数输入 ‘路径+文件名’ 字符串可以将绘制窗口保存为图片。

DataFrame 绘图

此处参考:
pandas.DataFrame.plot( )参数详解 by hhhooo000
df.plot() 方法也可以用于绘图,并在部分情况下优于 Pyplot 绘图。
注:Series 对象也具有此方法。
以 DataFrame 对象为例,其每一列列名作为分类标签。其每一列的具体值即为y值。若 plot 方法 subplots 参数设为 True,即按每一列分别绘制子图。
df.plot() 最重要的参数为 kind 参数,代表所绘制图的类型。有如下输入:

字符串 含义
‘line’ 折线图 (default)
‘bar’ 垂直柱状图,stacked=True时为堆叠图,stacked=False时为复杂图
‘barh’ 水平柱状图,同上
‘hist’ 直方图
‘box’ 箱型图
‘kde’ 核密度估计图,主要对柱状图添加 Kernel 概率密度线
‘density’ 和 ‘kde’ 一样
‘area’ 与x轴所围区域图(面积图)。stacked=True时,每列必须全部为正或负值,stacked=False时,对数据没有要求
‘pie’ 饼图,df 需指定Y轴或者subplots=True
‘scatter’ 散点图,df 需指定X轴Y轴
‘hexbin’ 六边形分箱图,df 需指定X轴Y轴

下面再总结 df.plot() 方法的部分参数:

参数 作用
x 传入标签或序号,指定横坐标或分类依据
y 传入标签或序号,指定纵坐标或数据数值
kind 传入字符串,指定绘图类型
figsize 传入 tuple (width, height) ,指定绘图画布大小
use_index 传入 bool,是否将 index 作为 x,默认 True
title 传入字符串或字符串列表,设置图形标题或各个子图标题
grid 传入 True 用于显示网格
legend 传入 bool,是否显示图例
style 传入列表或字典,指定每条线(数据)的显示格式
logx 或 logy 或 loglog 传入 bool,是否横/纵/每个坐标轴取对数
xticks 或 yticks 传入有序列表,设置x/y轴刻度值,对图无影响,只改变坐标轴
xlim 或 ylim 传入数值或二元数组(元组或列表),设置坐标轴最小值或范围
rot 传入整型数值,表示x轴标签旋转角度
table 传入 bool,是否在图下绘制表格
sort_columns 传入 bool,对列名称进行排序以确定绘图顺序
secondary_y 传入 True 或者一个序列,设置第二个y轴(右辅助y轴)

其他可传入参数取决于 kind,即绘图类型。一般和 Matplotlib 绘图一致,特殊情况见如下例子。

堆叠柱状图

利用 DataFrame 绘制柱状图时,可以传入参数 stacked = True,生成堆叠图。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plot_df = pd.DataFrame(
    np.random.randint(1,10,30).reshape(10,3),
    columns = list('ABC')
)
plot_df.plot(kind='bar',rot=0,stacked=True)
plt.show()

运行结果

面积图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plot_df = pd.DataFrame(
    np.random.randint(1,10,30).reshape(10,3),
    columns = list('ABC')
)
plot_df.plot(kind='area',rot=0)
plt.show()

面积图也可以堆叠
运行结果

六边形分箱图

需传入两个数组,代表一系列二维坐标,二维图上每一块颜色深浅代表这一块坐标出现的频数大小。
可以更直观地表现出二维直方图的效果,但其颜色代表频数。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plot_df2 = pd.DataFrame(np.random.randn(1000, 2), columns=['a', 'b'])
# gridsize 参数越大,每个六边形大小越小,图上的六边形越多,图越精确。
plot_df2.plot.hexbin(x='a',y='b',gridsize=25)
plt.show()

运行结果

附录

fmt 参数具体用法

此处参考:
matplotlib.pyplot.plot()参数详解 by ims-
fmt 参数传入一个字符串,按颜色、点型、线型的顺序拼接而成。
颜色(可用 color 参数代替):

字符串 含义
'b' blue 蓝色
'g' green 绿
'r' red 红
'c' cyan 蓝绿
'm' magenta 洋红
'y' yellow 黄
'k' black 黑
'w' white 白
点型(可用 marker 参数代替):
字符串 含义
----- -----
'.' point marker
',' pixel marker
'o' circle marker
'v' triangle_down marker
'^' triangle_up marker
'<' triangle_left marker
'>' triangle_right marker
'1' tri_down marker
'2' tri_up marker
'3' tri_left marker
'4' tri_right marker
's' square marker
'p' pentagon marker
'*' star marker
'h' hexagon1 marker
'H' hexagon2 marker
'+' plus marker
'x' x marker
'D' diamond marker
'd' thin_diamond marker
竖线 vline marker
'_' hline marker
线型(可用 linestyle 参数代替):
字符串 含义
----- -----
'-' solid line style 实线
'--' dashed line style 虚线
'-.' dash-dot line style 点画线
':' dotted line style 点

例如 ‘ro-’ 就代表红色,数值点用圆形突出,点之间连线为实线的线条。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python Matplotlib库基础 的相关文章

随机推荐

  • 基于VirtualBox安装Ubuntu图文教程

    Linux Ubuntu 系统安装图文教程 目录 Linux Ubuntu 系统安装图文教程 1 基于Windows10系统的WSL Windows Subsystem for Linux 安装Ubuntu 启用Linux 子系统功能 WS
  • ElasticSearch学习

    连接2 https mbd baidu com ug share mbox 4a83aa9e65 share product smartapp tk c708d7370bedbd0d7beded8c305e61c4 share url ht
  • 【JAVA集合框架相关接口和常见的实现类】

    文章目录 一 什么是集合框架 1 1类和接口总览 1 2Java 集合框架的优点及作用 二 接口 interfaces 2 1基本关系说明 2 2Collection接口 重点 2 2 1Collection 接口说明 2 2 2Colle
  • 测试cpu是否有问题的软件,cpu测试软件

    1 CPU Z CPU Z是一款家喻户晓的CPU检测软件 是检测CPU使用程度最高的一款软件 除了使用Intel或AMD自己的检测软件之外 我们平时使用最多的此类软件就数它了 它支持的CPU种类相当全面 软件的启动速度及检测速度都很快 另外
  • excel填充序列_Excel中快速填充序号的3种技巧一次性都教你

    在Excel中填充序号可能是最基础的操作 但是今天我们要分享的并不是简单的1 2 3的填充 而是可以让你录入速度快10倍的excel技巧 其中一些操作90 的人都不知道 一 按数字顺序快速填充 当我们在Excel中输入1 2 3这种顺序的序
  • 【yarn】yarn Task 状态机正常执行流程

    1 概述 上一篇文章 Yarn Yarn Service端如何处理客户端提交的任务 在上一篇文章中 我们知道服务器接收到客户端提交的任务之后 会启动多个状态机进行联合操作 最终来解决任务提交之后的全流程 多个状态机合作完成任务 然后我们看了
  • 若依框架 路由带参数跳转有缓存的解决方法

    若依框架的话 直接打开src api router index js路由配置项 path storage component Layout hidden true redirect noredirect children path orde
  • 关于SpringCloudAlibaba,看阿里这篇笔记真香

    Spring Cloud Alibaba 是国产的微服务开发一站式解决方案 与原有 Spring Cloud 兼容的同时对微服务生态进行扩展 通过添加少量的配置注解 便可实现更符合国情的微服务架构 相比 Spring Cloud 官方标准
  • C++中"endl"和"\n"的区别

    换行符 endl 该符号与 n 的区别 endl 除了具备 n 的功能外 还调用输出流flush函数 刷新缓冲区 让数据直接写入文件或者屏幕上 这两种都可以用的 不过如果需要立即显示 比如输入到显示器的场合 最好用 endl 如果不需要立即
  • 《蓝桥杯真题》:2020年单片机省赛(第十一 / 11届第一场)

    2020年单片机省赛 有关题目 实现代码 main c 写法一 写法二 iic h iic c 有关题目 实现代码 注意 代码实现方面 从eeprom读出数据的过程中要注意不跟和从pcf8591读取数据一样 不需要rd eeprom 0x0
  • go之构建简单的web服务器3.0

    引入etcd模块 实现对etcd的增删改 目录架构如下 etcd go代码 package storage import context time fmt errors clientv3 go etcd io etcd client v3
  • C与PHP的联系与区别

    联系 1 PHP是C语言实现的一个应用软件 PHP的程序执行 最终也是调用C函数 很多时候 一些要优化性能的工作可以通过对PHP进行C扩展来实现 区别 0 PHP是面向对象语言 C是面向过程的函数过程式语言 1 PHP是弱类型语言 使用变量
  • 【Inno Setup】Inno Setup覆盖安装前执行卸载、获取原安装路径

    Inno Setup Inno Setup覆盖安装前执行卸载 获取原安装路径 分享下目前用到的一个简单的 Inno Setup 安装包制作脚本 主要功能有3个 安装前检测是否已安装 如果是覆盖安装则提示是否先进行卸载 程序卸载时不会自动卸载
  • Navicat Premium下sql导入中文乱码解决方案

    最近帮客户导数据比较多 用阿里云感觉不方便 Navicat Premium还是好用 但是数据稻城excel就会乱码 解决方案 1 看图说话 右键选中 2 三条SQL完成 mysql gt show databases Database in
  • 「Python 面试」第六次面试

    1 说一说 Redis 是什么 Redis 是一种 Key Value 的内存型 非关系型数据库 属于 NoSQL 的一种 Redis 的读写速度特别快 特别适合读写频繁的场景 Redis 支持主从复制 支持数据持久化 2 知道 Redis
  • MMD相关制作

    1 导入可转换mmd和vmd 动作数据 的插件 导入后unity中为 2 导入模型和vmd和音频 3 在unity中点击模型右边弹出的协议全打勾并应用 4 其中的mmd动作数据转换成功 点击人物把rig下第一个选择Huamoid点击应用 再
  • Vue中nextTick使用

    1 语法 this nextTick 回调函数 2 作用 在下一次Dom更新结束后执行其指定的回调函数 3 使用场景 当数据改变后 要基于更新后的新Dom进行某些操作时 要在nextTick所指定的回调函数中执行
  • 查询oracle所用用户,查询所有用户(oracle查询所有用户)

    查询所有用户 oracle查询所有用户 2020 07 24 11 10 05 共10个回答 1 查询oracle中所有用户信息select fromdba users 2 只查询用户和密码selectusername passwordfr
  • 数据结构---桶排序

    桶排序 第一步 第二步 第三步 第四步 JAVA实现 时间复杂度 空间复杂度总结 每一个桶 bucket 代表一个区间范围 里面可以承载一个或多个元素 第一步 就是创建这些桶 并确定每一个桶的区间范围 我们这里创建的桶数量等于原始数列的元素
  • python Matplotlib库基础

    目录 Matplotlib 数据可视化入门 Pyplot 绘图 自定义配置文件 rcParams 创建绘图窗口 绘制子图 绘制饼图 绘制折线图 绘制条形图 绘制散点图 绘制热点图 绘制箱型图 绘制分类图背景 显示绘图窗口 DataFrame