目录

  • 什么是数据可视化
  • 常见图表类型
  • 认识Matplotlib
  • Matplotlib简答使用
    • 使用默认画布
    • 通过figure()函数创建画布
    • 通过subplot()函数创建单个子图
    • 通过subplots() 函数创建多个子图
    • 添加各类标签
  • 绘制常见图表
    • 绘制直方图
    • 绘制柱形图
    • 绘制散点图
    • 绘制折线图
    • 绘制饼状图
  • 保存图表
  • 综合案例
  • 总结

上一期我带着大家一起学习了数据分析,分析后的数据已经没有了异常值和空值,这样一来我们就可以使用我们已经处理完成的数据了。本期我们就来试试对我们爬取的数据进行可视化分析吧~

什么是数据可视化

数据可视化是指将数据以图表的形式表示,并利用数据分析和开发工具发现其中未知信息的过程。Python为我们提供了很多数据可视化工具,例如:Matplotlib、Seaborn等,这里我们针对Matplotlib进行演示。

常见图表类型

在数据分析过程中我们常见的图表类型包括以下几种:

  • 直方图:适用于比较数据之间的多少
  • 折线图:反映一组数据的变化趋势
  • 条形图:显示各项目之间的比较情况,和直方图类似
  • 散点图:显示若干数据系列中各数值之间的关系,类似于X、Y轴,判断两变量之间是否存在某种联系
  • 箱形图:识别异常值

认识Matplotlib

Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。

Matplotlib简答使用

使用默认画布

import numpy as np
import matplotlib.pyplot as plt# 使用默认画布绘图
data = np.arange(100, 200)
plt.plot(data)
plt.show()

通过figure()函数创建画布

import matplotlib.pyplot as plt
#创建图形对象
fig = plt.figure()

figsize 指定画布的大小,(宽度,高度),单位为英寸。
dpi 指定绘图对象的分辨率,即每英寸多少个像素,默认值为80。
facecolor 背景颜色。
dgecolor 边框颜色。
frameon 是否显示边框。

import matplotlib.pyplot as plt
import numpy as np# 创建图形对象
plt.figure(facecolor='gray')
data = np.arange(100, 200)
plt.plot(data)
plt.show()

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

有些时候我们想在同一个画布绘制多个视图,而不是在多个画布中绘制多个图形。这时候可以把画布进行划分,每个绘图区域都是一个Axes对象,他拥有属于自己的坐标系统,被称为子图。

plt.subplot(nrows, ncols, index)

nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域。

data = np.arange(100, 200)  # 数据
plt.subplot(121)  # 分成1x2的区域,占用编号为1的区域
plt.plot(data)
plt.subplot(122)  # 分成1x2的区域,占用编号为2的区域
plt.plot(-data)
plt.show()

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

subplots() 函数,它的使用方法和 subplot() 函数类似。其不同之处在于,subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象,而 subplot() 只是创建一个包含子图区域的画布。

fig , axes = plt.subplots(nrows, ncols)

nrows 与 ncols 表示两个整数参数,它们指定子图所占的行数、列数

data = np.arange(100, 200)  # 数据
fig, axes = plt.subplots(2, 2)  # 分成2x2矩阵区域,返回子图数组axes
print(axes)# ans:
[[<AxesSubplot:> <AxesSubplot:>][<AxesSubplot:> <AxesSubplot:>]]Process finished with exit code 0
data = np.arange(100, 200)  # 数据
fig, axes = plt.subplots(2, 2)  # 分成2x2矩阵区域,返回子图数组axesax1 = axes[0, 0]    # 取出第一个子视图
ax2 = axes[0, 1]
ax3 = axes[1, 0]
ax4 = axes[1, 1]ax1.plot(data)
ax2.plot(-data)
ax3.plot(2*data)
ax4.plot(-2*data)plt.show()

添加各类标签

绘图的时候我们为了使绘制的图形更加直观,我们通常会给图像添加横、纵坐标等标签,常用的标签列举如下:

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])# 绘制y=x^2曲线
plt.plot(data, data ** 2)# 绘制y=x^3曲线
plt.plot(data, data ** 3)# 添加图例
plt.legend(["y=x^2", "y=x3"])
# 在本机上显示图形
plt.show()


Tip:中文无法正常显示时添加如下代码即可~

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题

绘制常见图表

绘制直方图

plt.hist(x, bins, range, color) # 常用的参数,其他忽略

x:输入值,可以是单个数组,或者数组序列
bins:绘制条柱的个数,整数值,返回整数值+1个,默认为10
range: bins的上下范围
color:表示条柱的颜色

data = [34, 23, 45, 35, 66, 78, 16, 99]
plt.hist(data, bins=8, color='yellow')
plt.show()

绘制柱形图

plt.bar(x, height, width, color, edgecolor, align)

