热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Matplotlib在数据科学中的可视化应用与技术解析

Matplotlib和数据可视化数据的处理、分析和可视化已经成为Python近年来最为重要的应用领域之一,其中数据的可视化指的是将数据呈现为漂亮的统计图表ÿ

Matplotlib和数据可视化

数据的处理、分析和可视化已经成为Python近年来最为重要的应用领域之一,其中数据的可视化指的是将数据呈现为漂亮的统计图表,然后进一步发现数据中包含的规律以及隐藏的信息。数据可视化又跟数据挖掘和大数据分析紧密相关,而这些领域以及当下被热议的“深度学习”其最终的目标都是为了实现从过去的数据去对未来的状况进行预测。Python在实现数据可视化方面是非常棒的,即便是使用个人电脑也能够实现对百万级甚至更大体量的数据进行探索的工作,而这些工作都可以在现有的第三方库的基础上来完成(无需“重复的发明轮子”)。Matplotlib就是Python绘图库中的佼佼者,它包含了大量的工具,你可以使用这些工具创建各种图形(包括散点图、折线图、直方图、饼图、雷达图等),Python科学计算社区也经常使用它来完成数据可视化的工作。

安装matplotlib

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

pip install matplotlib

绘制折线图

# coding: utf-8
import matplotlib.pyplot as pltdef 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()

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-94nBGppi-1581379107399)(./res/result1.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9XBWXjnB-1581379107400)(./res/result-in-jupyter.png)]

绘制散点图

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f19bKXt5-1581379107400)(./res/result2.png)]

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cBR2AgIe-1581379107401)(./res/result3.png)]

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VM39ieMP-1581379107401)(./res/result4.png)]

绘制正弦曲线

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

# coding: utf-8
import matplotlib.pyplot as plt
import numpy as npdef 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()

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MijtY0vT-1581379107401)(./res/result5.png)]

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

# coding: utf-8
import matplotlib.pyplot as plt
import numpy as npdef 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()

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q8uRixS9-1581379107402)(./res/result6.png)]

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

# coding: utf-8
import matplotlib.pyplot as plt
import numpy as npdef 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()

效果如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dekvJ2iV-1581379107402)(./res/result7.png)]

绘制直方图

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

# coding: utf-8
import matplotlib.pyplot as plt
import numpy as npdef main():# 通过random模块的normal函数产生1000个正态分布的样本data = np.random.normal(10.0, 5.0, 1000)# 绘制直方图(直方的数量为10个)plt.hist(data, 10)plt.show()if __name__ == '__main__':main()

运行效果如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N1uHSbBp-1581379107402)(./res/result8.png)]

使用Pygal绘制矢量图

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

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

from random import randint
import pygaldef roll_dice(n=1):total = 0for _ in range(n):total += randint(1, 6)return totaldef 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()

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yu4GLAxU-1581379107403)(./res/result9.png)]

后记

Matplotlib和NumPy的强大我们在这里也只是窥视了其冰山一角,我们在后续的内容里面还会使用到这两个第三方库,到时候我们再续点为大家介绍其他的功能。


欢迎关注我的公众号,回复关键字“python” ,将会有大礼相送!!! 祝各位面试成功!!!


推荐阅读
  • 本文探讨了图像标签的多种分类场景及其在以图搜图技术中的应用,涵盖了从基础理论到实际项目实施的全面解析。 ... [详细]
  • 本文详细介绍了 TensorFlow 的入门实践,特别是使用 MNIST 数据集进行数字识别的项目。文章首先解析了项目文件结构,并解释了各部分的作用,随后逐步讲解了如何通过 TensorFlow 实现基本的神经网络模型。 ... [详细]
  • 掌握Python岗位,你需要了解的关键技能
    最近,在社交平台脉脉上,一条关于Python岗位的消息引起了广泛关注。本文将探讨Python岗位的实际价值,并深入解析阿里巴巴等大公司在面试Python开发者时常见的问题。 ... [详细]
  • 致信息安全爱好者的成长指南
    本文旨在为信息安全爱好者提供一份详尽的成长指南,涵盖从学习心态调整到具体技能提升的各个方面。 ... [详细]
  • 本文介绍了一种根据目标检测结果,从原始XML文件中提取并分析特定类别的方法。通过解析XML文件,筛选出特定类别的图像和标注信息,并保存到新的文件夹中,以便进一步分析和处理。 ... [详细]
  • 解决PyCharm中安装PyTorch深度学习d2l包的问题
    本文详细介绍了如何在PyCharm中成功安装用于PyTorch深度学习的d2l包,包括环境配置、安装步骤及常见问题的解决方案。 ... [详细]
  • 2017年人工智能领域的十大里程碑事件回顾
    随着2018年的临近,我们一同回顾过去一年中人工智能领域的重要进展。这一年,无论是政策层面的支持,还是技术上的突破,都显示了人工智能发展的迅猛势头。以下是精选的2017年人工智能领域最具影响力的事件。 ... [详细]
  • 吴恩达推出TensorFlow实践课程,Python基础即可入门,四个月掌握核心技能
    量子位报道,deeplearning.ai最新发布了TensorFlow实践课程,适合希望使用TensorFlow开发AI应用的学习者。该课程涵盖机器学习模型构建、图像识别、自然语言处理及时间序列预测等多个方面。 ... [详细]
  • 强人工智能时代,区块链的角色与前景
    随着强人工智能的崛起,区块链技术在新的技术生态中扮演着怎样的角色?本文探讨了区块链与强人工智能之间的互补关系及其在未来技术发展中的重要性。 ... [详细]
  • 解决getallheaders函数导致的500错误及8种服务器性能优化策略
    本文探讨了解决getallheaders函数引起的服务器500错误的方法,并介绍八种有效的服务器性能优化技术,包括内存数据库的应用、Spark RDD的使用、缓存策略的实施、SSD的引入、数据库优化、IO模型的选择、多核处理策略以及分布式部署方案。 ... [详细]
  • 吴裕雄探讨混合神经网络模型在深度学习中的应用:结合RNN与CNN优化网络性能
    本文由吴裕雄撰写,深入探讨了如何利用Python、Keras及TensorFlow构建混合神经网络模型,特别是通过结合递归神经网络(RNN)和卷积神经网络(CNN),实现对网络运行效率的有效提升。 ... [详细]
  • 图神经网络模型综述
    本文综述了图神经网络(Graph Neural Networks, GNN)的发展,从传统的数据存储模型转向图和动态模型,探讨了模型中的显性和隐性结构,并详细介绍了GNN的关键组件及其应用。 ... [详细]
  • 计算机视觉初学者指南:如何顺利入门
    本文旨在为计算机视觉领域的初学者提供一套全面的入门指南,涵盖基础知识、技术工具、学习资源等方面,帮助读者快速掌握计算机视觉的核心概念和技术。 ... [详细]
  • 本文详细介绍了如何在Android 4.4及以上版本中配置WebView以实现内容的自动高度调整和屏幕适配,确保中文显示正常,并提供代码示例。 ... [详细]
  • 在中国医疗行业面临高度监管和市场垄断的背景下,医疗领域的创新面临诸多挑战。本文通过探讨技术变革与商业模式的结合,为医疗AI的未来发展提供了新的视角。 ... [详细]
author-avatar
明恋夏日2
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有