AI基础:数据可视化简易入门(Matplotlib 和 Seaborn)

0 导语

Matplotlib 是一个 Python 的 2D 绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 。

通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

Seaborn 是基于 Python 且非常受欢迎的图形可视化库,在 Matplotlib 的基础上,进行了更高级的封装,使得作图更加方便快捷。即便是没有什么基础的人,也能通过极简的代码,做出具有分析价值而又十分美观的图形。

在此之前,我已经写了一篇 Numpy 和 Pandas 的快速入门,本篇文章讲解数据可视化快速入门:

AI 基础:Numpy 简易入门

AI 基础:Pandas 简易入门

备注:本文代码可以在github下载

https://github.com/fengdu78/Data-Science-Notes/tree/master/5.data-visualization

1.Matplotlib

1.1 通过 figure()函数创建画布

import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
data_one = np.arange(100, 201)  # 生成包含100~200的数组
plt.plot(data_one)                # 绘制data1折线图
plt.show()
# 创建新的空白画布,返回Figure实例
figure_obj = plt.figure()
data_two = np.arange(200, 301)      # 生成包含200~300的数组
plt.figure(facecolor='gray')    # 创建背景为灰色的新画布
plt.plot(data_two)                    # 通过data2绘制折线图
plt.show()

1.2 通过 subplot()函数创建单个子图

nums = np.arange(0, 101)    # 生成0~100的数组
# 分成2*2的矩阵区域,占用编号为1的区域,即第1行第1列的子图
plt.subplot(221)
# 在选中的子图上作图
plt.plot(nums, nums)
# 分成2*2的矩阵区域,占用编号为2的区域,即第1行第2列的子图
plt.subplot(222)
# 在选中的子图上作图
plt.plot(nums, -nums)
# 分成2*1的矩阵区域,占用编号为2的区域,即第2行的子图
plt.subplot(212)
# 在选中的子图上作图
plt.plot(nums, nums**2)
# 在本机上显示图形
plt.show()

1.3 通过 subplots()函数创建多个子图

# 生成包含1~100之间所有整数的数组
nums = np.arange(1, 101)
# 分成2*2的矩阵区域,返回子图数组axes
fig, axes = plt.subplots(2, 2)
ax1 = axes[0, 0]  # 根据索引[0,0]从Axes对象数组中获取第1个子图
ax2 = axes[0, 1]   # 根据索引[0,1]从Axes对象数组中获取第2个子图
ax3 = axes[1, 0]   # 根据索引[1,0]从Axes对象数组中获取第3个子图
ax4 = axes[1, 1]   # 根据索引[1,1]从Axes对象数组中获取第4个子图
# 在选中的子图上作图
ax1.plot(nums, nums)
ax2.plot(nums, -nums)
ax3.plot(nums, nums**2)
ax4.plot(nums, np.log(nums))
plt.show()

1.4 通过 add_subplot()方法添加和选中子图

# 引入matplotlib包
import matplotlib.pyplot as plt
import numpy as np
# 创建Figure实例
fig = plt.figure()
# 添加子图
fig.add_subplot(2, 2, 1)
fig.add_subplot(2, 2, 2)
fig.add_subplot(2, 2, 4)
fig.add_subplot(2, 2, 3)
# 在子图上作图
random_arr = np.random.randn(100)
# 默认是在最后一次使用subplot的位置上作图,即编号为3的位置
plt.plot(random_arr)
plt.show()

1.5 添加各类标签

import numpy as np
data = np.arange(0, 1.1, 0.01)
plt.title("Title")      # 添加标题
plt.xlabel("x")         # 添加x轴的名称
plt.ylabel("y")         # 添加y轴的名称
# 设置x和y轴的刻度
plt.xticks([0, 0.5, 1])
plt.yticks([0, 0.5, 1.0])
plt.plot(data, data**2)         # 绘制y=x^2曲线
plt.plot(data, data**3)         # 绘制y=x^3曲线
plt.legend(["y=x^2", "y=x^3"])   # 添加图例
plt.show()              # 在本机上显示图形
import numpy as np
x=np.linspace(-3,3,50)#产生-3到3之间50个点
y1=2*x+1#定义函数
y2=x**2
# num=3表示图片上方标题 变为figure3,figsize=(长,宽)设置figure大小
plt.figure(num=3, figsize=(8, 5))
plt.plot(x, y2)
# 红色虚线直线宽度默认1.0
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')

