当前位置: 首页 > news >正文

Matplotlib.day16

Matplotlib 库:是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像,它使用简单、代码清晰易懂

  • Figure:指整个图形,您可以把它理解成一张画布,它包括了所有的元素,比如标题、轴线等

  • Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区

  • Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小(图中轴长为 7)、轴标签(指 x 轴,y轴)和刻度标签

  • Artist:您在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等

  • Matplotlib 功能扩展包:许多第三方工具包都对 Matplotlib 进行了功能扩展,其中有些安装包需要单独安装,也有一些允许与 Matplotlib 一起安装。常见的工具包如下:

    • Basemap:这是一个地图绘制工具包,其中包含多个地图投影,海岸线和国界线

    • Cartopy:这是一个映射库,包含面向对象的映射投影定义,以及任意点、线、面的图像转换能力

    • Excel tools: 这是 Matplotlib 为了实现与 Microsoft Excel 交换数据而提供的工具

    • Mplot3d:它用于 3D 绘图

    • Natgrid:这是 Natgrid 库的接口,用于对间隔数据进行不规则的网格化处理

2.安装

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple/

3.应用场景

数据可视化主要有以下应用场景:

  • 企业领域:利用直观多样的图表展示数据,从而为企业决策提供支持

  • 股票走势预测:通过对股票涨跌数据的分析,给股民提供更合理化的建议

  • 商超产品销售:对客户群体和所购买产品进行数据分析,促使商超制定更好的销售策略

  • 预测销量:对产品销量的影响因素进行分析,可以预测出产品的销量走势

4.常用API

4.1 绘图类型

函数名称描述
Bar绘制条形图
Barh绘制水平条形图
Boxplot绘制箱型图
Hist绘制直方图
his2d绘制2D直方图
Pie绘制饼状图
Plot在坐标轴上画线或者标记
Polar绘制极坐标图
Scatter绘制x与y的散点图
Stackplot绘制堆叠图
Stem用来绘制二维离散数据绘制(又称为火柴图)
Step绘制阶梯图
Quiver绘制一个二维按箭头

4.2 Image 函数

函数名称描述
Imread从文件中读取图像的数据并形成数组
Imsave将数组另存为图像文件
Imshow在数轴区域内显示图像

4.3 Axis 函数

函数名称描述
Axes在画布(Figure)中添加轴
Text向轴添加文本
Title设置当前轴的标题
Xlabel设置x轴标签
Xlim获取或者设置x轴区间大小
Xscale设置x轴缩放比例
Xticks获取或设置x轴刻标和相应标签
Ylabel设置y轴的标签
Ylim获取或设置y轴的区间大小
Yscale设置y轴的缩放比例
Yticks获取或设置y轴的刻标和相应标签

4.4 Figure 函数

函数名称描述
Figtext在画布上添加文本
Figure创建一个新画布
Show显示数字
Savefig保存当前画布
Close关闭画布窗口

5.pylab 模块

PyLab 是一个面向 Matplotlib 的绘图库接口,其语法和 MATLAB 十分相近。

pylab 是 matplotlib 中的一个模块,它将 matplotlib.pyplot 和 numpy 的功能组合在一起,使得你可以直接使用 numpy 的函数和 matplotlib.pyplot 的绘图功能,而不需要显式地导入 numpy 和 matplotlib.pyplot。

优点

  • 方便快捷:pylab 的设计初衷是为了方便快速绘图和数值计算,使得你可以直接使用 numpy 的函数和 matplotlib.pyplot 的绘图功能,而不需要显式地导入 numpy 和 matplotlib.pyplot。

  • 简化代码:使用 pylab 可以减少导入语句的数量,使代码更简洁。

缺点

  • 命名空间污染:pylab 将 numpy 和 matplotlib.pyplot 的功能组合在一起,可能会导致命名空间污染,使得代码的可读性和可维护性降低。

  • 不适合大型项目:对于大型项目或需要精细控制的项目,pylab 可能不够灵活。

pyplot 是 matplotlib 中的一个模块,提供了类似于 MATLAB 的绘图接口。它是一个更底层的接口,提供了更多的控制和灵活性。

