需要源码和PPT请点赞关注收藏后评论区留言私信~~~
一、数据可视化简介
对数据的分析离不开数据的可视化。传统的数据可视化起源于统计图形学,与信息图形、视觉设计等现代技术密切相关,其表现形式通常在二维空间。与之相比,大数据可视化往往更关注抽象高维的数据,空间属性较弱,与所针对的数据类型密切相关
(1)时空数据可视化
时空数据是指带有地理位置与时间标签的数据,因此,时变数据和地理信息数据的可视化非常重要
(2)层次与网络结构数据可视化
网络关联关系在大数据中是一种常见的关系。网络之间的连接、层次结构、拓扑结构等都属于这种类型。层次与网络结构数据通常使用点线图来可视化,如何在空间中合理有效地布局节点和连线时可视化的关键
(3)文本和跨媒体数据可视化
文本信息是大数据时代非结构化数据类型的典型代表,是互联网中最主要的信息类型。这类数据的可视化方法主要有标签云、引入时间轴的河流图等方法
(4)多变量数据可视化
多变量的高维数据用来描述现实世界中的复杂问题和对象。如何将高维数据呈现在平面上,也是可视化的重要挑战,通常人们将高维数据降维到低纬度空间,采用相关联的多视图来表现不同维度
二、Matplotlib简介
Matplotlib 是一个在 python 下实现的类 matlab 的纯 python 的第三方库,旨在用 python实现 matlab 的功能,是python下最出色的绘图库。其风格跟 matlab 相似,同时也继承了 python 的简单明了
要使用matplotlib得先安装 numpy 库 (一个python下数组处理的第三方库,可以很方便的处理矩阵,数组)
matplotlib 对于图像美化方面比较完善,可以自定义线条的颜色和样式,可以在一张绘图纸上绘制多张小图,也可以在一张图上绘制多条线, 可以很方便地将数据可视化并对比分析
Matplotlib模块依赖于NumPy和tkinter模块,可以绘制多种形式的图形,包括线图、直方图、饼图、散点图等,图形质量满足出版要求,是数据可视化的重要工具
Matplotlib中应用最广的是matplotlib.pyplot模块。Pyplot提供了一套和Matlab类似的绘图API,使得Matplotlib的机制更像Matlab。我们只需要调用Pyplot模块所提供的函数就可以实现快速绘图并设置图表的各个细节
在Jupyter notebook中进行交互式绘图,需要执行一下语句: % matplotlib notebook
使用matplotlib时,使用的导入惯例为: import matplotlib.pyplot as plt
下图显示Matplotlib中常用的绘图分组以及对应的图形
三、Matplotlib绘图基础
matplotlib中常用函数如下
figure():创建一个新的绘图窗口。
figtext():为figure添加文字
axes():为当前figure添加一个坐标轴
plot():绘图函数
polar():绘制极坐标图
axis():获取或设置轴属性的边界方法(坐标的取值范围)
clf : 清除当前figure窗口
cla : 清除当前axes窗口
close : 关闭当前figure窗口
subplot : 一个图中包含多个axes
text(): 在轴上添加文字
title(): 设置当前axes标题
xlabel/ylabel:设置当前X轴或Y轴的标签
hist():绘制直方图
hist2d():绘制二维在直方图
hold :设置当前图窗状态;
off或者on
imread():读取一个图像,从图形文件中提取数组
legend():为当前axes放置标签
pie():绘制饼状图
scatter():做一个X和Y的散点图,其中X和Y是相同长度的序列对象
stackplot():绘制一个堆叠面积图
acorr():绘制X的自相关函数
annotate():用箭头在指定的数据点创建一个注释或一段文本
bar():绘制垂直条形图
barh():绘制横向条形图
barbs():绘制一个倒钩的二维场
1.创建画布与创建子图
matplotlib所绘制的图形位于图片Figure对象中 绘图常用方法如下图
第一部分主要作用是构建出一张空白的画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅图上绘制多个图形的情况。最简单的绘图可以省略第一部分,而后直接在默认的画布上进行图形绘制
创建子图
import matplotlib.pyplot as plt import numpy as np import pandas as pd import matplotlib %matplotlib inline fig = plt.figure() #不能使用空白的figure绘图,需要创建子图 ax1 = fig.add_subplot(2,2,1) ax2 = fig.add_subplot(2,2,2) ax3 = fig.add_subplot(2,2,3)
子图绘制
fig = plt.figure() ax1 = fig.add_subplot(2,2,1) ax2 = fig.add_subplot(2,2,2) ax3 = fig.add_subplot(2,2,3) ax1.plot([1.5,2,3.5,-1,1.6])
创建子图序列
可以用语句Fig , axes = plt.subplots(2,3) 创建一个新的图片,然后返回包含了已生成子图对象的NumPy数组。数组axes可以像二维数组那样方便地进行索引,如axes[0,1]。也可以通过sharex和sharey表明子图分别拥有相同的x轴和y轴。 fig , axes = plt.subplots(2,3)
调整子图周围的间距
fig,axes = plt.subplots(2,2,sharex = True,sharey = True) for i in range(2): for j in range(2): axes[i,j].hist(np.random.randn(500),bins =50,color='k',alpha= 0.5) plt.subplots_adjust(wspace=0,hspace=0)
2.添加画布内容
在画布上绘制图形 需要设置绘图的一些属性,如标题 标签周等等 函数如下图所示
第二部分是绘图的主体部分。其中添加标题,坐标轴名称,绘制图形等步骤是并列的,没有先后顺序,可以先绘制图形,也可以先添加各类标签。但是添加图例一定要在绘制图形之后
绘图时设置坐标轴属性
data = np.arange(0,1,0.01) plt.title('my lines example') plt.xlabel('X') plt.ylabel('Y') plt.xlim(0,1) plt.ylim(0,1) plt.xticks([0,0.2,0.4,0.6,0.8,1]) plt.yticks([0,0.2,0.4,0.6,0.8,1]) plt.tick_params(labelsize = 12) plt.plot(data,data**2) plt.plot(data,data**3) plt.legend(['y = x^2','y = x^3']) plt.show()
包含子图绘制的基础语法
data = np.arange(0,np.pi*2,0.01) fig1 = plt.figure(figsize = (8,4),dpi = 90) #确定画布大小 ax1 = fig1.add_subplot(1,2,1) #绘制第1幅子图 plt.title('lines example') plt.xlabel('X') plt.ylabel('Y') plt.xlim(0,1) plt.ylim(0,1) plt.xticks([0,0.2,0.4,0.6,0.8,1]) plt.yticks([0,0.2,0.4,0.6,0.8,1]) plt.plot(data,data**2) plt.plot(data,data**3) plt.legend(['y = x^2','y = x^3']) ax1 = fig1.add_subplot(1,2,2) #绘制第2幅子图 plt.title('sin/cos') plt.xlabel('X') plt.ylabel('Y') plt.xlim(0,np.pi*2) plt.ylim(-1,1) plt.xticks([0,np.pi/2,np.pi,np.pi*3/2,np.pi*2]) plt.yticks([-1,-0.5,0,0.5,1]) plt.plot(data,np.sin(data)) plt.plot(data,np.cos(data)) plt.legend(['sin','cos']) plt.show()
Matplotlib 的 Legend 图例就是为了帮助我们展示每个数据对应的图像名称,更好的让读者认识到你的数据结构。关于plt.legend()的说明如下:
常用设置示例: plt.legend(loc = 'best',frameon = False) #去掉图例边框,推荐使用 plt.legend(loc = 'best',edgecolor = 'blue') #设置图例边框颜色 plt.legend(loc = 'best',facecolor = 'blue') #设置图例背景颜色,若无边框,参数无效
3.绘图的保存与显示
绘图完成后 需要显示或者保存 图形显示和保存的函数如下图
第三部分主要用于保存和显示图形
figure.savefig选项
创作不易 觉得有帮助请点赞关注收藏~~~