Matplotlib——绘制图表

文章目录

  • 通过figure()函数创建画布
  • 通过subplot()函数创建单个子图
  • 通过subplots()函数创建多个子图
  • 通过add_subplot()方法添加和选中子图
  • 添加各类标签
  • 绘制常见图表
    • 绘制直方图——hist()函数
    • 绘制散点图——scatter()函数
    • 绘制柱状图——bar()函数
  • 设定线条的相关参数
  • 本地保存图片


通过figure()函数创建画布

在pyolot模块中,默认拥有一个Figure对象,该对象可以理解为一张空白的画布,用于容纳图标的各种组件,比如图例、坐标轴等。

figure(num=None, # autoincrement if None, else integer from 1-N
figsize=None, # defaults to rc figure.figsize
dpi=None, # defaults to rc figure.dpi
facecolor=None, # defaults to rc figure.facecolor
edgecolor=None, # defaults to rc figure.edgecolor
frameon=True,
FigureClass=Figure,
clear=False,
**kwargs
)

部分参数表示的含义如下:

  1. num:表示图形的编号或名称,数字代表编号,字符串表示名称。如果没有提供该参数,则会创建一个新的图形,并且这个图形的编号会增加;如果提供该参数,并且具有此id的图形已经存在,则会将其激活并返回对其的引用,若此图形不存在,则会创建并返回它。
  2. figsize:用于设置画布的尺寸,宽度、高度以英寸为单位。
  3. dpi:设置图形的分辨率。
  4. facecolor:用于设置画板的背景颜色。
  5. edgecolor:用于显示边框原色。
  6. frameon:表示是否显示边框。
  7. FigureClass:派生自matplotlib.figure.Figure的类,可以选择使用自定义的图形对象。
  8. clear:若设为True且该图形已经存在,则它会被清除。

创建新的画布并返回Figure实例

figure_obj = plt.figure()
print(type(figure_obj))

输出结果:

<class 'matplotlib.figure.Figure'>

用type()查看figure_obj对象的类型,可以看出其是一个Figure类的对象。

创建的新画布:
在这里插入图片描述


尝试另创建一个背景颜色为灰色的新画布,并在画布上绘制一张折线图:

import matplotlib.pyplot as plt
import numpy as npdata = np.arange(100, 201)
plt.figure(facecolor='gray')
plt.plot(data)
plt.show()

输出结果:
在这里插入图片描述
从输出结果可以看出x轴的刻度范围为0~100,y轴的刻度范围为指定的数值区间。这是因为在调用plot()函数时,如果传入了单个列表或数组,则会将其设为y轴序列,且自动生成x轴的序列。x轴的序列从0开始,与y轴序列具有相同的长度。


通过subplot()函数创建单个子图

在同一个画布上绘制多个图形,Figure对象允许划分为多个绘图区域,每个绘图区域都是一个Axes对象,它拥有属于自己的坐标系统,被称为子图。

subplot(nrows, ncols, index, **kwargs)

参数表示的含义如下:

  1. nrows,ncols:表示子区网格的行数、列数。
  2. index:表示矩阵区域的索引。

subplot()函数会将整个绘图区域等分为“nrows(行)× ncols(列)”的矩阵区域,之后按照从左到右、从上到下的顺序对每个区域进行编号。从一开始依次递增。

如果nrows, ncols, index这三个参数的值都小于10,则可以把它们简写为一个实数,如subplot(2,2,3)可以写成subplot(223)。

创建单个子图并在其上绘制简单的图形:

data = np.arange(100, 201)
plt.subplot(221)
plt.plot(data, data)
plt.subplot(2, 2, 2)
plt.plot(data, -data)
plt.subplot(212)
plt.plot(data, data*2)
plt.show()

输出结果:

在这里插入图片描述
通过subplot()函数可以规划Figure对象划分为多少个字图,但每调用一次该函数只会创建单个子图。


通过subplots()函数创建多个子图

如果希望一次性创建一组子图,则可以通过subplots()函数进行实现。

subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,
subplot_kw=None, gridspec_kw=None, **fig_kw):

上述函数常用的参数含义如下:

  1. nrows,ncols:表示子区网格的行数、列数,默认为1。
  2. sharex,sharey:表示控制x或y轴是否共享。若设为“True”或“all”,则表示x或y轴在所有的子图中共享;若设为“False”或“None”,则每个子图的x或y轴是独立的;若设为“row”,则每个子图沿方向共享x轴或y轴;若设为“col”,则每个子图沿方向共享x轴或y轴。

