IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Matplotlib基本用法梳理 -> 正文阅读

[Python知识库]Matplotlib基本用法梳理

Matplotlib

0 简介

Matplotlib是一个可视化python包,可以用很简单的代码展示2D绘图,如:直方图、折线图、条形图、散点图等。

其画图的基本组件包括:画板(figure),轴域(axes),子图(subplot),轴(axis),数据(x,y坐标)。

关于轴域和子图的相关性和区别,可以参考文末链接python matplotlib中axes与axis的区别是什么?

1 安装

pip install matplotlib
import matplotlib
matplotlib.__version__ # 3.3.2

2 2D图用法

2.1 基础用法

以最简单的直线图为例,有两种方法。其一是通过pyplot包下的plot()方法直接绘制:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2,2,50)
y = 2 * x + 0.1
plt.plot(x, y, color='lightblue', linewidth=5)
plt.xlim(-2,3)
plt.ylim(-2,5)
plt.title("A demo of plot")
plt.show()

请添加图片描述

其二,是通过创建画布和axes,用对象调用的方式实现:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2,2,50)
y = 2 * x + 0.1
# 画布
fig = plt.figure()
# 增加子图
ax = fig.add_subplot(111)
# 设置轴范围,不是必须的步骤
ax.set(xlim=[0,1], ylim=[-2, 8], title='An Example Axes', ylabel='Y-Axis', xlabel='X-Axis')
# subplot生成的对象调用plot方法绘图
ax.plot(x,y, color='lightblue', linewidth=5)
# 类似于ax.set的方式,此处会覆盖上面的设置
ax.set_xlim(-2, 3) 
ax.set_ylim(-2, 5)

plt.show()

请添加图片描述

比较二者的实现方式,第一种会更简单,更加适合不需要子图的场景;第二种更容易理解,将figure和axes等概念一步步创建,且适合多子图的场景。

2.2 子图的创建

fig = plt.figure() # 画板
ax1 = fig.add_subplot(221) # 2*2划分画板,第1块子图
ax2 = fig.add_subplot(222) # 2*2划分画板,第2块子图
ax3 = fig.add_subplot(224) # 2*2划分画板,第4块子图
fig, axes = plt.subplots(nrows=2, ncols=2) # 直接生成2*2块子图的画板
axes[0,0].set(title='Upper Left') # 同上,用二维数组访问子图
axes[0,1].set(title='Upper Right')
axes[1,0].set(title='Lower Left')
axes[1,1].set(title='Lower Right')

请添加图片描述

2.3 线图plot

# 指定x,y坐标即可画出线图
x = np.linspace(-np.pi,np.pi)
y = np.sin(x)
plt.plot(x,y , color='lightblue', linewidth=3)
plt.xlim(-np.pi)
plt.show()

请添加图片描述

通过关键字绘图,json格式保存数据:

x = np.linspace(0, 10, 200)
data_obj = {'x': x,
            'y1': 2 * x + 1,
            'y2': 3 * x + 1.2,
            'mean': 0.5 * x * np.cos(2*x) + 2.5 * x + 1.1}

fig, ax = plt.subplots()

# 填充两条线之间的颜色
ax.fill_between('x', 'y1', 'mean', color='yellow', data=data_obj)

# Plot the "centerline" with `plot`
ax.plot('x', 'y2', color='black', data=data_obj)

plt.show()

请添加图片描述

2.4 散点图scatter

输入同上,只不过仅仅描绘点,不连边


2.4 柱状图

np.random.seed(1)
x = np.arange(5)
y = np.random.randn(5)

fig, axes = plt.subplots(ncols=2, figsize=plt.figaspect(1./2))

vert_bars = axes[0].bar(x, y, color='lightblue', align='center')
horiz_bars = axes[1].barh(x, y, color='lightblue', align='center')
#在水平或者垂直方向上画线
axes[0].axhline(0, color='gray', linewidth=2)
axes[1].axvline(0, color='gray', linewidth=2)
plt.show()

2.5 箱型图

fig, (ax1, ax2) = plt.subplots(2)
ax1.boxplot(data)
ax2.boxplot(data2, vert=False) #控制方向

2.6 气泡图

np.random.seed(19680801)


N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()

2.7 直方图

用于统计出现次数或频率

2.8 饼图

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)  # only "explode" the 2nd slice (i.e. 'Hogs')

fig1, (ax1, ax2) = plt.subplots(2)
ax1.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True)
ax1.axis('equal')
ax2.pie(sizes, autopct='%1.2f%%', shadow=True, startangle=90, explode=explode,
    pctdistance=1.12)
ax2.axis('equal')
ax2.legend(labels=labels, loc='upper right')

plt.show()

2.9 等高线

fig, (ax1, ax2) = plt.subplots(2)
x = np.arange(-5, 5, 0.1)
y = np.arange(-5, 5, 0.1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
ax1.contourf(x, y, z)
ax2.contour(x, y, z)

3 属性方法

3.1 基本属性

# 属性备注 plt.X
-xlim: -ylim: xy轴的坐标左右界限
-xlabel: -ylabel: xy轴的坐标名称
-title:figure或subplot的名称
-legend(): 图例,默认自动识别最适合的位置,即best。此外,可以通过传参`loc=2`来指定位置,具体含10个位置
-xticks(范围,值list): 修改坐标显示的值
# plot: 
	color:线条颜色(lightblue,red)
	linewidth:线条宽度
	marker:线图标记(+)
	linestyle:线条样式(dashed虚线)
    label:str,用于显示图例或区分多线条

xticks()例子:

x = np.linspace(-np.pi,np.pi)
y = np.sin(x)
plt.plot(x,y , color='lightblue', linewidth=3, label='A')
plt.plot(x,y+1 , linewidth=3, label='B')
plt.legend(loc=4)
plt.xlim(-np.pi)
plt.xticks(np.arange(-3,4,2),[1,2,3,4])
plt.show()

请添加图片描述

3.2 布局

通过fig.subplots_adjust()我们修改了子图水平之间的间隔wspace=0.5,垂直方向上的间距hspace=0.3,左边距left=0.125 等等,这里数值都是百分比的。以[0, 1] 为区间,选择leftrightbottomtop 注意 topright是 0.9 表示上、右边距为百分之10。不确定如果调整的时候,fig.tight_layout()是一个很好的选择。之前说到了内边距,内边距是子图的,也就是 Axes对象,所以这样使用 ax.margins(x=0.1, y=0.1),当值传入一个值时,表示同时修改水平和垂直方向的内边距。

fig, axes = plt.subplots(2, 2, figsize=(9, 9))
fig.subplots_adjust(wspace=0.5, hspace=0.3,
                    left=0.125, right=0.9,
                    top=0.9,    bottom=0.1)

fig.tight_layout() #自动调整布局,使标题之间不重叠
plt.show()

3.3 axes子图

区别于subplot创建的子图,axes将在figure上创建子域,并且可以重叠。

fig = plt.figure()
ax = fig.add_subplot(111)

ax3 = fig.add_axes([0.3,0.2,0.4,0.5]) # fig.add_axes([left, bottom, width, height])
print(ax)
plt.show()

请添加图片描述

* 附录

1 axes和subplot的区别?

可以将figure看作画板,subplot可以看作将画板划分为若干个画布

img

* 参考

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:10:07  更:2021-10-26 12:10:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:29:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码