专栏首页毛利学Python数据科学篇| Matplotlib和数据可视化(三)

数据科学篇| Matplotlib和数据可视化(三)

第一时间送达Python 技术干货!

数据的处理、分析和可视化已经成为Python近年来最为重要的应用领域之一,其中数据的可视化指的是将数据呈现为漂亮的统计图表,然后进一步发现数据中包含的规律以及隐藏的信息。

Matplotlib就是Python绘图库中的佼佼者,它包含了大量的工具,你可以使用这些工具创建各种图形(包括散点图、折线图、直方图、饼图、雷达图等),Python科学计算社区也经常使用它来完成数据可视化的工作。

安装matplotlib

可以使用pip来安装matplotlib,命令如下所示。

pip install matplotlib

绘制折线图

# coding: utf-8
import matplotlib.pyplot as plt


def main():
    # 保存x轴数据的列表
    x_values = [x for x in range(1, 11)]
    # 保存y轴数据的列表
    y_values = [x ** 2 for x in range(1, 11)]
    # 设置图表的标题以及x和y轴的说明
    plt.title('Square Numbers')
    plt.xlabel('Value', fontsize=18)
    plt.ylabel('Square', fontsize=18)
    # 设置刻度标记的文字大小
    plt.tick_params(axis='both', labelsize=16)
    # 绘制折线图
    plt.plot(x_values, y_values)
    plt.show()


if __name__ == '__main__':
    main()

运行程序,效果如下图所示。

如果使用jupyter的notebook,需要使用魔法指令%matplotlib inline来设置在页面中显示图表,效果如下所示。

绘制散点图

可以将上面代码中的的plot函数换成scatter函数来绘制散点图,效果如下图所示。

当然,也可以直接通过plot函数设置绘图的颜色和线条的形状将折线图改造为散点图,对应的代码如下所示,其中参数'xr'表示每个点的记号是‘x’图形,颜色是红色(red)。

plt.plot(x_values, y_values, 'xr')

重新运行程序,效果如下图所示。

可能大家已经注意到了,1和10对应的‘x’记号在图形边角的位置不太明显,要解决这个问题可以通过添加下面的代码调整x轴和y轴的坐标范围。

plt.axis([0, 12, 0, 120])

调整后的效果如下图所示。

绘制正弦曲线

在下面的程序中,我们使用了名为NumPy的第三方库来产生样本并计算正弦值。NumPy是一个运行速度非常快的数学库,主要用于数组计算。它可以让你在Python中使用向量和数学矩阵,以及许多用C语言实现的底层函数。如果想通过Python学习数据科学或者机器学习相关的内容,那么就得先学会使用NumPy。

# coding: utf-8
import matplotlib.pyplot as plt
import numpy as np


def main():
    # 指定采样的范围以及样本的数量
    x_values = np.linspace(0, 2 * np.pi, 1000)
    # 计算每个样本对应的正弦值
    y_values = np.sin(x_values)
    # 绘制折线图(线条形状为--, 颜色为蓝色)
    plt.plot(x_values, y_values, '--b')
    plt.show()


if __name__ == '__main__':
    main()

运行程序,效果如下图所示。

如果要在一个坐标系上绘制多个图像,可以按照如下的方式修改代码。

# coding: utf-8
import matplotlib.pyplot as plt
import numpy as np


def main():
    x_values = np.linspace(0, 2 * np.pi, 1000)
    plt.plot(x_values, np.sin(x_values), '--b')
    plt.plot(x_values, np.sin(2 * x_values), '--r')
    plt.show()


if __name__ == '__main__':
    main()

修改后的代码运行效果如下图所示。

如果需要分别在两个坐标系上绘制出两条曲线,可以按照如下的方式操作。

# coding: utf-8
import matplotlib.pyplot as plt
import numpy as np


def main():
    # 将样本数量减少为50个
    x_values = np.linspace(0, 2 * np.pi, 50)
    # 设置绘图为2行1列活跃区为1区(第一个图)
    plt.subplot(2, 1, 1)
    plt.plot(x_values, np.sin(x_values), 'o-b')
    # 设置绘图为2行1列活跃区为2区(第二个图)
    plt.subplot(2, 1, 2)
    plt.plot(x_values, np.sin(2 * x_values), '.-r')
    plt.show()