subplots()函数会返回一个元组,元组的第一个元素为Figure对象(画布),第二个元素为Axes对象(子图,包含坐标轴和画的图)或Axes对象数。如果创建的是单个子图,则返回的是一个Axes对象,否则返回的是一个Axes对象数组。


创建4个子图,并在每个子图上绘制一些简单的图形:

# 生成包括100~200之间所有整数的数组
data = np.arange(100, 201)# 分成2*2的矩阵区域,返回子图数组axes
fig, axes = plt.subplots(2, 2)
ax1 = axes[0, 0]
ax2 = axes[0, 1]
ax3 = axes[1, 0]
ax4 = axes[1, 1]
# 再选中的子图上作图
ax1.plot(data, data)
ax2.plot(data, -data)
ax3.plot(data, data**2)
ax4.plot(data, np.log(data))
plt.show()

输出结果:

在这里插入图片描述


通过add_subplot()方法添加和选中子图

想要创建子图,除了使用pyplot模块的函数之外, 还可以通过Figure类的add_subplot()方法添加和选中子图。

add_subplot(self, *args, **kwargs)

上述方法中,*args参数表示一个三位数的实数或三个独立的实数,用于描述子图的位置。(具体用法类似于subplot()函数中的nrows, ncols, index参数。)

注意: 每调用一次add_subplot()方法会规划画布划分子图,但只会添加一个子图。当调用plot()函数绘制图形时,会画在最后一次指定子图的位置上。


创建具有两行两列的矩阵区域,且在编号为2的子图上绘制图形:

# 通过add_subplot()方法添加和选中子图
fig = plt.figure()
# 添加子图
fig.add_subplot(2, 2, 1)
fig.add_subplot(2, 2, 4)
fig.add_subplot(223)
fig.add_subplot(2, 2, 2)
# 在子图上作图,randn函数返回一个或一组样本,具有标准正态分布。
random_arr = np.random.randn(100)
# 默认是在最后一次使用subplot的位置上作图,即编号为3的位置
plt.plot(random_arr)
plt.show()

输出结果:
在这里插入图片描述
上述示例中,首先创建了Figure类对象fig,然后调用add_subplot()方法将fig对象化分为一个2行2列的矩阵区域,且将图形绘制在最后选中的编号为2的子区域上,调用plot()函数根据创建的随机数组绘制折线图。


添加各类标签

图表添加标签和图例的常用函数

函 数 名 称说 明
title()设置当前轴的标题
xlabel()设置当前图形x轴的标签名称
ylabel()设置当前图形y轴的标签名称
xticks()指定x轴刻度的数目与取值
yticks()指定y轴刻度的数目与取值
xlim()设置或获取当前图形x轴的范围
ylim()设置或获取当前图形y轴的范围
legend()在轴上放置一个图例

表中的函数之间是并列关系,没有先后顺序,既可以先绘制图形,也可以先添加标签。当然,添加图例只能在绘制完成之后。


在使用Matplotlib绘图时,如果要设置的图标标题中有中文字符,则会变成方格子而无法正确显示。
在这里插入图片描述
实际上Matplotlib是支持中文编码的,出现这种情况主要是因为Matplotlib库的配置信息里面没有中文字体的相关信息,这是可以采用以下方式进行解决:

在python脚本中动态设置matplotlib,这样就可以避免由于更改配置文件而造成的麻烦。
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 设置显示中文字体
另外,由于字体更改以后会导致坐标轴中部分字符无法正常显示,这是需要更改axes.unicode_minus参数。
mpl.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号

代码实现:

# 添加各类标签
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 设置显示中文字体
mpl.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号
data1 = np.arange(0, 1.8, 0.1)
plt.title("陈丑丑的身高体重数据")  # 添加标题
plt.xlabel("length")  # x轴名称
plt.ylabel("weight")  # y轴名称
plt.xticks(np.arange(0, 1.8, step=0.1))
plt.yticks(np.arange(0, 66, step=4))
plt.plot(data1, (data1**2)*20)  # 绘制y=(x^2)*20曲线
plt.legend(["y=(x^2)*20"])  # 添加图例
plt.show()

输出结果:
在这里插入图片描述


绘制常见图表