x:表示x轴数据
height:表示条形高度
width:表示条形宽度,默认0.8
color:表示条形颜色
edgecolor:表示条形边框颜色

# 创建图形对象
fig = plt.figure()
# 添加子图区域,参数值表示[left, bottom, width, height ]
ax = plt.subplot(1, 1, 1)
# 准备数据1
langs1 = ['C', 'C++', 'Java', 'Python', 'PHP']
students1 = [23, 17, 35, 29, 12]
# 准备数据2
langs2 = ['A', 'B', 'C', 'D', 'E']
students2 = [53, 27, 30, 22, 12]
# 绘制柱状图
ax.bar(langs1, students1, width=0.3, color='red')
# ax.bar(langs2, students2, width=0.3, color='green')
plt.show()

绘制散点图

散点图用于在水平轴和垂直轴上绘制数据点,它表示了因变量随自变量变化的趋势。通俗地讲,它反映的是一个变量受另一个变量的影响程度。

plt.scatter(x, y,s, c, marker, alpha)

x、y:表示xy轴对应的数据
s:指定点的大小
c:指定散点的颜色
marker‘:表示绘制的散点类型
alpha:表示点的透明度,0~1

x = [100, 200, 300, 400, 500, 600, 700, 800]
y = [101, 401, 501, 601,  201, 301, 701, 801]
plt.scatter(x, y)
plt.show()

绘制折线图

直接展示绘制多条折线

plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体
plt.rcParams["axes.unicode_minus"] = False  # 该语句解决图像中的“-”负号的乱码问题
# 对比两人6次考试成绩变化
x = [1, 2, 3, 4, 5, 6]
y1 = [88, 81, 79, 81, 86, 94]
y2 = [99, 88, 74, 90, 81, 75]
# 绘制折线图,添加数据点,设置点的大小
# matplotlib会自动为线条添加不同的颜色
plt.plot(x, y1, 'r', marker='.', markersize=10)
plt.plot(x, y2, 'b', marker='.', markersize=10)
plt.title('成绩对比折线图')  # 折线图标题
plt.xlabel('次数')  # x轴标题
plt.ylabel('分数')  # y轴标题
# 给图像添加注释,并设置样式
for a, b in zip(x, y1):plt.text(a, b, b, ha='center', va='bottom', fontsize=10)
for a, b in zip(x, y2):plt.text(a, b, b, ha='center', va='bottom', fontsize=10)# 绘制图例
plt.legend(['小张', '小柯'])
# 显示图像
plt.show()

绘制饼状图