plt.xlim((-1, 2))  #设置x轴范围
plt.ylim((-2, 3))  #设置轴y范围

#设置坐标轴含义, 注:英文直接写,中文需要后面加上fontproperties属性
plt.xlabel(u'价格', fontproperties='SimHei', fontsize=16)
plt.ylabel(u'利润', fontproperties='SimHei', fontsize=16)

# 设置x轴刻度
# -1到2区间,5个点,4个区间,平均分:[-1.,-0.25,0.5,1.25,2.]
new_ticks = np.linspace(-1, 2, 5)
print(new_ticks)
plt.xticks(new_ticks)

# 设置y轴刻度
'''
设置对应坐标用汉字或英文表示,后面的属性fontproperties表示中文可见,不乱码,
内部英文$$表示将英文括起来,r表示正则匹配,通过这个方式将其变为好看的字体
如果要显示特殊字符,比如阿尔法,则用转意符\alpha,前面的\ 表示空格转意
'''
plt.yticks([-2, -1.8, -1, 1.22, 3.],
           ['非常糟糕', '糟糕', r'$good\ \alpha$', r'$really\ good$', '超级好'],
           fontproperties='SimHei',
           fontsize=12)
plt.show()
[-1.   -0.25  0.5   1.25  2.  ]

1.6 绘制常见类型图表

arr_random = np.random.randn(100)   # 创建随机数组
plt.hist(arr_random, bins=8, color='g', alpha=0.7) # 绘制直方图
plt.show()  # 显示图形
# 创建包含整数0~50的数组,用于表示x轴的数据
x = np.arange(51)
# 创建另一数组,用于表示y轴的数据
y = np.random.rand(51) * 10
plt.scatter(x, y)   # 绘制散点图
plt.show()
# 创建包含0~4的一维数组
x = np.arange(5)
# 从上下限范围内随机选取整数,创建两个2行5列的数组
y1, y2 = np.random.randint(1, 31, size=(2, 5))
width = 0.25                                # 条形的宽度
ax = plt.subplot(1, 1, 1)                # 创建一个子图
ax.bar(x, y1, width, color='r')         # 绘制红色的柱形图
ax.bar(x+width, y2, width, color='g')  # 绘制另一个绿色的柱形图
ax.set_xticks(x+width)                    # 设置x轴的刻度
# 设置x轴的刻度标签
ax.set_xticklabels(['January', 'February', 'March', 'April ', 'May '])
plt.show()                                  # 显示图形
data = np.arange(1, 3, 0.3)
# 绘制直线,颜色为青色,标记为“x”,线型为长虚线
plt.plot(data, color="c", marker="x", linestyle="--")
# 绘制直线,颜色为品红,标记为实心圆圈,线型为短虚线
plt.plot(data+1, color="m", marker="o", linestyle=":")
# 绘制直线,颜色为黑色,标记为五边形,线型为短点相间线
plt.plot(data+2, color="k", marker="p", linestyle="-.")
# 也可采用下面的方式绘制三条不同颜色、标记和线型的直线
# plt.plot(data, 'cx--', data+1, 'mo:', data+2, 'kp-.')
plt.show()

1.7 本地保存图形