绘制直方图——hist()函数

hist(
x, bins=None, range=None, density=False, weights=None,
cumulative=False, bottom=None, histtype=‘bar’, align=‘mid’,
orientation=‘vertical’, rwidth=None, log=False, color=None,
label=None, stacked=False, *, data=None, **kwargs)

上述函数中常用参数表示的含义如下:

  1. x:表示输入值,可以是单个数组,或者是不需要相同长度的数组序列。
  2. bins:表示绘制条柱的个数,默认为10。
  3. range:bins的上下范围(最大和最小值)。
  4. color:表示条柱的颜色,默认为None。

代码实现:

arr_random = np.random.randn(100)
plt.hist(arr_random, bins=8, color='m', alpha=0.5)  # alpha用于设置颜色深度——透明度
plt.show()

输出结果:
在这里插入图片描述
上述示例中,首先创建了一个包含100个随机数的数组,用来表示绘制图形使用的数据,接着调用hist()函数绘制一个直方图,这个直方图共有8个条柱,每个条柱的颜色为品红,透明度alpha为0.5。


绘制散点图——scatter()函数

scatter(
x, y, s=None, c=None, marker=None, cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
verts=cbook.deprecation._deprecated_parameter,
edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)

上述函数中常用参数表示的含义如下:

  1. x,y:表示x轴和y轴对应的数据。
  2. s:指定散点的大小。若传入的是一维数组,则表示每个点的大小。
  3. c:指定散点的颜色。若传入的是一维数组,则表示每个点的颜色。
  4. marker:表示绘制的散点类型。
  5. alpha:表示点的透明度,取值0~1之间。

代码实现:

# 绘制散点图
x = np.arange(21)
y = np.random.rand(21)*10
plt.scatter(x, y, c='g', marker='*')
plt.show()

输出结果:
在这里插入图片描述
上述示例中,首先创建了一个包含整数0 ~ 20的数组,这些数值将作为散点图中x轴对应的数据。其次创建了含有21个0 ~ 1之间的随机数的数组,将它们乘以10的结果作为y轴对应的数据。散点的类型为星形。【关于线条的相关参数设置在本篇篇尾】


绘制柱状图——bar()函数

bar(
x, height, width=0.8, bottom=None, *, align=‘center’,
data=None, **kwargs)

上述函数中常用参数表示的含义如下:

  1. x:表示x轴的数据。
  2. height:表示条形的高度。
  3. width:表示条形的宽度,默认为0.8。
  4. color:表示条形的颜色。
  5. edgecolor:表示条形边框的颜色。

代码实现:

# 绘制柱状图
x1 = np.arange(5)
# 从上下限范围内随机选取整数,创建两个2行5列的数组
y1, y2 = np.random.randint(1, 91, size=(2, 5))
ax = plt.subplot(222)  # 创建一个子图
width = 0.25  # 条形的宽度
ax.bar(x1, y1, width=width, color='r')  # 绘制红色的柱形图
ax.bar(x1+width, y2, width=width, color='g')  # 绘制另一个绿色的柱形图
ax.set_xticks(x1+0.1)  # 设置x轴的刻度
ax.set_xticklabels(['a', 'b', 'c', 'd', 'e'])  # 设置x轴的标签
plt.show()

输出结果:
在这里插入图片描述
上述示例中,首先创建了包含整数0 ~ 4的数组,将其作为x轴的数据;接着又创建了两个2行5列的二维数组,它们的数据是从1 ~ 30内随机选取的整数,然后再指定编号为2的子图上,调用bar()函数绘制了两个柱形图。第一个柱形图x,y轴的数据设为x1、y1,颜色为红色。第二个柱形图x,y轴使用的数据为x+width和y2,颜色为绿色,最后设置了x轴的刻度标签为“a、b、c、d、e”。


设定线条的相关参数

线条颜色使用color参数控制

颜 色 值说 明
b(blue)蓝色
g(green)绿色
r(red)红色
c(cyan)青色
m(magenta)品红
y(yellow)黄色
k(black)黑色
w(white)白色

标记风格使用marker参数控制

标记风格值说 明
o实心圆圈
D菱形
h六边形1
H六边形2
8八边形
p五边形
+加号
.
s正方形
*星形
v倒三角形
^正三角形
>一角朝右的三角形
<一角朝左的三角形

线型使用linestyle参数控制

