查看原文
其他

Python数据分析之Matplotlib

Ahab杂货铺 2019-02-25

击上方“Ahab杂货铺”,选择“置顶公众号”

技术分享第一时间送达!



写在前面

今天给大家介绍三剑客之一Matplotlib的使用。首先简单介绍用Matplotlib绘制2D和3D图表,具体的方法和属性并没有过多介绍,但是代码中都做了响应的介绍。


1
为什么学习Matplotlib?

Matplotlib能够将数据进行可视化,更直观的呈现,使数据更加客观,更具说服力。

2
什么是Matplotlib?

Matplotlib:最流行的python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建

3
Matplotlib绘制2D图表

Matplotlib中最基础的模块是pyplot。先用最简单的点图和线图来介绍Matplotlib,比如我们有一组数据,还有一个拟合模型,通过下面的代码图来可视化。

pyplot的属性和方法来画出风格多样的图像,可以参考官网:

https://matplotlib.org/api/pyplot_api.html

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

# 通过rcParams设置全局横纵轴字体大小
mpl.rcParams['xtick.labelsize'] = 24
mpl.rcParams['ytick.labelsize'] = 24
np.random.seed(42)
# x轴的采样点
x = np.linspace(0, 5, 100)
# 通过下面曲线加上噪声生成数据,
所以拟合模型就用y了
y = 2 * np.sin(x) + 0.3 * x ** 2
y_data = y + np.random.\
normal(scale=0.3, size=100)
# figure()指定图表名称
plt.figure('data')
# '.'标明画散点图,每个散点的形状是个圆
plt.plot(x, y_data, '.')
# 画模型的图,plot函数默认画连线图
plt.figure('model')
plt.plot(x, y)
# 两个图画一起
plt.figure('data & model')
# 通过'k'指定线的颜色,lw指定线的宽度
# 第三个参数除了颜色也可以指定线形,
比如'r--'表示红色虚线

plt.plot(x, y, 'k', lw=3)
# scatter可以更容易地生成散点图
plt.scatter(x, y_data)
#将当前figure的图保存到文件result.png
plt.savefig('result.png')
#将画好的图显示在屏幕上
plt.show()

小提示:

matplotlib和pyplot的惯用别名分别是mpl和plt


最终的图像:


4
Matplotlib绘制3D图表

Matplotlib中也能支持一些基础的3D图表,比如曲面图,散点图和柱状图,只是需要使用使用mpl_toolkits模块。


import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
np.random.seed(42)
# 采样个数500
n_samples = 500
dim = 3
# 先生成一组3维正态分布数据,
数据方向完全随机
samples = np.random.multivariate_normal(
np.zeros(dim),
   np.eye(dim),
   n_samples
)
# 通过把每个样本到原点距离和均匀分布
# 吻合得到球体内均匀分布的样本
for i in range(samples.shape[0]):
r = np.power(np.random.random(), 1.0 / 3.0)
samples[i] *= r / np.linalg.norm(samples[i])

upper_samples = []
lower_samples = []

for x, y, z in samples:
# 3x+2y-z=1作为判别平面
   if z > 3 * x + 2 * y - 1:
upper_samples.append((x, y, z))
else:
lower_samples.append((x, y, z))

fig = plt.figure('3D scatter plot')
ax = fig.add_subplot(111, projection='3d')

uppers = np.array(upper_samples)
lowers = np.array(lower_samples)

#用不同颜色不同形状的图标
表示平面上下的样本
#判别平面上半部分为
红色圆点下半部分为绿色三角
ax.scatter(uppers[:, 0], uppers[:, 1],
          uppers[:, 2], c='r', marker='o')
ax.scatter(lowers[:, 0], lowers[:, 1],
          lowers[:, 2], c='g', marker='^')

plt.show()


效果图:



Matplotlib在2D图表中除了绘制点和线图表同样可以绘制柱状或饼状类型的图,我只是做了一个简单的介绍,Matplotlib也支持图像的存取和显示,并且和OpenCV一类的接口比起来,对于一般的二维矩阵的可视化要方便。


未完待续...



微信交流群:


近期推荐阅读:

程序猿资料大汇总

【LeetCode】打卡记录(NO.1-10)






欢迎您的点赞和分享

▲长按关注此公众号


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存