# 创建包含100个数值的随机数组
import numpy as np
random_arr = np.random.randn(100)
random_arr
array([-2.02009735, -1.21035005,  0.57679581, -0.00584516,  0.59612158,
       -0.31118333, -0.67245832, -0.56589637,  0.25570972,  0.68256563,
       -0.45816656,  0.34956566,  0.51020863, -0.75272333,  1.42433863,
       -0.05658573,  0.35273745, -0.35519388,  0.15499307,  0.39895018,
       -1.86154032, -1.23949979, -0.63471999,  1.09811855,  0.02552633,
       -0.16804823,  0.34956809,  0.93485716,  0.37747537, -0.16523647,
       -1.04335227, -0.01702448,  1.60924259,  1.15294223, -0.15174045,
       -0.03772519,  1.090792  ,  0.65279282,  0.38186503, -1.3393988 ,
        0.10098444, -0.67411024, -2.39433996, -0.43594683, -0.155494  ,
        0.54676898, -0.97705035, -1.34799225,  1.64568965, -1.30594202,
       -0.30704745, -0.61612604,  1.09322798,  0.88921527, -0.22512233,
       -1.10477607, -0.61717627,  0.73952416,  0.30252205,  0.60808863,
       -0.3400892 , -2.01174842, -0.46480751,  1.54980369,  1.74610516,
       -0.53146867, -0.70904096,  1.73856111, -0.09254733,  0.43490467,
       -0.87201768, -0.73685075, -0.65868507, -0.18305015,  0.62559549,
        0.30743734, -0.78680136, -0.05808801, -0.23935035, -1.14580197,
        0.99154585,  0.07974613,  0.61315198,  0.93667393,  0.76542518,
        1.90500996,  0.0306359 , -2.53801425,  0.17371482,  1.75721226,
        0.25076371, -1.00032227,  0.20617839,  0.81751139,  0.64920089,
        1.3145223 ,  1.05360644,  2.06404062,  1.7208791 , -0.09375516])
# 将随机数组的数据绘制线形图
plt.plot(random_arr)
plt.show()

2 seaborn—绘制统计图形

2.1 可视化数据的分布

import seaborn as sns
%matplotlib inline
import numpy as np
sns.set()                      # 显式调用set()获取默认绘图
np.random.seed(0)            # 确定随机数生成器的种子
arr = np.random.randn(100)        # 生成随机数组
ax = sns.distplot(arr, bins=10)  # 绘制直方图
# 创建包含500个位于[0,100]之间整数的随机数组
array_random = np.random.randint(0, 100, 500)
# 绘制核密度估计曲线
sns.distplot(array_random, hist=False, rug=True)
# 创建DataFrame对象
import pandas as pd
dataframe_obj = pd.DataFrame({"x": np.random.randn(500),"y": np.random.randn(500)})
dataframe_obj

xy
00.4782151.246931
1-0.0539060.187860
2-1.2419011.281412
3-1.6584951.375265
4-0.3533721.420608
51.656508-0.557275
61.5119131.657975
7-0.9068040.452821
8-0.777217-0.368433
9-0.739228-1.286740
100.987989-1.634521
11-0.026473-0.010277
12-1.262669-0.256035
13-1.5611650.918040
14-0.939354-0.127256
150.3354530.217671
16-1.4897520.432434
17-1.066911-0.515731
181.035863-0.297603
190.631313-0.653702
20-1.8943671.868757
210.0365710.237410
22-0.312502-1.319956
230.814248-0.811489
240.382404-0.449499
251.6466660.410724
260.2275530.313078
27-1.3998750.431041
28-2.161313-1.314429
290.2807502.321291
.........
470-1.266559-0.595866
471-0.7665660.096873
4720.205730-1.270893
473-0.608373-1.875642
474-0.3231700.336776
475-1.615268-1.565554
4760.4336791.887319
477-0.217975-0.728759
4781.0233240.201026
479-0.134135-0.746496
4800.0467241.299394
481-0.595088-0.641203
482-1.949716-0.520380
483-0.530026-0.348830
484-1.060356-0.013075
485-0.908488-0.981377
486-0.034975-1.450624
487-1.4263970.320157
488-1.3025371.746811
489-1.1907580.407325
490-0.1705430.311181
4910.8140520.299761
492-0.5201460.591630
4931.934602-0.165131
494-0.052196-0.524848
495-1.0574860.939177
496-0.158090-1.588747
497-0.2384121.627092
4980.279500-0.218554
4991.962078-0.956771