if __name__ == '__main__':
    main()

效果如下图所示。

绘制直方图

我们可以通过NumPy的random模块的normal函数来生成正态分布的采样数据,其中的三个参数分别表示期望、标准差和样本数量,然后绘制成直方图,代码如下所示。

# coding: utf-8
import matplotlib.pyplot as plt
import numpy as np


def main():
    # 通过random模块的normal函数产生1000个正态分布的样本
    data = np.random.normal(10.0, 5.0, 1000)
    # 绘制直方图(直方的数量为10个)
    plt.hist(data, 10)
    plt.show()


if __name__ == '__main__':
    main()

运行效果如下图所示。

使用Pygal绘制矢量图

矢量图(SVG)是计算机图形学中用点、直线或者多边形等基于数学方程的几何图元表示的图像,也是目前应用得非常多的一种图像文件格式,全称是“Scalable Vector Graphics”。和使用像素表示图像的位图不同,SVG基于XML存储图像数据,它是W3C定义的一种开放标准的矢量图形语言,可以用来设计更为清晰的Web图像,因为SVG与分辨率无关,在任意放大时不会丢失细节或影响清晰度。SVG可以直接用代码来描绘图像,也可以用任何文字处理工具来打开它,通过改变SVG的代码我们可以让图像具备交互功能。

Python中可以使用Pygal来生成SVG,可以通过pip来安装它。

from random import randint
import pygal


def roll_dice(n=1):
    total = 0
    for _ in range(n):
        total += randint(1, 6)
    return total


def main():
    results = []
    # 将两颗色子摇10000次记录点数
    for _ in range(10000):
        face = roll_dice(2)
        results.append(face)
    freqs = []
    # 统计2~12点各出现了多少次
    for value in range(2, 13):
        freq = results.count(value)
        freqs.append(freq)
    # 绘制柱状图
    hist = pygal.Bar()
    hist.title = 'Result of rolling two dice'
    hist.x_labels = [x for x in range(2, 13)]
    hist.add('Frequency', freqs)
    # 保存矢量图
    hist.render_to_file('result.svg')


if __name__ == '__main__':
    main()

运行上面的程序,效果如下图所示。

本文分享自微信公众号 - 毛利学Python(sen13717378202),作者:小sen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 异常值检测

    异常值(outlier)是指一组测定值中与平均值的偏差超过两倍标准差的测定值,与平均值的偏差超过三倍标准差的测定值,称为高度异常的异常值。

    用户6029108
  • 机器学习之线性回归

    文中的所有数据集链接:https://pan.baidu.com/s/1TV4RQseo6bVd9xKJdmsNFw

    用户6029108
  • 一元回归分析

    回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。运用十分广泛,回归分析按照涉及的变量的多少,分...

    用户6029108
  • 美美的matplotlib

    总是感觉matplotlib画的图不是很好看,以前用highcharts画图很清新,而且自动调色,但今天在网上看到别人用matplotlib画的图,简直小清新,...

    罗罗攀
  • 如何用python画图——带你入门matplotlib

    matplotlib是python中常用的一个可视化库,大多数的操作与MATLAB非常类似,所以对于从MATLAB迁移到python的朋友是非常友好的。matp...

    zhangqibot
  • 用Python获取公众号评论并生成词云图证明抖音无罪

    近期为Python社会贡献了一份力量 Python社区越来越强大了,Python氛围越来越好了!希望每个人都能贡献自己的力量

    叫我龙总
  • ubuntu less分页查看log文件

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details...

    bear_fish
  • 让前端监控数据采集更高效

    随着业务的快速发展,我们对生产环境下的问题感知能力越来越关注。作为距离用户最近的一层,前端的表现是否可靠、稳定、好用,很大程度上决定着用户对整个产品的体验和感受...

    桃翁
  • MM Evaluated Receipt Settlement(ERS) 自动发票校验

    Evaluated receipt settlement (ERS) is an automated system used by businesses for...

    用户5495712
  • 让造机器人变得跟黏贴纸一样简单

    做一个机器人有多容易?其实没有这么简单。那要如何轻松地打造一个机器人?东京大学及麻省理工大学的Ryuma Niiyama及同事们发现,如果我们尝试着将可被印制和...

    机器人网

扫码关注云+社区

领取腾讯云代金券