使用 pyplot 需要显式地导入 numpy 和 matplotlib.pyplot,代码量相对较多。例如:

import matplotlib.pyplot as plt
import numpy as np

6.常用函数

6.1 plot 函数

pylab.plot 是一个用于绘制二维图形的函数。它可以根据提供的 x 和 y 数据点绘制线条和/或标记。

# 导入 pylab 库
import pylab

# 创建数据,使用 linspace 函数
# pylab.linspace 函数生成一个等差数列。这个函数返回一个数组,数组中的数值在指定的区间内均匀分布。
x = pylab.linspace(-6, 6, 40)
# 基于 x 构建 y 的数据
y = x**2
# 绘制图形
pylab.plot(x,y,'r:')
# 展示图形
pylab.show()

 

6.2 figure 函数

figure() 函数来实例化 figure 对象,即绘制图形的对象,可以通过这个对象,来设置图形的样式等

参数:

  • figsize:指定画布的大小,(宽度,高度),单位为英寸

  • dpi:指定绘图对象的分辨率,即每英寸多少个像素,默认值为80

  • facecolor:背景颜色

  • dgecolor:边框颜色

  • frameon:是否显示边框

6.2.1 figure.add_axes()

Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。在一个给定的画布(figure)中可以包含多个 axes 对象,但是同一个 axes 对象只能在一个画布中使用。

参数

是一个包含四个元素的列表或元组,格式为 [left, bottom, width, height],其中:

left 和 bottom 是轴域左下角的坐标,范围从 0 到 1。

width 和 height 是轴域的宽度和高度,范围从 0 到 1。

案例:

# 创建一个新的图形
fig = pl.figure()

# 添加第一个轴域
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
x = pl.linspace(0, 10, 100)
y = pl.sin(x)
ax.plot(x, y)

# 显示图形
pl.show()

6.2.2 axes.legend()

legend 函数用于添加图例,以便识别图中的不同数据系列。图例会自动显示每条线或数据集的标签。

参数:

  • labels 是一个字符串序列,用来指定标签的名称

  • loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示

  • handles 参数,它也是一个序列,它包含了所有线型的实例

案例:

x = pl.linspace(0, 10, 100)
y1 = pl.sin(x)
y2 = pl.cos(x)

# 创建图形和轴域
fig, ax = pl.subplots()

# 绘制数据
line1 = ax.plot(x, y1)
line2 = ax.plot(x, y2)

# 添加图例,手动指定标签
ax.legend(handles=[line1, line2], labels=['Sine Function', 'Cosine Function'],loc='center')
# 显示图形
pl.show()

也可以将label定义在plot方法中,调用legend方法时不用再定义labels,会自动添加label

x = pl.linspace(0, 10, 100)
y1 = pl.sin(x)
y2 = pl.cos(x)

# 创建图形和轴域
fig, ax = pl.subplots()

# 绘制数据
line1, = ax.plot(x, y1, label='Sine Function')
line2, = ax.plot(x, y2, label='Cosine Function')

# 添加图例,手动指定标签
ax.legend(handles=[line1, line2], loc='center')

# 显示图形
pl.show()

6.3 标题中文乱码

如果标题设置的是中文,会出现乱码

局部处理:

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

全局处理:

首先,找到 matplotlibrc 文件的位置,可以使用以下代码:

import matplotlib
print(matplotlib.matplotlib_fname())

然后,修改 matplotlibrc 文件,找到 font.family 和 font.sans-serif 项,设置为支持中文的字体,如 SimHei。

同时,设置 axes.unicode_minus 为 False 以正常显示负号。

修改完成后,重启pyCharm。如果不能解决,尝试运行以下代码来实现:

from matplotlib.font_manager import _rebuild
_rebuild()

\

6.4 subplot 函数

subplot 是一个较早的函数,用于创建并返回一个子图对象。它的使用比较简单,通常用于创建网格状的子图布局。subplot 的参数通常是一个三位数的整数,其中每个数字代表子图的行数、列数和子图的索引。