500 rows × 2 columns

# 绘制散布图
sns.jointplot(x="x", y="y", data=dataframe_obj)
# 绘制二维直方图
sns.jointplot(x="x", y="y", data=dataframe_obj, kind="hex")


# 核密度估计
sns.jointplot(x="x", y="y", data=dataframe_obj, kind="kde")
# 加载seaborn中的数据集
dataset = sns.load_dataset("tips")
# 绘制多个成对的双变量分布
sns.pairplot(dataset)

2.2 用分类数据绘图

tips = sns.load_dataset("tips")
sns.stripplot(x="day", y="total_bill", data=tips)
tips = sns.load_dataset("tips")
sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)
sns.swarmplot(x="day", y="total_bill", data=tips)
sns.boxplot(x="day", y="total_bill", data=tips)
sns.violinplot(x="day", y="total_bill", data=tips)
sns.barplot(x="day", y="total_bill", data=tips)
sns.pointplot(x="day", y="total_bill", data=tips)

备注:本文代码可以在github下载

https://github.com/fengdu78/Data-Science-Notes/tree/master/5.data-visualization

往期精彩回顾




那些年做的学术公益-你不是一个人在战斗适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册人工智能常识和干货,适合收藏
《统计学习方法》(李航)读书笔记(完结)
良心推荐:机器学习入门资料汇总及学习建议
网红少年编程书,AI自学不再难
【B站免费教程】2W 收藏!火爆 B 站的计算机科学速成教程发布,全中文版
良心推荐:机器学习入门资料汇总及学习建议(2018版)
机器学习必备宝典-《统计学习方法》的python代码实现、电子书及课件
软件下载和Python,AI,资料【送书PDF】Python编程从入门到实践
Python从入门到精通,深度学习与机器学习资料大礼包!
【免费】某机构最新3980元机器学习/大数据课程高速下载,限量200份长按扫码撩海归   觉得不错, 请随意转发,麻烦点个在看!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于Python的中国城市轨道交通数据可视化分析源码+项目说明.zip 基于Python的中国城市轨道交通数据可视化分析源码+项目说明.zip 基于Python的中国城市轨道交通数据可视化分析源码+项目说明.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 本项目是一个基于 Python 的简单数据可视化分析的小Demo。通过这个项目可以练习使用Python数据可视化分析相关的强大的库和模块,练习绘制简单的GUI界面并且连接数据库,更加深了对Python语言的学习和拓展。本项目也可作为学校的大作业、大实验实践或者课程设计等的选题项目。 > - 本项目通过多线程爬虫获取了高德地图中的中国轨道交通的一些数据信息,高德地图这个权威的网站也保证了数据的完整可靠性,然后进行了一些简单并且有趣的数据可视化分析,另外还设计了一个GUI界面,查询数据库或者文件中的一些信息。 > > - 如发现文档中或者源代码中有错误,欢迎大家在 `Issues` 中研究讨论,欢迎大家 `Fork` 和 `Pull requests` 改善代码,十分感谢! 使用语言 - Python 主要技术 * **网络编程** * **多线程** * **文件操作** * **数据库编程** * **GUI** * **数据分析** 导入的库和模块 ```python import json import requests from bs4 import BeautifulSoup import sqlite import threading import tkinter as tk from tkinter import scrolledtext import pandas as pd from pyecharts import Line, Bar, Geo import numpy as np from wordcloud import WordCloud, ImageColorGenerator import jieba import matplotlib.pyplot as plt import seaborn as sns ``` 项目整体思路 1. 网页分析 2. 多线程爬虫爬取信息 . 数据保存至文件中和数据库中 4. 利用 tkinter 绘制 GUI 界面,实现查询线路和站点两个功能 5. 数据可视化分析 (1)直接控制台显示分析结果 (2)绘制中国地图、柱状图等,生成 .html 文件 ( )绘制词云 (4)绘制柱状图、饼状图、折线图、散点图、双变量图等,生成 .png 文件 运行 - 分别运行`src`文件夹中的`.py`文件即可 部分运行结果样例 `res`文件夹中的文件
# PythonPlotlyCodes 《Python 数据分析:基于 Plotly 的动态可视化绘图》 源代码 # 前言   Python是一门非常优秀的编程语言,其语法简捷、易学易用,越来越受到编程人员的喜爱;Python也是一门非常“人性化”的编程语言,其各种语法规则的设计符合人们的思维方式,开发人员可以用最简单的方式实现自己的编程目的,降低时间成本;同时,Python又是一门非常强大的编程语言,其在编程的各个领域都有非常不错的表现,比如在网页开发、程序GUI设计、网络爬虫、科学计算、数据可视化、机器学习与深度学习等领域,Python都有非常好的解决方案来解决现实中的业务问题。   互联网的快速发展为我们积累了庞大的数据,计算机硬件的创新为存储与分析这些数据创造了硬件条件,编程语言的发展为分析这些数据创造了软件条件。在数据分析这个领域,Python有着自己独有的优势,简单易用的特性与强大的开源模块的支持使其成为数据分析领域方便、好用的利器。   Python在数据分析领域的广泛应用离不开其强大的开源模块的支持,大名鼎鼎的NumPy、SciPy、Statsmodels、Pandas等模块的建立与发展奠定了Python在数据分析领域中的重要地位。这些模块简单又好用,它们提供的解决方案能够解决绝大部分业务问题。在人工智能领域,Python也有非常棒的解决方案,如Sklearn、TensorFlow、MXNet、Theano、PyTorch、Caffe等都是非常好的开源模块。尤其是在人工智能中最前沿的深度学习领域,Python几乎占据了霸主的地位。Python借助在数据分析领域中开源模块的优势,于量化投资领域逐渐占据了领头羊的地位。国内外主流量化投资网站大多支持Python语言,其在量化投资领域有一种逐渐淘汰其他语言,一统“江湖”之势。   对数据的分析离不开数据的可视化,相对于Python在数据分析、人工智能、量化投资等领域中的发展,在数据可视化方面的发展有些滞后。最经典的Python可视化绘图库莫过于Matplotlib了,Matplotlib就是MATLAB+Plot+Library,即模仿MATLAB的绘图库,其绘图风格与MATLAB类似。由于MATLAB的绘图风格有些偏古典,为了绘出更漂亮的图像,Python开源社区开发出了Seaborn绘图模块,它本质上是对Matplotlib的封装,绘图效果更符合现代人的审美观。尽管如此,由于Matplotlib是基于GUI的绘图模块,因此存在特有的缺陷。   就笔者使用的经验而言,Matplotlib主要存在两大缺陷:首先,Matplotlib是一个静态的绘图模块,即我们绘出的图像是静态的,就像是用看图软件打开图片一样,没有网页绘图的交互式效果;其次,Matplotlib绘图结果的分享很不方便,在绘图结果分享给别人时只能以图片的方式分享,别人看到的绘图结果完全是静态的,分享体验很不好。Matplotlib一直以来都是Python可视化的主力军,但是确实存在无法克服的缺陷,并且其他的Python绘图模块如Ggplot、Bokeh、Pygal等都比较小众,绘图功能比较单一,完成不了对Matplotlib的替代。   为了解决Python在可视化中存在的问题,Plotly应运而生,它是一个基于JavaScript的动态绘图模块。Plotly的绘图效果与我们在网页上看到的动态交互式绘图结果是一样的,其默认的绘图结果是一个HTML网页文件,通过浏览器就可以查看。我们可以把这个HTML文件分享给其他人,对方看到的效果与我们在本机上看到的效果完全一样。   Plotly有着自己强大又丰富的绘图库,支持各种类型的绘图方案。Plotly是基于JavaScript的绘图库,所以其绘图结果可以与web应用无缝集成。总之,Plotly在绘图模块上是Matplotlib强有力的竞争对手,其绘图的种类丰富、效果美观、易于保存与分享等特点越来越受数据分析人士的喜爱,至少笔 -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值