目录

  • Matplotlib 数据可视化入门
    • Pyplot 绘图
      • 自定义配置文件 rcParams
      • 创建绘图窗口
      • 绘制子图
      • 绘制饼图
      • 绘制折线图
      • 绘制条形图
      • 绘制散点图
        • 绘制热点图
      • 绘制箱型图
      • 绘制分类图背景
      • 显示绘图窗口
    • DataFrame 绘图
      • 堆叠柱状图
      • 面积图
      • 六边形分箱图
    • 附录
      • fmt 参数具体用法

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 pltN = 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 pltplot_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 pltplot_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 pltplot_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-’ 就代表红色,数值点用圆形突出,点之间连线为实线的线条。

python Matplotlib库基础相关推荐

  1. Python 数据分析与展示笔记3 -- Matplotlib 库基础

    Python 数据分析与展示笔记3 – Matplotlib 库基础 Python 数据分析与展示系列笔记是笔者学习.实践Python 数据分析与展示的相关笔记 课程链接: Python 数据分析与展 ...

  2. Python系列 之 matplotlib库 基础知识

    Python系列 之 matplotlib库 基础知识学习 Pyplot 简单示例 中文显示问题 注册全局字体 font_manager.FontProperties注册字体 Figure Figur ...

  3. Python - matplotlib库 - 中文字体设置

    Python - matplotlib库 - 中文字体设置 在matplotlib绘制折线图柱状图时,如果对x,y,图表标题,直接使用plot.xlabel("时间"):plot. ...

  4. python数据可视化开发(1):Matplotlib库基础知识

    文章目录 前言 01.工具栏组件 02.图表数据 03.设置字体字典 全局字体样式 常用中文字体对应名称 查询当前系统所有字体 04.图像配置实例 配置格式 参数说明 官方文档:[matplotlib ...

  5. 解决Macos中Python Matplotlib库中文显示乱码问题

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...

  6. Python -- Matplotlib库的使用

    Matplotlib库的使用   要点:matplotlib是提供数据绘图功能的第三方库,其pyplot子库主要用于实现各种数据展示图形的绘制. 1. matplotlib.pyplot库概述   m ...

  7. Python Matplotlib库绘制曲线图 最快入门教程(最详细最简单)

    文章目录 1.导入Matplotlib库 2.最常用的绘图函数plot 3.展示绘制完成的图像 4.保存绘制的图像 5.分割子绘图区域 6.设置横纵轴的坐标轴名称 7.设置图像名称 8.让图像中可以出 ...

  8. 使用Python matplotlib库绘制漏斗图

    pyecharts pyecharts有漏斗图的模板(点击链接),套用即可. 代码 from pyecharts import options as opts from pyecharts.chart ...

  9. python第三方库-基础

    1.python社区 python有一个全球社区,提供了超过十三万个涵盖各种领域应用的第三方库,该社区可通过 http://pypi.org/ 来访问.PyPI(Python Package Inde ...

最新文章

  1. [JS] 题解:提取不重复的整数
  2. C++:随笔4--对象
  3. 雷林鹏分享:YAF 在Nginx环境下的Rewrite规则
  4. [蓝桥杯][2015年第六届真题]生命之树(树形dp)
  5. Android之SharedPreferences 存储复杂对象
  6. 为什么年龄大了近视还增加_年龄明明一样大,为什么有人长得年轻,有人显老呢?...
  7. python、中循环功能可通过什么命令实现_python定时执行指定函数的方法 Python如何定时循环执行命令?...
  8. 添加url白名单_赏金技巧 | URL跳转Bypass案例
  9. 关于IE8以上 不引人css 症状
  10. 自己闲着没事整理的人工智能的思维导图
  11. ubuntu 安装nvm
  12. 98五笔86五笔及五笔字型口诀字根表
  13. 不要以为过了技术面就安全了,HR面也会挂人的!!
  14. 秋天的第一杯奶茶刷屏互联网,其背后又蕴含着哪些营销逻辑呢?
  15. background-color:transparent
  16. JZOJ 4250. 【五校联考7day1附加题】路径(折半搜索)
  17. 2022-3-26 Java SE检测试卷
  18. igraph入门教程
  19. 单身程序狗没有妹子可以炫耀,怎么办?
  20. ffmpeg rtmp推流代码示例

热门文章

  1. 2023年中职网络安全竞赛试题—竞赛样题
  2. Burn for mac免费直观刻录软件
  3. adb冲突 傲软_关于adb冲突导致无法连接(Win10系统)
  4. vue加载动画element ui V-loading属性 踩坑记录
  5. Android 10.0 系统禁用深色主题背景功能
  6. 字节后台三面高难度面经
  7. 西门子工业软件+Mendix,低代码让普通员工秒变技术员,你会被取代吗?
  8. 数学建模预备知识——整数规划
  9. 计算机配置ppt制作,笔记本电脑怎么制作PPT
  10. 王道考研操作系统个人笔记--第一章计算机系统概述