线型值说明
-实线
长虚线
-.短点相间线
:短虚线

代码示例:

data2 = np.arange(1, 3, 0.3)
plt.plot(data2, marker="x", linestyle='--')
plt.plot(data2+1, marker='o', linestyle=':')
plt.plot(data2+2, color='k', marker='s', linestyle='-.')

输出结果:
在这里插入图片描述

代码示例:

# 等价于
plt.plot(data2, 'x--', data2+1, 'o:', data2+2, 'ks-.')

输出结果:
在这里插入图片描述


本地保存图片

想要保存当前生成的图表,可以调用savefig()函数进行保存。

savefig(*args, **kwargs)

上述函数中,有fname参数——一个包含文件名路径的字符串,或者是一个类似于Python文件的对象。
如果format参数设为None且fname参数是一个字符串,则输出格式将根据文件名的扩展名推导出来。

使用savefig()函数将图片保存在指定的目录下,具体代码实现如下(在show()函数钱插入):

data2 = np.arange(1, 3, 0.3)
plt.plot(data2, marker="x", linestyle='--')
plt.plot(data2+1, marker='o', linestyle=':')
plt.plot(data2+2, color='k', marker='s', linestyle='-.')
# 等价于
plt.plot(data2, 'x--', data2+1, 'o:', data2+2, 'ks-.')# 本地保存图片
plt.savefig(r"D:\数据分析\demo.png")
plt.show()
print("over!")

输出结果:
在这里插入图片描述
在操作完成后使用print(“over!”)输出上图结果作为执行结束提示。

可以从相应路径中打开文件以检查是否成功保存。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

限制在同一台电脑上只允许有一个用户登录系统

在web应用系统中&#xff0c;出于安全性考虑&#xff0c;经常需要对同一客户端登录的用户数量和一个客户同时在多个客户端登陆进行限制。 具体一点就是&#xff1a; 1、在同一台电脑上一次只允许有一个用户登录系统&#xff1b; 2、一个用户在同一时间只允许在一个客户端登录…

Seaborn——绘制统计图形

文章目录可视化数据的分布绘制单变量分布绘制双变量分布绘制成对的双变量分布用分类数据绘图类别散点图通过stripplot()函数画散点图swarmplot()函数类别内的数据分布绘制箱型图绘制提琴图类别内的统计估计绘制条形图绘制点图可视化数据的分布 绘制单变量分布 一般采用最简单…

Bokeh——交互式可视化库

文章目录前言如何通过Plotting绘制图形前言 Bokeh是一个专门针对Web浏览器使用的交互式可视化库&#xff0c;这是与其他可视化库相比最核心的区别。 如何通过Plotting绘制图形 Plotting是以构建视觉符号为核心的接口&#xff0c;可以结合各种视觉元素&#xff08;例如&#x…

指针、引用以及const限定符、constexpr限定符

文章目录复合类型引用概念与使用引用的定义注意指针概念声明方式取地址符指针值空指针利用指针访问对象赋值和指针void* 指针指向指针的指针指向指针的引用初始化所有指针有多重含义的某些符号const限定符概念const的引用指针和const顶层const和底层constconstexpr和常量表达式…

关键字typedef、关键字using、auto类型说明符和declytpe类型指示符

文章目录类型别名概念关键字 typedef别名声明 (alias declaration) using指针、常量和类型别名类型别名简化多维数组指针auto类型说明符概念复合类型、常量和autodecltype类型指示符概念decltype和引用类型别名 概念 有两种方法可用于定义类型别名。 关键字 typedef typede…

初始化、赋值、默认初始化、列表初始化、类内初始值、直接初始化与拷贝初始化

文章目录初始化和赋值的区别什么是默认初始化&#xff1f;列表初始化列表初始化的使用场景不适合使用列表初始化的场景类内初始值混用string对象和C风格字符串数组与vector对象关于vector对象两者间的初始化关系直接初始化与拷贝初始化初始化和赋值的区别 初始化的含义是创建变…

js动态增加,删除td,tr,table,div

js实现的动态添加&#xff0c;删除table内容&#xff1a; 截图如下&#xff1a; 1. 2. 源代码&#xff1a; main.css body {background-image: url(../images/qiantai/bg.png);font-family: arial;font-size: 12px;color: #d4d7da;text-align: center;background-repeat: r…

string类的相关知识及部分操作

