每天一个库,今天学习matplotlib
开始
大家好呀!这是一篇为新手小宝宝们写的可视化教程,主要包括matplotlib、seaborn、pyecharts等常用的可视化库,那我们就开始今天的学习吧!|ू・ω・` )
matplotlib简介
matplotlib 是 Python 里极为常用的绘图库,它能够创建各式各样的静态、动态及交互式可视化图表。最早由 John D. Hunter 在 2003 年发起,其设计初衷是在 Python 环境下实现类似于 MATLAB 的绘图功能。经过多年的发展,它已经成为 Python 数据科学和可视化领域的核心工具之一,并且拥有一个活跃的开发者社区,不断为其添加新功能和修复问题。
如果你想深入学习 matplotlib,可以参考官方文档
基础知识
绘图逻辑依照四个容器:图figure、坐标系axis、坐标轴、刻度ticks。接下来我们一一讲解。
导入库
没有下载过matplotlib的童鞋先下载一下
pip install matplotlib
import matplotlib.pyplot as plt #导入库
图figure
可以使用plt.figure()创建图层,参数包括图的名称、尺寸、颜色等。
plt.figure() #创建图层
plt.xticks([]) #设置或获取当前图形的 x 轴刻度标签
plt.yticks([]) #设置或获取当前图形的 y 轴刻度标签
plt.show() #显示当前所有已经创建的图形窗口
运行上述代码后,会弹出一个空白的绘图窗口,该窗口的 x 轴和 y 轴上都没有刻度标签
坐标系axes
若要创建多个坐标系或者子图,有多种方法,下面介绍两种。
- 下面是使用plt.subplot()创建两个个子图,呈现两个坐标系。
#方法一:使用subplot创建多图
plt.figure()
plt.subplot(2,1,1) #绘制两行一列的子图1
plt.xticks([])
plt.yticks([])
plt.text(0.5,0.5,'subplot1',ha='center',va='center',size=20)
plt.subplot(2,1,2) #绘制两行一列的子图2
plt.xticks([])
plt.yticks([])
plt.text(0.5,0.5,'subplot2',ha='center',va='center',size=20)
- 使用plt.axes([])创建多个坐标系
# 方法二:使用plt.axes(left、bottom、width、height)创建多个坐标系
plt.figure()
plt.axes([0.1,0.1,0.5,0.5])
plt.xticks([]),plt.yticks([])
plt.text(0.1,0.1,'axes1',size=15)
plt.axes([0.3,0.5,0.5,0.5])
plt.xticks([]),plt.yticks([])
plt.text(0.1,0.1,'axes2',size=15)
坐标轴axis
使用plt.xlabel()设置x坐标轴标签,使用plt.xlim()设置x坐标轴范围
plt.figure()
plt.xlabel(('this is x axis'),size=15) #plt.xlabel()设置x坐标轴标签
plt.xlim(0,20) #plt.xlim()设置x坐标轴范围
plt.ylabel(('this is y axis'),size=15)
plt.ylim(0,1)
plt.show()
其它元素
- 线:plt.plot(x,y)
- 点:plt.scatter(x,y)
- 添加文字:plt.text(x,y,s)
- 添加图例:plt.legend()
- 添加图片:plt.imshow()
运行配置
#全局运行配置plt.rcParams(),一般只在开头全局配置一次,如字体设置
plt.figure()
plt.rcParams['font.sans-serif'] = ['SIMHEI']
plt.rcParams['font.size'] = 20
plt.rcParams['font.weight'] = 'bold'
plt.rcParams['axes.edgecolor'] = 'green'
plt.xlabel('这是x轴')
plt.xticks([])
plt.show()
#修改全局配置后,若要恢复,可使用plt.clf()清空画布,
plt.clf()
plt.figure()
plt.style.use('default') #恢复默认配置
#或plt.rodefaults()
plt.xlim(0,20)
plt.xticks([])
plt.show()
图形绘制
好了,完成了基础知识的学习,接下来我们就可以进行绘图了。
柱状图Bar
基础柱状图
绘制一个简单的多图柱状图
plt.figure()
plt.subplot(2,1,1)
plt.bar(s_count.index,s_count['2011年'],label='2011')
plt.subplot(2,1,2)
plt.bar(s_count.index,s_count['2012年'],label='2012')
分组柱状图
下面我们把这两张子图合并到一张图里
plt.figure(figsize=[10,6])
w = 0.35
plt.bar(s_count.index-w/2,s_count['2011年'],width=w,color='#70E0B2',label='2011')
plt.bar(s_count.index+w/2,s_count['2012年'],width=w,color='#FDDF5B',label='2012')
for x1,y1 in zip(s_count.index,s_count['2011年']): #添加绿bar上数字
plt.text(x1-w/2,y1,y1,ha='center',va='bottom',fontsize=10)
for x2,y2 in zip(s_count.index,s_count['2012年']): #添加黄bar上数字
plt.text(x2+w/2,y2,y2,ha='center',va='bottom',fontsize=10)
plt.xticks(ticks=s_count.index,labels=['spring','summer','fall','winter'],fontsize=12)
plt.legend()
plt.title('季度用户量柱状图')
plt.tight_layout()
plt.show()
堆叠柱状图
我们还可以使用另一种作图方式,堆叠柱状图
plt.bar(s_count.index,s_count['2011年'],label='2011')
plt.bar(s_count.index,s_count['2012年'],bottom=s_count['2011年'],label='2012') #设置bottom参数,表示哪类数据在下面
plt.legend()
plt.tight_layout() #自动调整子图(subplots)、坐标轴标签、标题等元素的布局,以确保它们在图形中不会相互重叠,使图形的布局更加紧凑和美观。
plt.show()
折线图plot
下面我们学习折线图的绘制
plt.figure(figsize=[10,6])
plt.plot(m_count.index,m_count['2011年'],color='#70E0B2',label='2011',marker='o')
plt.plot(m_count.index,m_count['2012年'],color='#FDDF5B',label='2012',marker='s')
for x1,y1 in zip(m_count.index,m_count['2011年']):
plt.text(x1,y1+1000,y1,ha='center',va='bottom',fontsize=12) #在 2011 年的折线上标注具体的用户量数值
for x2,y2 in zip(m_count.index,m_count['2012年']):
plt.text(x2,y2+1000,y2,ha='center',va='bottom',fontsize=12) #在 2012 年的折线上标注具体的用户量数值
plt.legend()
plt.title('月度用户量折线图')
plt.tight_layout()
plt.show()
另一种绘图方式:面向对象API接口
在 matplotlib 中,除了使用 pyplot 这种命令式的接口绘图外,还可以使用面向对象(Object - Oriented)的 API 接口。面向对象的 API 更加灵活,适合创建复杂的图形,它允许你显式地创建 Figure 和 Axes 对象,然后对它们进行操作。
- Figure:代表整个图形窗口,可以包含一个或多个 Axes 对象。
- Axes:代表一个具体的绘图区域,每个 Axes 都有自己的坐标轴、刻度、标签等。
柱状图
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
categories = ['A', 'B', 'C', 'D']
values = [20, 35, 30, 25]
# 创建 Figure 和 Axes 对象
fig, ax = plt.subplots()
# 在 Axes 上绘制柱状图
ax.bar(categories, values)
# 设置标题和坐标轴标签
ax.set_title('Bar Chart')
ax.set_xlabel('Categories')
ax.set_ylabel('Values')
# 显示图形
plt.show()
折线图
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 创建包含 2 行 1 列子图的 Figure 和 Axes 对象数组
fig, axes = plt.subplots(2, 1)
# 在第一个子图上绘制正弦曲线
axes[0].plot(x, y1)
axes[0].set_title('Sine Curve')
axes[0].set_ylabel('Y')
# 在第二个子图上绘制余弦曲线
axes[1].plot(x, y2)
axes[1].set_title('Cosine Curve')
axes[1].set_xlabel('X')
axes[1].set_ylabel('Y')
# 调整子图布局
plt.tight_layout()
# 显示图形
plt.show()
主题风格
matplotlib提供了20+种主题风格,可以通过plt.style.use()切换。此为全局配置,使用plt.style.use(‘default’)恢复默认风格。
#colormap使用方法:
plt.figure(figsize=(4,15),dpi=150)
##ListedColormap(列表形式colormap)
#取多种颜色
plt.subplot(4,1,1)
plt.bar(range(5),range(1,6),color=plt.get_cmap('Accent')(range(5)))
#plt.bar(range(5),range(1,6),color=plt.cm.Accent(range(5)))
#plt.bar(range(5),range(1,6),color=plt.cm.get_cmap('Accent')(range(5)))
#取一种颜色
plt.subplot(4,1,2)
plt.bar(range(5),range(1,6),color=plt.cm.get_cmap('Accent')(5))
#取多种颜色
plt.subplot(4,1,3)
plt.bar(range(5),range(1,6),color=plt.get_cmap('Blues')(np.linspace(0,1,5)))
下面给出一些颜色编码,大家可以作为参考
创作不易,亲亲求点赞求收藏呀ヾ(=・ω・=)o