简介
matplotlib是python比较底层的可视化库,可定制性强、图表资源丰富、简单易用、达到出版质量级别。
Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。这里将会探索 matplotlib 的常见用法。
绘图的基础知识
- 图例Legend 代表图形里的内容
- 网格Grid,图形中的虚线,True显示网格
- 点 Markers:表示点的形状。
常用图形
基本的视觉元素有三种:点、线、柱状。
绘图步骤
# 导入图库
import matplotlib.pyplot as plt
import numpy as np
# 创建画板figure
figure = plt.figure(figsize=(10, 10))
# 创建子图subplot/Axes
ax = plt.subplot(1, 1, 1)
# 准备数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制
ax.plot(x, y, color='orange', linestyle='-')
ax.set_title('y=sinx')
ax.set_xlabel('x')
ax.set_ylabel('y')
# 显示图形
plt.show()
注意:如果只绘制一个图的话,不需要创建画板和子图,直接绘制即可。
属性详解
多图绘制
子图的绘制
# 1). 导入绘图库
import matplotlib.pyplot as plt
import numpy as np
# 2). 创建画板figure
figure = plt.figure(figsize=(10, 10))
# 3). 创建子图subplot/Axes, 生成2行一列的子图,
# 第一行第一列绘制sinx的图形, 第二行第一列绘制cosx的图形
ax1 = plt.subplot(2, 1, 1)
ax2 = plt.subplot(2, 1, 2)
# 4). 准备数据
# 从0-50分割成100份
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 6). 绘制
ax1.plot(x, y1, color='orange', linestyle='-.')
ax1.set_title('y = sinx')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax2.plot(x, y2, color='m', linestyle='-.')
ax2.set_title('y = cosx')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
# 7). 显示图形
plt.show()
条形图的绘制
条形图(bar chart),也称为柱状图,是一种以长方形的长度为变量的统计图表,长方形的长度与它所对应的变量数值呈一定比例。
import matplotlib.pyplot as plt
# 1. 创建figure
fig = plt.figure()
# 2. 创建子图(1行2列)
ax1 = plt.subplot(1, 2, 1)
ax1.set_title('男生购买饮用水情况的调查结果')
ax2 = plt.subplot(1, 2, 2)
ax2.set_title('女生购买饮用水情况的调查结果')
# ***********中文乱码如何解决
plt.rcParams['font.sans-serif'] = ['SimHei']
# 3. 加载数据信息
waters = ['碳酸饮料', '绿茶', '矿泉水', '其它', '果汁']
boy_buy_num = [6, 7, 6, 2, 1]
girl_buy_num = [9, 4, 4, 6, 5]
# 4. 绘制条形图
bar_width = 0.4
ax1.bar(waters, boy_buy_num, bar_width, color='orange')
ax2.bar(waters, girl_buy_num, bar_width, color='g')
# 5. 保存图片到本地
# plt.show()
plt.savefig('bar.png')
横向条形图绘制
import matplotlib.pyplot as plt
# 1. 创建figure
fig = plt.figure()
# 2. 创建子图(1行2列)
ax1 = plt.subplot(2, 1, 1)
ax1.set_title('男生购买饮用水情况的调查结果')
ax2 = plt.subplot(2, 1, 2)
ax2.set_title('女生购买饮用水情况的调查结果')
# ***********中文乱码如何解决
plt.rcParams['font.sans-serif'] = ['SimHei']
# 3. 加载数据信息
waters = ['碳酸饮料', '绿茶', '矿泉水', '其它', '果汁']
boy_buy_num = [6, 7, 6, 2, 1]
girl_buy_num = [9, 4, 4, 6, 5]
# 4. 绘制条形图
bar_width = 0.4
ax1.barh(waters, boy_buy_num, height=bar_width, color='orange')
ax2.barh(waters, girl_buy_num, height=bar_width, color='g')
# 5. 保存图片到本地
# plt.show()
plt.savefig('bar.png')
并列条形柱状图
import matplotlib.pyplot as plt
import numpy as np
# ***********中文乱码如何解决
plt.rcParams['font.sans-serif'] = ['SimHei']
# 加载数据信息
waters = ['碳酸饮料', '绿茶', '矿泉水', '其它', '果汁']
boy_buy_num = [6, 7, 6, 2, 1]
girl_buy_num = [9, 4, 4, 6, 5]
# 调整条形图的横坐标
bar_width = 0.4
boy_index = np.arange(len(waters)) # [0, 1, 2, 3, 4]
girl_index = boy_index + bar_width # numpy传播机制, [0.4, 1.4, 2.4, 3.4, 4.4]
# 绘制条形图
plt.bar(boy_index, boy_buy_num, bar_width, color='orange', label='男生')
plt.bar(girl_index, girl_buy_num, bar_width, color='g', label='女生')
# 修改无意义的横坐标为有意义的横坐标
plt.xticks(boy_index + bar_width / 2, waters)
plt.ylabel("购买量")
plt.title("购买饮水情况的调查表")
plt.legend()
# 保存图片到本地
# plt.show()
plt.savefig('bar.png')