文章目录string对象的初始化string::size_type类型string对象的读写操作使用标准库中的iostream使用getline读取一整行string对象的比较操作string对象的相加操作两个string对象相加字面值和string对象相加string对象的初始化 拷贝初始化(copy initialization)&#xff1a;使用…

数组的部分练习

3.27&#xff1a;假设txt_size是一个无参数的函数&#xff0c;它的返回值是int。请回答下列哪个定义是非法的&#xff1f;为什么&#xff1f; unsigned buf_size1024; &#xff08;a&#xff09;int ia[buf_size];  &#xff08;b&#xff09;int ia[4*7-14]; &#xff08…

关于范围for语句的使用

文章目录使用范围for语句处理多维数组使用范围for语句处理多维数组 举个例子&#xff0c;使用范围for语句输出多维数组&#xff08;ia&#xff09;所有值&#xff1a; for (const auto &row : ia)for (auto col : row)cout << col << endl;本循环中并没有任何…

vector的应用练习

文章目录编写一段程序&#xff0c;使用条件运算符从vector< int >中找出哪些元素的值是奇数&#xff0c;然后将奇数值翻倍。 #include <iostream> #include <ctime> #include <vector> using namespace std; typedef int int_array[4]; int main() {v…

sizeof运算符运算结果小汇

文章目录sizeof运算符的结果部分地依赖于其作用的类型sizeof运算符的结果部分地依赖于其作用的类型 对char或者类型为char的表达式执行sizeof运算&#xff0c;结果得1对引用类型执行sizeof运算得到被引用对象所占空间的大小对指针执行sizeof运算得到指针本身所占空间的大小对解…

jQuery实现复选框的全选和反选:

jQuery实现复选框的全选和反选&#xff1a; 截图如下&#xff1a; 代码如下&#xff1a; index.jsp: <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath…

C语言隐式/显式类型转换 | C++四种强制类型转换、类的隐式转换、explicit

文章目录C语言类型转换隐式类型转换显式类型转换C 强制类型转换static_castreinterpret_castconst_castdynamic_cast类的隐式类型转换概念只允许一步类类型转换explicit 抑制构造函数定义地隐式转换可以通过显式转换使用explicit构造函数C语言类型转换 隐式类型转换 编译器在…

string对象和C风格字符串

混用string对象和C风格字符串 我们都知道允许使用字符串字面值来初始化string对象&#xff1a; string s("Hello World!");C规定&#xff0c;任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代&#xff1a; 允许使用以空字符结束的字符数组来初始化…

函数重载、引用再探、内联函数

文章目录函数重载为什么C支持重载&#xff0c;C语言不支持呢&#xff1f;extern “C”引用再探引用的特性引用的使用场景引用和指针引用和指针的不同点:内联函数什么是内联函数&#xff1f;内联函数的特性内联函数的好处类的内联成员函数的声明内联函数的使用constexpr函数概念…

类的概念、成员函数的定义方式、类的访问控制和封装、类的大小、this指针

文章目录类的概念structclassclass和struct的区别是什么呢&#xff1f;类中成员函数的两种定义方式声明和定义都在类中声明和定义分离类的访问控制和封装类的封装特性类的大小结构体内存对齐规则类的存储方式this指针类的概念 在C中&#xff0c;类可以说是最重要的东西&#x…

jQuery实现两个列表框的值之间的互换:

jQuery实现两个列表框的值之间的互换&#xff1a; 截图如下&#xff1a; 代码如下&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath reque…

类的6个默认成员函数:构造函数、析构函数、拷贝构造函数、重载运算符、三/五法则

文章目录6个默认成员函数构造函数概念默认构造函数的类型默认实参概念默认实参的使用默认实参声明全局变量作为默认实参某些类不能依赖于编译器合成的默认构造函数第一个原因第二个原因第三个原因构造函数初始化构造函数里面的“”是初始化吗&#xff1f;为什么要使用列表初始化…

C++ 类的知识 | 构造函数再探、匿名对象、友元函数、内部类、类的const成员、类的static成员

文章目录构造函数再探以下代码共调用多少次拷贝构造函数委托构造函数概念形式匿名对象友元友元的声明友元类令成员函数作为友元函数重载和友元注意内部类特性类的const成员可变数据成员类的static成员概念关于static静态成员的类内初始化静态成员能用于某些普通成员不能的场景构…