add_subplot 是一个更灵活的函数,它是 Figure类的一个方法,用于向图形容器中添加子图。推荐使用 add_subplot,因为它提供了更好的灵活性和控制。

语法:

import matplotlib.pyplot as plt
import numpy as np

# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)

# 创建图形,figsize=(宽度, 高度),单位是英寸,图形宽度为 12 英寸,高度为 4 英寸
fig = plt.figure(figsize=(12, 4))

# 第一个子图
ax1 = fig.add_subplot(1, 3, 1)
ax1.plot(x, y1, label='sin(x)')
ax1.set_title('Sine Wave')
ax1.set_xlabel('X-axis')
ax1.set_ylabel('Y-axis')
ax1.legend()

# 第二个子图
ax2 = fig.add_subplot(1, 3, 2)
ax2.plot(x, y2, label='cos(x)')
ax2.set_title('Cosine Wave')
ax2.set_xlabel('X-axis')
ax2.set_ylabel('Y-axis')
ax2.legend()

# 第三个子图
ax3 = fig.add_subplot(1, 3, 3)
ax3.plot(x, y3, label='tan(x)')
ax3.set_title('Tangent Wave')
ax3.set_xlabel('X-axis')
ax3.set_ylabel('Y-axis')
ax3.legend()

# 显示图形
plt.tight_layout()
plt.show()

 Pandas

一、基础

1、概述

  • Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来

  • Pandas 名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)

  • Pandas 已经成为 Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具

  • Pandas 是 Python 语言的一个扩展程序库,用于数据分析

  • Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具

  • Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)

  • Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据

  • Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征

  • Pandas 广泛应用在学术、金融、统计学等各个数据分析领域

  • Pandas 的出现使得 Python 做数据分析的能力得到了大幅度提升,它主要实现了数据分析的五个重要环节:加载数据、整理数据、操作数据、构建数据模型、分析数据

2、安装

pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple/

3、内置数据结构

Pandas 在 ndarray 数组(NumPy 中的数组)的基础上构建出了两种不同的数据结构,分别是 Series(一维数据结构)、DataFrame(二维数据结构):

  • Series 是带标签的一维数组,这里的标签可以理解为索引,但这个索引并不局限于整数,它也可以是字符类型,比如 a、b、c 等

  • DataFrame 是一种表格型数据结构,它既有行标签,又有列标签

数据结构维度说明
Series1该结构能够存储各种数据类型,比如字符数、整数、浮点数、Python 对象等,Series 用 name 和 index 属性来描述数据值。Series 是一维数据结构,因此其维数不可以改变
DataFrame2DataFrame 是一种二维表格型数据的结构,既有行索引,也有列索引。行索引是 index,列索引是 columns。 在创建该结构时,可以指定相应的索引值

4、Series

Pandas Series 类似表格中等一个列(column),类似于一维数组,可以保存任何数据类型 Series 由索引(index)和列组成,函数:

函数名参数
pandas.Series(data,index,dtype)data:一组数据(ndarray 类型) index:数据索引标签,如果不指定,默认从 0 开始 dtype:数据类型,默认会自己判断 copy:表示对 data 进行拷贝,默认为 False

4.1 创建 Series 对象的方式

4.1.1 创建 Series 空对象
import pandas as pd
series = pd.Series()
print(series)
4.1.2 ndarray 创建 Series 对象
import pandas as pd
import numpy as np

array_one = np.array(['小明', '小红', '小紫'])
series_one = pd.Series(data=array_one)
print('ndarray 创建 Series 对象:')
print(series_one)

# 输出:
0    小明
1    小红
2    小紫
dtype: object

 

4.2 访问 Series 数据

import pandas as pd

def five():
    data = {"name": "陈蕾", "gender": "男"}
    result = pd.Series(data=data)
    print(result["name"])
    print(result[1])

4.3 Series遍历

使用 items()

 

import pandas as pd

# 创建一个示例 Series
series = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
for index, value in series.items():
    print(f"Index: {index}, Value: {value}")
    
#输出:
Index: a, Value: 1
Index: b, Value: 2
Index: c, Value: 3

4.4 Series 常用方法

4.4.1 isnull() 和 notnull()