y = np.array([35, 25, 25, 15])plt.pie(y,labels=['A', 'B', 'C', 'D'],  # 设置饼图标签colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"],  # 设置饼图颜色explode=(0, 0.2, 0, 0),  # 第二部分突出显示,值越大,距离中心越远autopct='%.2f%%',  # 格式化输出百分比)
plt.title("测试饼状图")
plt.show()

保存图表

plt.savefig()必须写在plt.show()前面,否则保存为空白图像

 savefig(fname,dpi=None,facecolor=“w”,edgecolor=“w”,orientation=“portrait”,papertype=None,format=None,transparent=False,bbox_inches=None,pad_inches=0.1,frameon=None,metadata=None)
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体
plt.rcParams["axes.unicode_minus"] = False  # 该语句解决图像中的“-”负号的乱码问题
# 对比两人6次考试成绩变化
x = [1, 2, 3, 4, 5, 6]
y1 = [88, 81, 79, 81, 86, 94]
y2 = [99, 88, 74, 90, 81, 75]
# 绘制折线图,添加数据点,设置点的大小
# matplotlib会自动为线条添加不同的颜色
plt.plot(x, y1, 'r', marker='.', markersize=10)
plt.plot(x, y2, 'b', marker='.', markersize=10)
plt.title('成绩对比折线图')  # 折线图标题
plt.xlabel('次数')  # x轴标题
plt.ylabel('分数')  # y轴标题
# 给图像添加注释,并设置样式
for a, b in zip(x, y1):plt.text(a, b, b, ha='center', va='bottom', fontsize=10)
for a, b in zip(x, y2):plt.text(a, b, b, ha='center', va='bottom', fontsize=10)# 绘制图例
plt.legend(['小张', '小柯'])
plt.savefig(r"../Include/jk.png")
# 显示图像
plt.show()

综合案例

  • 读取本地保存的淘宝月饼数据进行简单数据处理后进行可视化,分别生成折线图、柱形图、箱型图、饼状图
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体
plt.rcParams["axes.unicode_minus"] = False  # 该语句解决图像中的“-”负号的乱码问题
# 产品信息, 价格, 付款人数, 店铺名, 产地
df = pd.read_csv(r"E:\python\pythonProject3\venv\Include\月饼.csv")  # 读取本地csv文件数据
df_mean = df.drop(["产品信息", "店铺名"], axis=1).groupby("产地").mean().sort_values("价格", False)
fig, axes = plt.subplots(2, 2, figsize=(10, 10))
d = df_mean.价格
d.plot(ax=axes[0][0], kind='line', title='折线')
d.plot(ax=axes[0][1], kind='bar', title='柱形图')
d.plot(ax=axes[1][0], kind='box', title='箱型图')
d.plot(ax=axes[1][1], kind='pie', title='饼状图')
fig.tight_layout()  # 使图表自动调整格式
plt.savefig(r"../Include/zong.png")
plt.show()
  • 数据可视化截图

总结

本期博客我们对经过数据处理后的数据进行了可视化分析,通过我们常用的图表形式展示数据。这样一来我们就可以将枯燥的数据通过可视化的方式展示出来。
    博客内容并不复杂,可能存在遗漏,如果你发现有问题或者有遗漏,欢迎指正~~

author: KK
time :2021年12月19日16:21:22
flag:12/30

手把手学爬虫第六弹——数据可视化相关推荐

  1. 手把手学爬虫第五弹——数据清洗与数据分析

    目录 什么是数据清洗 准备工作 步入正题 使用Numpy处理数据 初识Numpy数组 创建Numpy数组 利用NumPy数组进行数据处理 数据分析工具Pandas 初识Pandas Pandas数据结 ...

  2. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  3. python画图代码大全-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  4. 上海中考分数线爬虫及使用plotly数据可视化

    上海中考分数线爬虫及使用plotly数据可视化 马上就中考了,蹭一波热度,做了一个上海市近几年中考分数线对比的爬虫,各区学校对比用了柱状图,各校历年分数线变化用了线形图 效果如下: 数据来源:微信小程 ...

  5. 手把手教你用Matplotlib进行数据可视化

    导读:Matplotlib是建立在NumPy数组上的一个多平台数据可视化库.在2002年,约翰·亨特(John Hunter)提出Matplotlib,最初的构思是设计为IPython的一个补丁,以便 ...

  6. 动手学数据分析(4)数据可视化

    什么是数据可视化? 数据可视化其实是将抽象概念进行形象性表达,将抽象语言进行具象图形可视的过程.数据可视化,不仅仅是统计图表.本质上,任何能够借助于图形的方式展示事物原理.规律.逻辑的方法都叫数据可视 ...

  7. 教你用python爬英雄联盟官网:①掌握爬虫技术;②Python数据可视化

    大家好,我是明月十四桥!! 擅长领域:python黑科技.大数据后端研发.数据仓库 今日重点: ①  掌握爬虫技术,体会python爬虫流程,可见即可爬: ②  学会使用python数据可视化. 有问 ...

  8. 爬虫+MySQL+flask+echarts数据可视化

    最近在学习数据可视化知识,就拿了小时候玩的洛克王国练了练手,爬取每个精灵的各项属性数据,存入到数据库中,并用flask框架进行可视化出来. 1.首先分析一下整个页面,所有的精灵信息存储在一个ul标签中 ...

  9. python基础学习[python编程从入门到实践读书笔记(连载六)]:数据可视化项目第17章

    文章目录 使用API end 项目结果: 使用plotly可视化github最受欢迎的python仓库: 修改后的可视化图表: 使用API 编写独立的程序,实现对获取的数据可视化.我们使用Web AP ...

最新文章

  1. 汇编和python-python与汇编
  2. 按钮更新datagridview
  3. Unity 编译apk启动出异常
  4. redis管道的使用
  5. matplotlib+numpy绘制二维条形直方图
  6. 如何在Angular.JS中打开JSON / XML文件
  7. 如果人工智能最终将毁灭人类,挽救人类你能做什么?
  8. [基础知识]在PeopleSoft中SMTP设置不生效如何查找问题
  9. vue+vuex的应用笔记
  10. 遵守java编码规范
  11. Spark交互式工具spark-shell
  12. HTML5 Notification实现浏览器通知
  13. Linux命令:ssh命令
  14. 测试职业思考:如何成为一名优秀的软件测试工程师
  15. 前端花瓣飘落特效代码
  16. dpdk内存管理分析
  17. 淘宝客引流玩法介绍(一)
  18. Winform从入门到精通(8)——RichTextBox(史上最全)
  19. Kubernetes(K8s)优势究竟是什么?
  20. 每日安全简讯20160728

热门文章

  1. 【以太网硬件十八】网卡是什么?
  2. 小米路由器linux界面,小米路由器配置ssh登录方法 | 192.168.1.1登陆页面
  3. html表格标题行边框,总结HTML 表格标签
  4. 用inception_v3提取图片的特征向量
  5. android hint属性含义,android:hint属性对TextView的影响
  6. HGETALL key
  7. 【CSDN】01-文章编辑方式
  8. 关于Xftp7的下载和安装
  9. 用过滤器实现file类实现输出目录以及子目下的结尾为.java的文件
  10. burpsuit无法抓包