matplotlib绘图知识点(汇总)

相关网站:

Python绘图库
缩略图库
请添加图片描述
在这里插入图片描述

设置坐标轴及标题

在使用 matplotlib 模块画坐标图时,往往需要对坐标轴设置很多参数,这些参数包括横纵坐标轴范围、坐标轴刻度大小、坐标轴名称等等,在 matplotlib 中包含了很多函数,用来对这些参数进行设置。

plt.xlim、plt.ylim用于设置横纵坐标轴范围;

plt.xlabel、plt.ylabel用于设置坐标轴名称;

plt.xticks、plt.yticks用于设置坐标轴刻度;

plt.title用于设置图像标题。
在这里插入图片描述

注意:Python绘图中要将角度变为弧度,可以借助radians()

import matplotlib.pyplot as plt #导入matplotlib库
from math import sin, radians #导入数学计算库
x = range(0, 361)  #创建 0-360 的整数列表
y = [sin(radians(e)) for e in x] #获得 x 对应的正弦值,以列表存储
plt.plot(x, y) #plot函数绘制曲线
plt.savefig('sin.png') #将图像存储至sin.png中

相关知识点:

(一)读取 .csv 文件的多种方法

1.使用 Python I/O 直接读取文件,示例代码如下:

with open('fileName.csv', 'r') as f:
    list1 = f.readlines()

2.使用 Python 自带的 csv 模块读取文件内容,示例代码如下

import csv
csv_reader = csv.reader(open("fileName.csv"))
for row in csv_reader:
     print(row)

3.使用 Python 中的 pandas 模块读取文件内容,示例代码如下:

import pandas as pd
data = pd.read_csv("fileName.csv")
print(data)

绘图模块 matplotlib

所谓“一图胜千言”,很多时候都需要通过可视化的方式查看、分析数据。Python 中有很多可视化工具,其中最著名的当属 matplotlib 绘图模块。matplotlib 的 pyplot 子模块,提供了和 Matlab 类似的绘图 API,方便用户快速绘制二维图表,导入方式如下:

#第一种:导入调用函数需要加 plt 前缀
import matplotlib.pyplot as plt  
#第二种:直接导入 pyplot 下的所有函数
from matplotlib.pyplot import *   

pyplot 下常用的绘制函数如下所示:

采用plot函数绘制折线图;

采用subplot函数绘制多幅图表;

采用imshow函数展示图片;

采用hist函数绘制直方图;

采用pie绘制饼图;

采用legend绘制图例;

其他的函数可参见官方文档,具体函数的调用方式、参数配置也可参见该文档。

plot函数

plot函数可用于绘制线条,调用方式如下:

#单条线:
plot([x], y, [fmt], data=None, **kwargs)
#多条线一起画
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
参数x和y表示具体坐标点,可以是序列数据或是标量。可选参数[fmt]是一个字符串用于定义图的基本属性,如:颜色( color ),点型( marker ),线型( linestyle ),具体形式为:fmt = '[color][marker][line]',fmt接收的是每个属性的单个字母缩写,例如:

plot(x, y) # 默认配置
plot(x, y, '.') # 绘制点状标记
plot(x, y, 'bo-')  # 绘制蓝色圆点实线
plot(x, y, 'g--')  # 绘制绿色虚线

numpy数组计算

Python 中的数组运算主要依赖 numpy 模块,它包括ndarray多维数组对象以及一些数组处理函数。

创建数组最简单的方法就是使用array函数,它接收一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的numpy数组,示例如下:

import numpy as np
ndarray1 = np.array([1, 2, 3, 4])

除了np.array外,还有一些函数也可以新建数组,常用函数如下表所示,具体的参数配置可参见官方文档。

函数	功能
arange()	类似于 Python 内置的 range 函数,但返回值是一个 ndarray 而不是列表
linspace()	返回在指定区间均匀间隔的数组,常用于创建等差数列
zeros()	根据指定形状创建一个全 0 数组
zeros_like()	根据传入数组的形状创建一个全 0 数组
ones()	根据指定形状创建一个全 1 数组
ones_like()	根据传入数组的形状创建一个全 1 数组

示例如下:

ndarray2 = np.zeros((3, 3)) #产生3*3的数值为 0 的二维数组
ndarray3 = np.ones_like(ndarray2)  # 按照 ndarray2 的形状创建数值为 1 的 3*3 数组
ndarray4 = np.arange(10)    #产生 0-9 共 10 个元素
ndarray5 = np.arange(10, 20, 2)   #产生数组 array([10, 12, 14, 16, 18]), 间隔为2
ndarray6 = np.linspace(2.0, 3.0, num=5) # 产生数组 array([ 2.  ,  2.25,  2.5 ,  2.75,  3.  ])
常用的作用于数值x的函数f(x)一般对数组也有效,numpy 包含许多数组处理函数,且运算速度非常快。

数学操作:包括add(), subst\fract(),multiply(),divide(), exp()等等;
三角函数:包括sin(),cos(),tan()等等;
比较函数:包括greater(),greater_equal(),less(),less_equal()等等;

向量化