isnull() 和 notnull() 用于检测 Series、DataFrame 中的缺失值。所谓缺失值,顾名思义就是值不存在、丢失、缺少

  • isnull():如果为值不存在或者缺失,则返回 True

  • notnull():如果值不存在或者缺失,则返回 False

import pandas as pd

'''
    isnull() 和 nonull() 用于检测 Series 中的缺失值
        isnull():如果为值不存在或者缺失,则返回 True
        notnull():如果值不存在或者缺失,则返回 False
'''
def eight():
    result = pd.Series(['a','b','c','d','e','f',None])
    print("isnull()如果为值不存在或者缺失,则返回 True:")
    print(result.isnull())
    print("notnull()如果值不存在或者缺失,则返回 False:")
    print(result.notnull())
    #过滤掉缺失值
    print(result[result.notnull()])

 

5、DataFrame

  • DataFrame 一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以是字符串、整型或者浮点型等。其结构图示意图,如下所示:

  • DataFrame 的每一行或列数据都可以看成一个 Series 结构,只不过,DataFrame 为这些行中每个数据值增加了一个列或行标签

  • 同 Series 一样,DataFrame 自带行标签索引,默认为“隐式索引”即从 0 开始依次递增,行标签与 DataFrame 中的数据项一一对应当然你也可以用“显式索引”的方式来设置行标签

  • DataFrame 构造方法如下:

函数名参数
pd.DataFrame( data, index, columns, dtype, copy)data:一组数据(ndarray、series, map, lists, dict 等类型) index:索引值,或者可以称为行标签 columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) dtype:数据类型 copy:默认为 False,表示复制数据 data

Dataframe和Series的关系:

在 Pandas 中,DataFrame 的每一行或每一列都是一个 Series

DataFrame 是一个二维表格,可以看作是由多个 Series 组成的。

如何区分行和列的 Series

列的 Series

  • 标签是行索引。

  • 值是该列的所有行数据。

行的Series:

  • 标签是列名。

  • 值是该行的所有列数据。

示例:

# 创建一个 DataFrame
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
}
df = pd.DataFrame(data)

# 列的 Series
print(df['A'])      # 标签是行索引,值是列 A 的所有行数据
# 行的 Series
print(df.loc[0])    # 标签是列名,值是第 0 行的所有列数据

# 输出:
0    1
1    2
2    3
Name: A, dtype: int64
A    1
B    4
C    7
Name: 0, dtype: int64

 

相关文章:

  • Nextjs15 - 什么是CSR、SSR、SSG和ISR
  • centos 7 搭建ftp 基于虚拟用户用shell脚本搭建
  • k8s存储介绍(六)StorangeClass
  • Redis :command not allowed when used memory
  • a, b = map(int, input().split()) 从用户输入中读取两个整数
  • 耘想Docker LinNAS,颠覆传统存储体验!
  • muduo库的思路梳理
  • 前端使用WPS WebOffice 做在线文档预览与编辑
  • Redux,React-redux。基础
  • 【脏读、不可重复读、幻读区别】
  • 云端陷阱:当免费午餐变成付费订阅,智能家居用户如何破局?
  • 【48】指针:函数的“数组入口”与“安全锁”——数组参数传递
  • 【Linux】嵌入式Web服务库:mongoose
  • pytorch与其他ai工具
  • 什么是异步编程,如何在 JavaScript 中实现?
  • 亚马逊多账号风控防护体系构建指南
  • 设计模式类型
  • Android 简化图片加载与显示——使用Coil和Kotlin封装高效工具类
  • 【更新至2023年】各省数字经济相关指标数据集(20个指标)
  • 最长公共子序列问题
  • 落实中美经贸高层会谈重要共识,中方调整对美加征关税措施
  • 吉林:消纳绿电,“氢”装上阵
  • 泽连斯基:乌克兰已做好与俄罗斯举行会谈的准备
  • 前四月全国铁路完成固定资产投资1947亿元,同比增长5.3%
  • 鄂州:锁死中小学教师编制总量,核减小学编制五百名增至初中
  • 乌外长:乌方准备无条件停火至少30天