Matplotlib是Python最强大的可视化库,可以绘制各种二维、三维图表,对图表元素的可定制化程度很高,什么坐标轴、刻度尺、标签、图标、颜色、背景、标记类型等等都可以自由设置,可以说基本没有你用matplotlib绘制不了的图表,如果有,那是你对matplotlib还不够熟悉。
matplotlib的12个基础用法:
1、绘制基本图表
Matplotlib可以绘制折线图、散点图、柱状图、饼图等各种图表,使用plot方法来实现,也可以用scatter、bar、pie等方法绘制各种类型图表。
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
years = np.arange(1950, 2021, 10)
population = np.array([2.52, 3.02, 3.70, 4.44, 5.33, 6.13, 6.96, 7.78]) * 10**9
# 绘制折线图
plt.plot(years, population / 10**9)
plt.show()
2、设置中文显示
如果你想在Matplotlib图表上显示中文,比如标题、图例,则需要设置字体,否则会显示乱码。
要注意windows和mac字体会有不同,,windows可以设置SimHei黑体,mac可以设置Arial Unicode MS,其他的按照字体库来自定义。
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体(以Arial为例)
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']#
plt.rcParams['axes.unicode_minus'] = False 3、添加图表标题、轴标题
Matplotlib可以轻松添加图表标题、X轴标题、Y轴标题,分别通过plt.title(), plt.xlabel(), 和 plt.ylabel() 函数来实现。
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体(以Arial为例)
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']#
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
years = np.arange(1950, 2021, 10)
population = np.array([2.52, 3.02, 3.70, 4.44, 5.33, 6.13, 6.96, 7.78]) * 10**9
# 绘制折线图
plt.plot(years, population / 10**9)
# 设置图表标题、X轴标题、Y轴标题
plt.title('世界人口总量与增长', fontsize=16)
plt.xlabel('年份')
plt.ylabel('人口总量 (十亿)', color='#1f77b4')
plt.show()
4、添加图例
当图表中有多个数据系列时,需要添加图例来区分,可以通过plt.legend()函数实现。
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体(以Arial为例)
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']#
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
years = np.arange(1950, 2021, 10)
population = np.array([2.52, 3.02, 3.70, 4.44, 5.33, 6.13, 6.96, 7.78]) * 10**9
growth_rate = np.diff(population) / population[:-1] * 100
growth_years = years[:-1]
# 绘制折线图
plt.plot(years, population / 10**9, label='人口总量')
plt.plot(growth_years, growth_rate, label='年增长率')
# 设置图例
plt.legend(loc='upper left')
plt.show()
5、双坐标轴
如果一个图中两个数据系列值差异很大时,可以使用双坐标轴,分别用于不同数据系列的度量,使用plt.twinx()函数实现。
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
years = np.arange(1950, 2021, 10)
population = np.array([2.52, 3.02, 3.70, 4.44, 5.33, 6.13, 6.96, 7.78]) * 10**9
growth_rate = np.diff(population) / population[:-1] * 100
growth_years = years[:-1]
# 绘制折线图1
plt.plot(years, population / 10**9, label='人口总量')
# 创建双轴
plt.twinx()
# 绘制折线图2
plt.plot(growth_years, growth_rate, label='年增长率')
plt.show()
6、添加文本注释和公式
在图表中可以添加文本注释,用于解释图表某节点的含义,使用plt.text()函数实现,它也可以用来添加Latex数据公式。
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体(以Arial为例)
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
# 准备数据
years = np.arange(1950, 2021, 10)
population = np.array([2.52, 3.02, 3.70, 4.44, 5.33, 6.13, 6.96, 7.78]) * 10**9
# 绘制折线图
plt.plot(years, population / 10**9)
# 添加文本注释
plt.text(2015, 7.0, '2020年后人口增长放缓', fontsize=12, style='italic', color='red',
bbox=dict(boxstyle='round,pad=0.3', fc='yellow', ec='red', lw=1, alpha=0.5))
# 添加数学公式
plt.text(1970, 4.0, r'增长率公式: $P_{t+1} = P_t(1+r)$', fontsize=14, color='black',
bbox=dict(boxstyle='round,pad=0.5', fc='white', ec='gray', lw=1, alpha=0.8))
plt.show()
7、设置坐标轴和刻度
坐标轴和刻度也可以自定义调整,你能用plt.xlim(), plt.ylim(), plt.xticks(), 和 plt.yticks() 这几个方法来控制坐标轴的显示范围和刻度。
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
years = np.arange(1950, 2021, 10)
population = np.array([2.52, 3.02, 3.70, 4.44, 5.33, 6.13, 6.96, 7.78]) * 10**9
# 绘制折线图
plt.plot(years, population / 10**9, label='人口总量')
# 设置x和y坐标轴范围
plt.xlim(1960, 2000)
plt.ylim(0, 9)
plt.show()
8、调整线条样式、颜色和标记
在plot函数中,通过调整color、marker、linestyle、linewidth等参数,可以自定义颜色、标记、线条样式、线条粗细等格式。
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
years = np.arange(1950, 2021, 10)
population = np.array([2.52, 3.02, 3.70, 4.44, 5.33, 6.13, 6.96, 7.78]) * 10**9
# 绘制折线图,并调整线条样式
plt.plot(years, population / 10**9, label='人口总量', color='#1f77b4', marker='o', linestyle='--', linewidth=2.5)
plt.show()
9、设置背景样式
背景样式也可以一键调整,比如设置网格线等,通过plt.grid()函数添加样式。
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
years = np.arange(1950, 2021, 10)
population = np.array([2.52, 3.02, 3.70, 4.44, 5.33, 6.13, 6.96, 7.78]) * 10**9
# 绘制折线图,并调整线条样式
plt.plot(years, population / 10**9, label='人口总量', color='#1f77b4', marker='o', linestyle='--', linewidth=2.5)
#添加背景网格线
plt.grid(True, linestyle=':', alpha=0.6)
plt.show()
10、设置不同风格
matplotlib内置了很多种图表风格,可以自主切换,通过plt.style.use()函数实现。
import matplotlib.pyplot as plt
import numpy as np
# 使用 'ggplot' 风格
plt.style.use('ggplot')
# 准备数据
years = np.arange(1950, 2021, 10)
population = np.array([2.52, 3.02, 3.70, 4.44, 5.33, 6.13, 6.96, 7.78]) * 10**9
# 绘制折线图,并调整线条样式
plt.plot(years, population / 10**9, label='人口总量', color='#1f77b4', marker='o', linestyle='--', linewidth=2.5)
plt.show()
11、创建多子图
matplotlib支持创建多个子图,可以用plt.subplots() 方式实现,它是一种面向对象的形式。
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
years = np.arange(1950, 2021, 10)
population = np.array([2.52, 3.02, 3.70, 4.44, 5.33, 6.13, 6.96, 7.78]) * 10**9
# 创建多子图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8), sharex=True)
# 子图1
line1, = ax1.plot(years, population / 10**9)
# 子图2
line2, = ax2.plot(years, population / 10**9)
ax2.fill_between(years, population / 10**9, color='#2ca02c', alpha=0.3)
plt.show()
12、导出图表
plt.savefig('test_chart.png', dpi=300)【技术分享】12个小技巧搞定matplotlib可视化~
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法