向量化指的是将需要循环才能操作数组的 Python 函数转化为直接操作整个数组的函数。向量化能够使得程序更短、可读性更好,且程序的运行速度更快。

在上一关卡中的抛物线函数绘制,通过向量化可变换如下:

import numpy as np
import matplotlib.pyplot as plt
def f(x):
    result = 3 * x ** 2 + 2 * x + 1
    return result
x = np.linspace(0, 51, 51)
y = f(x)
plt.plot(x, y, 'r--')
plt.savefig('fig.png')

(二)绘制基础柱状图

matplotlib 模块使用bar函数绘制柱状图,其调用方式如下:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

参数x表示 x 轴标量序列,可以是列表、元组、或是一维数组;参数height表示柱形高度,也为一组标量序列;参数width表示柱形宽度。

代码示例如下:

import numpy as np
import matplotlib.pyplot as plt
# A 班计算机程序设计课 5 个小组的平均成绩柱状图
means_score = (90, 85, 77, 82, 79) # y 轴序列数据
index = np.arange(5) # x 轴序列数据
bar_width = 0.35 #条形宽度
plt.bar(index, means_score, bar_width, alpha=0.7, color='b') #绘制柱状图,alpha 表示颜色的透明程度
x_labels = ['Group 1', 'Group 2', 'Group 3', 'Group 4', 'Group 5'] 
plt.xticks(index, x_labels) #横轴标签
plt.show() #展示图像

(三)绘制堆积柱状图

bar函数调用方式如下所示:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

要想绘制堆积柱状图,可通过设置第一个参数x的值来使得柱形错位显示,x的每一个元素表示柱形的中间位置,示例代码如下所示:

import numpy as np
import matplotlib.pyplot as plt
#A班计算机程序设计课5个小组的平均成绩柱状图
A_means_score = np.array([90, 85, 77, 82, 79])
 B班计算机程序设计课5个小组的平均成绩柱状图
B_means_score = np.array([67, 82, 87, 92, 95])
index = np.arange(5)
bar_width = 0.35
plt.bar(index, A_means_score, bar_width, # A班x轴数据起始位置为index序列
                alpha=0.4, color='b')
plt.bar(index+bar_width, B_means_score, bar_width, #B班x轴起始位置与A班数据错开
                alpha=0.4, color='r')
x_labels = ['Group 1', 'Group 2', 'Group 3', 'Group 4', 'Group 5']
plt.xticks(index+bar_width/2, x_labels) # index+bar_width/2 使得标签居中显示
plt.show()

(四)绘制饼图

matplotlib 模块使用pie函数绘制饼图,其调用方式如下:

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, data=None)[source]

饼图是逆时针绘制的,参数x表示绘制的序列数据,explode用于突出某个楔形(切片),具体值为偏移圆中心的占比,labels是一个字符串序列,用于给每个楔形打标签,colors用于指定楔形的颜色,autopct参数表示用数值标记楔形,可指定显示方式且标记在内部。其它参数可参见官方文档。

代码示例如下:

import matplotlib.pyplot as plt
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs'] # 标签列表
sizes = [15, 30, 45, 10] # 绘制数据
explode = (0, 0.1, 0, 0)  # 只突出第二个切块,偏移比例为0.1 (i.e. 'Hogs')
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
        shadow=True, startangle=90) # shadow表示添加阴影,startangle表示旋转角度
plt.axis('equal')  # 用于显示为一个长宽相等的饼图
plt.show() #展示图像

设置画布大小
matplotlib 模块中采用figure函数设置自定义大小的画布,调用方式如下所示:

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)[source]

在画图之前首先设置figure对象,使得后面的图形输出在这块规定了大小的画布上。参数num用于返回指定 id 的figure对象,如果此参数没有提供,则一个新的figure对象将被创建。参数figsize用于设置画布的宽高,单位为英尺。参数dpi用于设置分辨率。参数facecolor用于设置背景色,edgecolor用于设置边框颜色。

示例代码如下:

import matplotlib.pyplot as plt #导入 matplotlib 库
from math import sin, radians #导入数学计算库
x = range(0, 361)  #创建 0-360 的整数列表
y = [sin(radians(e)) for e in x] #获得 x 对应的正弦值,以列表存储
plt.figure(figsize=[8,5]) #在绘图之前设置画布大小,宽为 8 英尺,高为 5 英尺
plt.plot(x, y) #绘制曲线
plt.show()

(五)绘制多个子图

在 matplotlib 中, 一个figure对象可以包含多个子图, 可以使用subplot()快速绘制, 其调用形式如下:

第一种:整个绘图区域被分成 nrows 行和 ncols 列,index 表示第几个图

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

第二种:pos 是三位数的整数,其中第一位是行数,第二位是列数,第三位是子图的索引

subplot(pos, **kwargs)

第三种:添加子图 ax

subplot(ax)

subplot()的第二种调用方式的代码示例如下:

import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2*np.pi*t)
s2 = np.sin(4*np.pi*t)
plt.subplot(211) # 绘图区域被分为 2 行 1 列,接下来绘制第一幅图
plt.plot(t, s1)
ax2 = plt.subplot(212) # 绘制第二幅图
plt.plot(t, 2*s1)
plt.show()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值