numpy、scipy、pandas、matplotlib的读书报告
一、numpy的读书报告
1Numpy概述
1.1概念
Numpy提供了两种基本的对象:ndarray和ufunc。Ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。
1.2功能
l 创建n维数组(矩阵)
l 对数组进行函数运算,使用函数计算十分快速,节省了大量的时间,且不需要编写循环,十分方便
l 数值积分、线性代数运算、傅里叶变换
l ndarray快速节省空间的多维数组,提供数组化的算术运算和高级的 广播功能。1.3 对象
l NumPy中的核心对象是ndarray
l ndarray可以看成数组,存放 同类元素
l NumPy里面所有的函数都是围绕ndarray展开的
ndarray 内部由以下内容组成:
l 一个指向数据(内存或内存映射文件中的一块数据)的指针。
l 数据类型或 dtype,描述在数组中的固定大小值的格子。
l 一个表示数组形状(shape)的元组,表示各维度大小的元组。形状为(row×col)
2Numpy的基本用法
2.1Numpy类型
生成函数 |
作用 |
np.array( x) np.array( x, dtype) |
将输入数据转化为一个ndarray 将输入数据转化为一个类型为type的ndarray |
np.asarray( array ) |
将输入数据转化为一个新的(copy)ndarray |
np.ones( N ) np.ones( N, dtype) np.ones_like( ndarray ) |
生成一个N长度的一维全一ndarray 生成一个N长度类型是dtype的一维全一ndarray 生成一个形状与参数相同的全一ndarray |
np.zeros( N) np.zeros( N, dtype) np.zeros_like(ndarray) |
生成一个N长度的一维全零ndarray 生成一个N长度类型位dtype的一维全零ndarray 类似np.ones_like( ndarray ) |
np.empty( N ) np.empty( N, dtype) np.empty(ndarray) |
生成一个N长度的未初始化一维ndarray 生成一个N长度类型是dtype的未初始化一维ndarray 类似np.ones_like( ndarray ) |
np.eye( N ) np.identity( N ) |
创建一个N * N的单位矩阵(对角线为1,其余为0) |
np.arange( num) np.arange( begin, end) np.arange( begin, end, step) |
生成一个从0到num-1步数为1的一维ndarray 生成一个从begin到end-1步数为1的一维ndarray 生成一个从begin到end-step的步数为step的一维ndarray |
np.mershgrid(ndarray, ndarray,...) |
生成一个ndarray * ndarray * ...的多维ndarray |
np.where(cond, ndarray1, ndarray2) |
根据条件cond,选取ndarray1或者ndarray2,返回一个新的ndarray |
np.in1d(ndarray, [x,y,...]) |
检查ndarray中的元素是否等于[x,y,...]中的一个,返回bool数组 |
矩阵函数 |
说明 |
np.diag( ndarray) np.diag( [x,y,...]) |
以一维数组的形式返回方阵的对角线(或非对角线)元素 将一维数组转化为方阵(非对角线元素为0) |
np.dot(ndarray, ndarray) |
矩阵乘法 |
np.trace( ndarray) |
计算对角线元素的和 |
排序函数 |
说明 |
np.sort( ndarray) |
排序,返回副本 |
np.unique(ndarray) |
返回ndarray中的元素,排除重复元素之后,并进行排序 |
np.intersect1d( ndarray1, ndarray2) np.union1d( ndarray1, ndarray2) np.setdiff1d( ndarray1, ndarray2) np.setxor1d( ndarray1, ndarray2) |
返回二者的交集并排序。 返回二者的并集并排序。 返回二者的差。 返回二者的对称差 |
一元计算函数 |
说明 |
np.abs(ndarray) np.fabs(ndarray) |
计算绝对值 计算绝对值(非复数) |
np.mean(ndarray) |
求平均值 |
np.sqrt(ndarray) |
计算x^0.5 |
np.square(ndarray) |
计算x^2 |
np.exp(ndarray) |
计算e^x |
log、log10、log2、log1p |
计算自然对数、底为10的log、底为2的log、底为(1+x)的log |
np.sign(ndarray) |
计算正负号:1(正)、0(0)、-1(负) |
np.ceil(ndarray) np.floor(ndarray) np.rint(ndarray) |
计算大于等于改值的最小整数 计算小于等于该值的最大整数 四舍五入到最近的整数,保留dtype |
np.modf(ndarray) |
将数组的小数和整数部分以两个独立的数组方式返回 |
np.isnan(ndarray) |
返回一个判断是否是NaN的bool型数组 |
np.isfinite(ndarray) np.isinf(ndarray) |
返回一个判断是否是有穷(非inf,非NaN)的bool型数组 返回一个判断是否是无穷的bool型数组 |
cos、cosh、sin、sinh、tan、tanh |
普通型和双曲型三角函数 |
arccos、arccosh、arcsin、arcsinh、arctan、arctanh |
反三角函数和双曲型反三角函数 |
np.logical_not(ndarray) |
计算各元素not x的真值,相当于-ndarray |
多元计算函数 |
说明 |
np.add(ndarray, ndarray) np.subtract(ndarray, ndarray) np.multiply(ndarray, ndarray) np.divide(ndarray, ndarray) np.floor_divide(ndarray, ndarray) np.power(ndarray, ndarray) np.mod(ndarray, ndarray) |
相加 相减 乘法 除法 圆整除法(丢弃余数) 次方 求模 |
np.maximum(ndarray, ndarray) np.fmax(ndarray, ndarray) np.minimun(ndarray, ndarray) np.fmin(ndarray, ndarray) |
求最大值 求最大值(忽略NaN) 求最小值 求最小值(忽略NaN) |
np.copysign(ndarray, ndarray) |
将参数2中的符号赋予参数1 |
np.greater(ndarray, ndarray) np.greater_equal(ndarray, ndarray) np.less(ndarray, ndarray) np.less_equal(ndarray, ndarray) np.equal(ndarray, ndarray) np.not_equal(ndarray, ndarray) |
> >= < <= == != |
logical_and(ndarray, ndarray) logical_or(ndarray, ndarray) logical_xor(ndarray, ndarray) |
& | ^ |
np.dot( ndarray, ndarray) |
计算两个ndarray的矩阵内积 |
np.ix_([x,y,m,n],...) |
生成一个索引器,用于Fancy indexing(花式索引) |
文件读写 |
说明 |
np.save(string, ndarray) |
将ndarray保存到文件名为 [string].npy 的文件中(无压缩) |
np.savez(string, ndarray1, ndarray2, ...) |
将所有的ndarray压缩保存到文件名为[string].npy的文件中 |
np.savetxt(sring, ndarray, fmt, newline='\n') |
将ndarray写入文件,格式为fmt |
np.load(string) |
读取文件名string的文件内容并转化为ndarray对象(或字典对象) |
np.loadtxt(string, delimiter) |
读取文件名string的文件内容,以delimiter为分隔符转化为ndarray |
2.2np常用函数
2.2.1NumPy.ndarray函数和属性:
ndarray.ndim |
获取ndarray的维数 |
ndarray.shape |
获取ndarray各个维度的长度 |
ndarray.dtype |
获取ndarray中元素的数据类型 |
ndarray.T |
简单转置矩阵ndarray |
2.2.2ndarray属性
函数 |
说明 |
ndarray.astype(dtype) |
转换类型,若转换失败则会出现TypeError |
ndarray.copy() |
复制一份ndarray(新的内存空间) |
ndarray.reshape((N,M,...)) |
将ndarray转化为N*M*...的多维ndarray(非copy) |
ndarray.transpose((xIndex,yIndex,...)) |
根据维索引xIndex,yIndex...进行矩阵转置,依赖于shape,不能用于一维矩阵(非copy) |
ndarray.swapaxes(xIndex,yIndex) |
交换维度(非copy) |
|
|
计算函数 |
说明 |
ndarray.mean( axis=0 ) |
求平均值 |
ndarray.sum( axis= 0) |
求和 |
ndarray.cumsum( axis=0) ndarray.cumprod( axis=0) |
累加 累乘 |
ndarray.std() ndarray.var() |
方差 标准差 |
ndarray.max() ndarray.min() |
最大值 最小值 |
ndarray.argmax() ndarray.argmin() |
最大值索引 最小值索引 |
ndarray.any() ndarray.all() |
是否至少有一个True 是否全部为True |
ndarray.dot( ndarray) |
计算矩阵内积 |
排序函数 |
说明 |
ndarray.sort(axis=0) |
排序,返回源数据 |
2.2.3ndarray函数
ndarray[n] |
选取第n+1个元素 |
ndarray[n:m] |
选取第n+1到第m个元素 |
ndarray[:] |
选取全部元素 |
ndarray[n:] |
选取第n+1到最后一个元素 |
ndarray[:n] |
选取第0到第n个元素 |
ndarray[ bool_ndarray ] 注:bool_ndarray表示bool类型的ndarray |
选取为true的元素 |
ndarray[[x,y,m,n]]... |
选取顺序和序列为x、y、m、n的ndarray |
ndarray[n,m] ndarray[n][m] |
选取第n+1行第m+1个元素 |
ndarray[n,m,...] ndarray[n][m].... |
选取n行n列....的元素 |
2.3ndarray索引/切片方式
2.3.1NumPy.random函数和属性:
函数 |
说明 |
seed() seed(int) seed(ndarray) |
确定随机数生成种子 |
permutation(int) permutation(ndarray) |
返回一个一维从0~9的序列的随机排列 返回一个序列的随机排列 |
shuffle(ndarray) |
对一个序列就地随机排列 |
rand(int) randint(begin,end,num=1) |
产生int个均匀分布的样本值 从给定的begin和end随机选取num个整数 |
randn(N, M, ...) |
生成一个N*M*...的正态分布(平均值为0,标准差为1)的ndarray |
normal(size=(N,M,...)) |
生成一个N*M*...的正态(高斯)分布的ndarray |
beta(ndarray1,ndarray2) |
产生beta分布的样本值,参数必须大于0 |
chisquare() |
产生卡方分布的样本值 |
gamma() |
产生gamma分布的样本值 |
uniform() |
产生在[0,1)中均匀分布的样本值 |
2.5random常用函数
2.5.1NumPy.linalg函数和属性:
函数 |
说明 |
det(ndarray) |
计算矩阵列式 |
eig(ndarray) |
计算方阵的本征值和本征向量 |
inv(ndarray) pinv(ndarray) |
计算方阵的逆 计算方阵的Moore-Penrose伪逆 |
qr(ndarray) |
计算qr分解 |
svd(ndarray) |
计算奇异值分解svd |
solve(ndarray) |
解线性方程组Ax = b,其中A为方阵 |
lstsq(ndarray) |
计算Ax=b的最小二乘解 |
3实例
计算两个矩阵的乘积
import numpy as np
# 创建两个矩阵
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[7,8],[9,10],[11,12]])
# 计算矩阵乘积
c = np.dot(a,b)
# 打印结果
print(c)
输出:
[[ 58 64]
[139 154]]
二、scipy的读书报告
Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。
Scipy 由不同科学计算领域的子模块组成:
子模块 描述
cluster 聚类算法
constants 物理数学常数
fftpack 快速傅里叶变换
integrate 积分和常微分方程求解
interpolate 插值
io 输入输出
linalg 线性代数
odr 正交距离回归
optimize 优化和求根
signal 信号处理
sparse 稀疏矩阵
spatial 空间数据结构和算法
special 特殊方程
stats 统计分布和函数
weave C/C++ 积分
1.插值
样条插值法是一种以可变样条来作出一条经过一系列点的光滑曲线的数学方法
from scipy.interpolate import interp1d
np.set_printoptions(precision=2, suppress=True) #设置 Numpy 浮点数显示格式
#从文本中读入数据
data = np.genfromtxt("JANAF_CH4.txt",
delimiter="\t", # TAB 分隔
skiprows=1, # 忽略首行
names=True, # 读入属性
missing_values="INFINITE", # 缺失值
filling_values=np.inf) # 填充缺失值
ch4_cp = interp1d(data['TK'], data['Cp']) #默认情况下,输入值要在插值允许的范围内,否则插值会报错
我们可以通过 kind 参数来调节使用的插值方法,来得到不同的结果:
nearest 最近邻插值
zero 0阶插值
linear 线性插值
quadratic 二次插值
cubic 三次插值
4,5,6,7 更高阶插值
对于径向基函数,其插值的公式为:∑njφ(|x−xj|)
通过数据点 xj来计算出 nj 的值,来计算 x处的插值结果:
from scipy.interpolate.rbf import Rbf
cp_rbf = Rbf(data['TK'], data['Cp'], function = "multiquadric")
plt.plot(data['TK'], data['Cp'], 'k+')
p = plt.plot(data['TK'], cp_rbf(data['TK']), 'r-')
高维RBF
插值:
from mpl_toolkits.mplot3d import Axes3D
x, y = np.mgrid[-np.pi/2:np.pi/2:5j, -np.pi/2:np.pi/2:5j]
z = np.cos(np.sqrt(x**2 + y**2))
zz = Rbf(x, y, z)
xx, yy = np.mgrid[-np.pi/2:np.pi/2:50j, -np.pi/2:np.pi/2:50j]
fig = plt.figure(figsize=(12,6))
ax = fig.gca(projection="3d")
ax.plot_surface(xx,yy,zz(xx,yy),rstride=1, cstride=1, cmap=plt.cm.jet)
2.概率统计方法
Scipy 中的子库 scipy.stats 中包含很多统计上的方法
Numpy 自带简单的统计方法:mean(),min(),max(),std()
(1)连续分布,以正态分布为例:
它包含四类常用的函数:
norm.cdf 返回对应的累计分布函数值
norm.pdf 返回对应的概率密度函数值
norm.rvs 产生指定参数的随机变量
norm.fit 返回给定数据下,各参数的最大似然估计(MLE)值
(2)离散分布,没有概率密度函数,但是有概率质量函数 PMF
from scipy.stats import binom, poisson, randint
二项分布:
num_trials = 60
x = arange(num_trials)
plot(x, binom(num_trials, 0.5).pmf(x), 'o-', label='p=0.5')
plot(x, binom(num_trials, 0.2).pmf(x), 'o-', label='p=0.2')
legend()
自定义离散分布:
from scipy.stats import rv_discrete
xk = [1, 2, 3, 4, 5, 6]
pk = [.3, .35, .25, .05, .025, .025]
#定义离散分布,此时, loaded 可以当作一个离散分布的模块来使用
loaded = rv_discrete(values=(xk, pk))
#产生100个随机变量,将直方图与概率质量函数进行比较
samples = loaded.rvs(size=100)
bins = linspace(.5,6.5,7)
hist(samples, bins=bins, normed=True)
stem(xk, loaded.pmf(xk), markerfmt='ro', linefmt='r-')
3.曲线拟合
(1)多项式
(2)最小二乘拟合
当我们使用一个 N-1 阶的多项式拟合这 M 个点时,有这样的关系存在:XC=Y
4.最小化函数
(1)minimize 函数
(2)Rosenbrock 函数
Rosenbrock 函数是一个用来测试优化函数效果的一个非凸函数:
5.积分
(1)符号积分
符号运算可以用 sympy 模块完成。
(2)数值积分
6.解微分方程
(1)简单一阶:
(2)高阶微分方程:
代码:
def dy_dt(y, t):
"""Governing equations for projectile motion with drag.
y[0] = position
y[1] = velocity
g = gravity (m/s2)
D = drag (1/s) = force/velocity
m = mass (kg)
"""
g = -9.8
D = 0.1
m = 0.15
dy1 = g - (D/m) * y[1]
dy0 = y[1] if y[0] >= 0 else 0.
return [dy0, dy1]
position_0 = 0.
velocity_0 = 100
t = linspace(0, 12, 100)
y = odeint(dy_dt, [position_0, velocity_0], t)
p = plot(t, y[:,0])
yl = ylabel("Height (m)")
xl = xlabel("Time (s)")
7.稀疏矩阵
稀疏矩阵主要使用 位置 + 值 的方法来存储矩阵的非零元素,根据存储和使用方式的不同,有如下几种类型的稀疏矩阵:
类型 描述
bsr_matrix(arg1[, shape, dtype, copy, blocksize]) Block Sparse Row matrix
coo_matrix(arg1[, shape, dtype, copy]) A sparse matrix in COOrdinate format.
csc_matrix(arg1[, shape, dtype, copy]) Compressed Sparse Column matrix
csr_matrix(arg1[, shape, dtype, copy]) Compressed Sparse Row matrix
dia_matrix(arg1[, shape, dtype, copy]) Sparse matrix with DIAgonal storage
dok_matrix(arg1[, shape, dtype, copy]) Dictionary Of Keys based sparse matrix.
lil_matrix(arg1[, shape, dtype, copy]) Row-based linked list sparse matrix
在这些存储格式中:
COO 格式在构建矩阵时比较高效
CSC 和 CSR 格式在乘法计算时比较高效
8.线性代数
scipy.linalg
包含 numpy.linalg
中的所有函数,同时还包含了很多 numpy.linalg
中没有的函数,在使用时,我们一般使用 scipy.linalg
而不是 numpy.linalg
(1)求解方程
A = np.array([[1, 3, 5],
[2, 5, 1],
[2, 3, 8]])
b = np.array([10, 8, 3])
x = linalg.solve(A, b)
(2)计算行列式
A = np.array([[1, 3, 5],
[2, 5, 1],
[2, 3, 8]])
linalg.det(A)
(3)矩阵分解
对于给定的 N×NN×N 矩阵 AA,特征值和特征向量问题相当与寻找标量 λλ 和对应的向量 vv 使得:
Av=λvAv=λv
矩阵的 NN 个特征值(可能相同)可以通过计算特征方程的根得到:
|A−λI|=0|A−λI|=0
然后利用这些特征值求(归一化的)特征向量。
问题求解
linalg.eig(A)
返回矩阵的特征值与特征向量
linalg.eigvals(A)
返回矩阵的特征值
linalg.eig(A, B)
求解 Av=λBvAv=λBv 的问题
(4)对稀疏矩阵
scipy.sparse.linalg.inv
稀疏矩阵求逆
scipy.sparse.linalg.expm
求稀疏矩阵的指数函数
scipy.sparse.linalg.norm
稀疏矩阵求范数
对于特别大的矩阵,原来的方法可能需要太大的内存,考虑使用这两个方法替代:
scipy.sparse.linalg.eigs
返回前 k 大的特征值和特征向量
scipy.sparse.linalg.svds
返回前 k 大的奇异值和奇异向量
三、pandas的读书笔记
Pandas 常用函数
以下列出了 Pandas 常用的一些函数及使用实例:
读取数据
函数 |
说明 |
pd.read_csv(filename) |
读取 CSV 文件; |
pd.read_excel(filename) |
读取 Excel 文件; |
pd.read_sql(query, connection_object) |
从 SQL 数据库读取数据; |
pd.read_json(json_string) |
从 JSON 字符串中读取数据; |
pd.read_html(url) |
从 HTML 页面中读取数据。 |
实例
import pandas as pd
# 从 CSV 文件中读取数据
df = pd.read_csv('data.csv')
# 从 Excel 文件中读取数据
df = pd.read_excel('data.xlsx')
# 从 SQL 数据库中读取数据
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table_name', conn)
# 从 JSON 字符串中读取数据
json_string = '{"name": "John", "age": 30,
"city": "New York"}'
df = pd.read_json(json_string)
# 从 HTML 页面中读取数据
url = 'https://www.runoob.com'
dfs = pd.read_html(url)
df = dfs[0] # 选择第一个数据框
查看数据
函数 |
说明 |
df.head(n) |
显示前 n 行数据; |
df.tail(n) |
显示后 n 行数据; |
df.info() |
显示数据的信息,包括列名、数据类型、缺失值等; |
df.describe() |
显示数据的基本统计信息,包括均值、方差、最大值、最小值等; |
df.shape |
显示数据的行数和列数。 |
实例
# 显示前五行数据
df.head()
# 显示后五行数据
df.tail()
# 显示数据信息
df.info()
# 显示基本统计信息
df.describe()
# 显示数据的行数和列数
df.shape
实例
import pandas as pd
data = [
{"name": "Google", "likes": 25, "url": "https://www.google.com"},
{"name": "Runoob", "likes": 30, "url": "https://www.runoob.com"},
{"name": "Taobao", "likes": 35, "url": "https://www.taobao.com"}
]
df = pd.DataFrame(data)
# 显示前两行数据
print(df.head(2))
# 显示前最后一行数据
print(df.tail(1))
以上实例输出结果为:
name likes url
0 Google 25 https://www.google.com
1 Runoob 30 https://www.runoob.com
name likes url
2 Taobao 35 https://www.taobao.com
数据清洗
函数 |
说明 |
df.dropna() |
删除包含缺失值的行或列; |
df.fillna(value) |
将缺失值替换为指定的值; |
df.replace(old_value, new_value) |
将指定值替换为新值; |
df.duplicated() |
检查是否有重复的数据; |
df.drop_duplicates() |
删除重复的数据。 |
实例
# 删除包含缺失值的行或列
df.dropna()
# 将缺失值替换为指定的值
df.fillna(0)
# 将指定值替换为新值
df.replace('old_value', 'new_value')
# 检查是否有重复的数据
df.duplicated()
# 删除重复的数据
df.drop_duplicates()
数据选择和切片
函数 |
说明 |
df[column_name] |
选择指定的列; |
df.loc[row_index, column_name] |
通过标签选择数据; |
df.iloc[row_index, column_index] |
通过位置选择数据; |
df.ix[row_index, column_name] |
通过标签或位置选择数据; |
df.filter(items=[column_name1, column_name2]) |
选择指定的列; |
df.filter(regex='regex') |
选择列名匹配正则表达式的列; |
df.sample(n) |
随机选择 n 行数据。 |
实例
# 选择指定的列
df['column_name']
# 通过标签选择数据
df.loc[row_index, column_name]
# 通过位置选择数据
df.iloc[row_index, column_index]
# 通过标签或位置选择数据
df.ix[row_index, column_name]
# 选择指定的列
df.filter(items=['column_name1', 'column_name2'])
# 选择列名匹配正则表达式的列
df.filter(regex='regex')
# 随机选择 n 行数据
df.sample(n=5)
数据排序
函数 |
说明 |
df.sort_values(column_name) |
按照指定列的值排序; |
df.sort_values([column_name1, column_name2], ascending=[True, False]) |
按照多个列的值排序; |
df.sort_index() |
按照索引排序。 |
实例
# 按照指定列的值排序
df.sort_values('column_name')
# 按照多个列的值排序
df.sort_values(['column_name1', 'column_name2'], ascending=[True, False])
# 按照索引排序
df.sort_index()
数据分组和聚合
函数 |
说明 |
df.groupby(column_name) |
按照指定列进行分组; |
df.aggregate(function_name) |
对分组后的数据进行聚合操作; |
df.pivot_table(values, index, columns, aggfunc) |
生成透视表。 |
实例
# 按照指定列进行分组
df.groupby('column_name')
# 对分组后的数据进行聚合操作
df.aggregate('function_name')
# 生成透视表
df.pivot_table(values='value', index='index_column', columns='column_name', aggfunc='function_name')
数据合并
函数 |
说明 |
pd.concat([df1, df2]) |
将多个数据框按照行或列进行合并; |
pd.merge(df1, df2, on=column_name) |
按照指定列将两个数据框进行合并。 |
实例
# 将多个数据框按照行或列进行合并
df = pd.concat([df1, df2])
# 按照指定列将两个数据框进行合并
df = pd.merge(df1, df2, on='column_name')
数据选择和过滤
函数 |
说明 |
df.loc[row_indexer, column_indexer] |
按标签选择行和列。 |
df.iloc[row_indexer, column_indexer] |
按位置选择行和列。 |
df[df['column_name'] > value] |
选择列中满足条件的行。 |
df.query('column_name > value') |
使用字符串表达式选择列中满足条件的行。 |
数据统计和描述
函数 |
说明 |
df.describe() |
计算基本统计信息,如均值、标准差、最小值、最大值等。 |
df.mean() |
计算每列的平均值。 |
df.median() |
计算每列的中位数。 |
df.mode() |
计算每列的众数。 |
df.count() |
计算每列非缺失值的数量。 |
四、matplotlib的读书笔记
1plt 绘图类型
matplotlib.pyplot是使 matplotlib 像 MATLAB 一样工作的函数集合。调用简单
1.折线图
plt.plot(X,Y)
1
2.散点图
plt.scatter(X,Y)
1
3.柱状图
plt.bar(X,Y)
1
4.直方图
直方图是对数据进行频率/频数统计,和柱状图类似,但是不一样
plt.hist(array) # array是一维数据
1
默认绘制的是频数直方图,如果想要绘制频率直方图,需要下面的代码
# 频率直方图
plt.hist(data,bins=10,density=False, weights=weights) # density不要设置为True,有问题
1
2
4.饼图
plt.pie(data,lables=,autopct='%1.1f%%')
1
说明:
1.1f指的是保留1位小数,后面两个%表示已百分号显示
5.箱状图
plt.boxplot(X,Y)
1
补充一下箱线图一些说明
2pyplot绘图基本操作
1.添加信息
plt.xlabel() # 设置 x 轴标签
plt.ylabel() # 设置 y 轴标签
plt.title() # 设置标题
2.显示刻度
plt.xticks()
3.显示图例
plt.legend()
4.显示图像
plt.show()
5.样式设置
# 设置线条宽度
plt.rcParams['lines.linewidth']=1
# 设置线条颜色
plt.rcParams['lines.color']='green'
# 设置线条样式
plt.rcParams['lines.linestytle']='-'
3画板-Figure
前面介绍的只是比较基本的,适用于快速出图。但是我们做数据分析,想的是同时出多张图,所以需要使用figure()来生成一个画板。
fig = plt.figure(figsize=None, dpi=None)
画板添加大标题
fig.suptitle("画板标题")
4图纸-Axes
在画板里还需要有“图纸”来绘画。也可以理解为坐标系,注意跟下面的Axis(坐标轴)要正确区分
快速创建图板和一个子图:
fig, ax = plt.subplots(**fig_kw) # 快速创建子图和图板,可以传入figure对象的参数,如figsize()
ax.plot(......) # 子图上绘画
matplot图的组成部分:
# 添加子图:
ax = fig.add_subplot(参数1,参数2,参数3)
参数1 和参数2是用来对画板划分;参数3指的是 ax 指的是第几部分
5坐标轴-Axis
#添加坐标轴标签:
ax.set_xlabel("x标签")
ax.set_ylabel("y标签")
# 改变坐标尺度
ax.set_yscale('log') # 使用log尺度
# 改变坐标点(ticks)值
ax.set_xticks([0,30,60,90], ['zero', 'thirty', 'sixty', 'ninety'])# 第一个参数是坐标,第二个参数是坐标标签.第二个参数可以不用加。
如果想在子图上新添加坐标轴,可以使用ax. twinx()或者ax. twiny()或者ax.secondary_xaxis。其实就是在原子图的基础上又添加了一个子图,不过子图默认只显示坐标轴。这个新添加的子图也可以添加图形,设置图例、标题、刻度等等。
6样式-Artist
matplotlib绘图绘制图往往需要根据需求设置图形的样式。
颜色:
# 设置折线的颜色
ax.plot(x, y, color='orange', linewidth=2)
# 设置散点图圆点的轮廓颜色和填充颜色
ax.scatter(x, y s=50, facecolor='C0', edgecolor='k');# s表示圆点大小;facecolor表示填充大小;edgecolor表示边缘大小
线宽:
线宽的单位是pt
ax.plot(x, y, linewidth=6)
点形状
ax.plot(x, y, marker="^")
线形状
ax.plot(x, y, linestyle="--")
matplotlib提供一个格式化字符串,可以对点形状、线形状、颜色:marker
fig,ax=plt.subplots(figsize=(10,7))
ax.plot(x, y,"^--r")
标签:函数,df,matplotlib,column,scipy,np,numpy,ndarray,name From: https://www.cnblogs.com/lhlh-ccc/p/17934144.html