失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 数据分析-Jupyter Matplotlib介绍-Matplotlib绘制图形

数据分析-Jupyter Matplotlib介绍-Matplotlib绘制图形

时间:2024-01-08 13:09:09

相关推荐

数据分析-Jupyter Matplotlib介绍-Matplotlib绘制图形

数据分析

Jupyter介绍

Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示的程序。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。

Jupyter Notebook的主要特点

① 编程时具有语法高亮、缩进、tab补全的功能。

② 可直接通过浏览器运行代码,同时在代码块下方展示运行结果。

③ 以富媒体格式展示计算结果。富媒体格式包括:HTML,LaTeX,PNG,SVG等。

④ 对代码编写说明文档或语句时,支持Markdown语法。

⑤ 支持使用LaTeX编写数学性说明。

安装Jupyter Notebook

安装Jupyter Notebook的前提是需要安装了Python(3.3版本及以上,或2.7版本)。

安装命令:pip install jupyter

版本:Python 3.x

安装命令:pip3 install jupyter

版本:Python 2.x

安装命令:pip install jupyter

换源安装

pip install jupyter-i https://pypi.tuna./simple

如果你有任何jupyter notebook命令的疑问,可以考虑查看官方帮助文档,命令如下:

jupyter notebook --help

Jupyter Notebooks的使用

如何运行 Jupyter Notebooks?

1.首先需要建立单独项目文件夹(建议名称不要包含中文)2.windows+R输入cmd进入windows终端3.切换到该文件夹路径下4.打开命令:jupyter notebook

打开笔记本后,你会看到顶部有三个选项卡:Files、Running 和 Clusters。其中,Files 基本上就是列出所有文件,Running 是展示你当前打开的终端和笔记本,Clusters 是由 IPython 并行提供的。

基础使用 Jupyter Notebooks

要打开一个新的 Jupyter 笔记本,点击页面右侧的「New」选项。

• Python3 --> 创建python file

• Text File --> 文本编辑器

• Folder --> 创建文件夹

• Teminal --> 终端(类似于Windows上的cmd)

创建python file

如图所示:

在代码上面的菜单中,你有一些操作各个单元的选项:添加、编辑、剪切、向上和向下移动单元、运行单元内的代码、停止代码、保存工作以及重启 kernel。

快捷键使用

编辑模式(按 Enter 生效),Enter --> 编辑模式

Ctrl-右: 跳到单词右边

Ctrl-删除: 删除前面的单词

Ctrl-Delete: 删除后面的单词

Ctrl-Y: 重做

Alt-U: 重新选择

Ctrl-M: 进入命令行模式

Ctrl-Shift-F: 打开命令配置

Ctrl-Shift-P: 打开命令配置

Esc: 进入命令行模式

Shift-Enter: 运行代码块, 选择下面的代码块

Ctrl-Enter: 运行选中的代码块

Alt-Enter: 运行代码块并且插入下面

Ctrl-Shift-Minus: split cell at cursor(s)

Ctrl-S: 保存并检查

下: 光标下移

上: 光标上移

Tab: 代码完成或缩进

Shift-Tab: 工具提示

Ctrl-]: 缩进

Ctrl-[: 取消缩进

Ctrl-A: 全选

Ctrl-Z: 撤销

Ctrl-/: 评论

Ctrl-D: 删除整行

Ctrl-U: 撤销选择

Insert: 切换 重写标志

Ctrl-Home: 跳到单元格起始处

Ctrl-上: 跳到单元格起始处

Ctrl-End: 跳到单元格最后

Ctrl-下: 跳到单元格最后

Ctrl-左: 跳到单词左边

命令行模式(按 Esc 生效),Esc --> 命令模式

F: 查找并且替换

Ctrl-Shift-F: 打开命令配置

Ctrl-Shift-P: 打开命令配置

Enter: 进入编辑模式

P: 打开命令配置

Shift-Enter: 运行代码块, 选择下面的代码块

Ctrl-Enter: 运行选中的代码块

Alt-Enter: 运行代码块并且插入下面

Y: 把代码块变成代码

M: 把代码块变成标签

R: 清除代码块格式

1: 把代码块变成heading 1

2: 把代码块变成heading 2

3: 把代码块变成heading 3

4: 把代码块变成heading 4

5: 把代码块变成heading 5

6: 把代码块变成heading 6

K: 选择上面的代码块

上: 选择上面的代码块

下: 选择下面的代码块

J: 选择下面的代码块

Shift-K: 扩展上面选择的代码块

Shift-上: 扩展上面选择的代码块

Shift-下: 扩展下面选择的代码块

Shift-J: 扩展下面选择的代码块

Ctrl-A: select all cells

A: 在上面插入代码块

B: 在下面插入代码块

X: 剪切选择的代码块

C: 复制选择的代码块

Shift-V: 粘贴到上面

V: 粘贴到下面

Z: 撤销删除

D,D: 删除选中单元格

Shift-M: 合并选中单元格, 如果只有一个单元格被选中

Ctrl-S: 保存并检查

S: 保存并检查

L: 切换行号

O: 选择单元格的输出

Shift-O: 切换选定单元的输出滚动

H: 显示快捷键

I,I: 中断服务

0,0: 重启服务(带窗口)

Esc: 关闭页面

Q: 关闭页面

Shift-L: 在所有单元格中切换行号,并保持设置

Shift-空格: 向上滚动

空格: 向下滚动

**实际上,大家不需要去背这些快捷键。可以进入命令模式,摁住H就可以看到快捷键了。

**

Matplotlib介绍

Matplotlib是一个Python的基础绘图库,它可与 NumPy 一起使用,代替Matlab使用

将数据进行可视化,使数据更直观使数据更加更具有说服力

Matplotlib安装

由于Matplotlib是第三方库,所以我们需要安装它才可以使用。注意,Matplotlib3.0要求python3版本才可安装使用。

安装命令:pip install matplotlib

换源安装:pip install matplotlib-i https://pypi.tuna./simple

安装可参考官网:/users/installing.html

图片与子图

Matplotlib所绘制的图位于图片(Figure)对象中。我们可以通过plt.figure生成一个新的图片:

下面展示一些内联代码片

from matplotlib import pyplot as pltfig = plt.figure()

代码展示:

import matplotlib.pyplot as plt1-子图的绘制plt.figure()plt.subplot()# plt.figure??fig = plt.figure()# plt.subplot??# plt.subplot(221)ax1 = plt.subplot(2,2,1) # 2*2 最多为4个图形 index=1 选择了第一个ax2 = plt.subplot(2,2,2)ax3 = plt.subplot(2,2,3)ax4 = plt.subplot(2,2,4)# ax5 = plt.subplot(2,2,5)# 超出报错ax2.scatter(range(5),range(5)) # 给ax2子图对象绘制散点图plt.show() # 展示图片

如图所示:

除此之外,Matplotlib包含一个便捷方法plt.subplots创建一个新的图片,然后返回包含了已生成子图对象的Numpy数组。

• plt.subplots(nrows, ncols, sharex, sharey)

• nrows子图的行数

• ncols子图的列数

• sharex 所有子图使用相同的x轴刻度

• sharey 所有子图使用相同的y轴刻度

代码展示:

2-子图的绘制plt.subplots()# plt.subplots??fig,axs = plt.subplots(2,2,sharex=True,sharey=True,figsize=(14,8)) # 2*2 nrows子图的行数 ncols子图列数 sharex,sharey 共享x,y轴axs[0,0].scatter(range(5),range(5)) # [0,0]选中第一张图axs[0,1].scatter(range(5),list(range(5))[::-1]) # [0,1] 选中第二张图# 调整间距plt.subplots_adjust(wspace=0,hspace=0)plt.show()

如图所示:

Matplotlib绘制图形

matplotlib能够绘制折线图,散点图,条形图,直方图,饼图等等。

具体可参考:/gallery/index.html

折线图

代码展示:

from matplotlib import pyplot as plt plt.plot?? #查看源码以及属性介绍x = [1,2,3,4] # 列表 array_like y = [4,2,3,1]plt.plot(x,y) # 绘制折线图plt.show()# 展示图片,释放内存

如图所示:

给折线设置颜色等

代码展示:

x = [1,2,3,4] # 列表 array_like y = [4,2,3,1]plt.plot(x,y,color="g",linestyle="--",marker="*") # 绘制折线图plt.show()# 展示图片,释放内存

plt.plot()参数使用具体可参考:

/api/_as_gen/matplotlib.axes.Axes.plot.html#matplotlib.axes.Axes.plot

练习1:假设一天中每隔两个小时的气温分别是[15,13,14.5,17,20,25,26,26,27,22,18,15],绘制图形。

变化:折线x:时间y:温度

代码展示:

# 每隔两个小时 2 4 6 8... 24x = range(0,24,2)y = [15,13,14.5,17,20,25,26,26,27,22,18,15]# 设置刻度 以x显示plt.xticks(x)# 绘制图形plt.plot(x,y)# 展示图形plt.show()

如图所示:

设置刻度为 0,0.5,1,1.5…23.5

注意:range(0,24,0.5)报错 # start stop step 不要用浮点数

[i/2 for i in range(0,48)] # 列表推导式

代码展示:

# 放大画布plt.figure(figsize=(14,8))# 每隔两个小时 2 4 6 8... 24x = range(0,24,2)y = [15,13,14.5,17,20,25,26,26,27,22,18,15]# 设置刻度 以 0,0.5,1,1.5......23.5 显示x_t = [i/2 for i in range(0,48)]plt.xticks(x_t,rotation=45)# 绘制图形plt.plot(x,y)# 展示图形plt.show()

如图所示:

设置x刻度以 0h,0.5h,1h,1.5h…23.5h 显示

代码展示:

# 放大画布plt.figure(figsize=(14,8))# 每隔两个小时 2 4 6 8... 24x = range(0,24,2)y = [15,13,14.5,17,20,25,26,26,27,22,18,15]# 设置x刻度 以 0h,0.5h,1h,1.5h......23.5h 显示# ticks:刻度# lables:标签x_t = [i/2 for i in range(0,48)]x_l = ["{}h".format(i/2) for i in range(0,48)]plt.xticks(x_t,x_l,rotation=45) # x_t刻度,x_l刻度标签# 设置y刻度 最大值最小值y_t = range(min(y),max(y)+1)plt.yticks(y_t)# 绘制图形plt.plot(x,y)# 添加x轴标签plt.xlabel("time")# 添加y轴标签plt.ylabel("temperature")# 添加标题plt.title("temperature change")# 添加网格plt.grid()# 保存图片 注意:要在show之前保存 否则:空白图 # plt.savefig("mat.png")plt.savefig("mat.jpg")# 展示图形 释放plt.show()

如图所示:

plt.figure(figsize=None,dpi=None)

生成新的图片,figsize:图片大小,dpi:透明度

plt.savefig(fname)

保存图片

plt.xticks(ticks=None)

设置x轴刻度的值

plt.yticks(ticks=None)

设置y轴刻度的值

plt.xlabel(xlabel)

设置x轴标签

plt.ylabel(ylabel)

设置y轴标签

plt.title()

设置图标题

plt.grid()

根据x轴和y轴的数值展示轴网格

练习2:如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况

列表拼接解决中文显示问题

代码展示:

import random # 内置模块 随机全局的设置方式设置matplotlib自带的字体 只能设置.ttf字体,不支持.ttc字体import matplotlibfont = {'family':'SimHei','weight':'bold','size':12}matplotlib.rc("font", **font)matplotlib.rc??设置字体法2import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)设置字体法3:局部- 相当于将字体注册到了matplotlib字体库中from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)

# x,y数据x = range(0,120)y = [random.randint(30,38) for i in range(120)] # 生成120个随机整数# 绘制图形plt.plot(x,y)# x刻度:0,10,20,30,40,50....110x_t = range(0,120,10)# 显示x刻度标签 为 十点0分 十点10分 ..十点50分 十一点0分...十一点50分x_l = ["十点{}分".format(i) for i in range(0,60,10)]x_l+=["十一点{}分".format(i) for i in range(0,60,10)]plt.xticks(x_t,x_l,rotation=45,fontproperties=font)plt.show()

如图所示:

假设大家在30岁的时候,根据自己的实际情况,统计出来了你和同桌从11岁到30岁每年交的男女朋友的数量如列表a和b,请绘制出该数据的折线图,以便分析自己和同桌每年交男女朋友的数量走势

a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]b = [1,0,3,1,2,2,2,3,1,1,1,1,1,2,1,1,2,3,2,2]

代码展示:

from matplotlib import pyplot as pltfrom matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=10)# 构建x,ymy_y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]my_cls_y = [1,0,3,1,2,2,2,3,1,1,1,1,1,2,1,1,2,3,2,2]x = range(11,31)# len(my_y) == len(x)# 绘图plt.plot(x,my_y,label="自己")plt.plot(x,my_cls_y,label="同桌")# 添加图例# 1.plt.plot()添加label属性 # 2.plt.legend() 局部指定字体 而是使用 propplt.legend(prop = font)# 刻度 11岁..30岁x_l = ["{}岁".format(i) for i in x]plt.xticks(x,x_l,fontproperties=font,rotation=45)# 添加数据标签# for x_i,y_i in zip(x,my_y):#plt.annotate(f"{y_i}",xy=(x_i,y_i),xytext=(x_i,y_i-1))# for x_i,y_i in zip(x,my_cls_y):#plt.annotate(f"{y_i}",xy=(x_i,y_i),xytext=(x_i,y_i-1))def auto_label(x_po,y_po):for x_i,y_i in zip(x_po,y_po):plt.annotate(f"{y_i}",xy=(x_i,y_i),xytext=(x_i,y_i-0.1))auto_label(x,my_y)auto_label(x,my_cls_y)# 展示图片plt.show()

如图所示:

添加注释文本 annotate

text 是注释的文本xy 是需要注释的点的坐标xytext 是注释文本的坐标arrowprops 是箭头的样式属性

代码展示:

# plt.annotate??from matplotlib import pyplot as pltimport randomli = [random.randint(10,30) for i in range(10)]li# 结果为:[28, 26, 26, 22, 14, 22, 14, 13, 17, 19]y = li # [28, 26, 26, 22, 14, 22, 14, 13, 17, 19]x = range(10) # [0,1,2,.....9]plt.plot(x,y,marker="*")# plt.annotate("28",xy=(0,28),xytext=(-0.3,28))# plt.annotate("28",xy=(0,28),xytext=(-0.3,0),arrowprops={"width":2})# 实现:将每个点都使用上数据标签# 思路:什么在变?对应的参数(坐标)在变# (0,28) (1,26)# plt.annotate("28",xy=(0,28),xytext=(-0.3,28))for x_i,y_i in zip(x,y):plt.annotate(f"{y_i}",xy=(x_i,y_i),xytext=(x_i,y_i-1))plt.show()

如图所示:

散点图

散点图介绍

散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式

特点:判断变量之间是否存在数量关联趋势,表示离群点(分布规律)

如图所示:

散点图绘制

散点图通过scatter()函数绘制

plt.scatter(x,y)# 以默认的形状颜色等绘制散点图

假设通过爬虫你获取到了长沙4,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间变化的某种规律

a = [11,17,16,11,12,11,12,13,10,14,8,13,12,15,14,17,18,21,16,17,30,14,15,15,15,19,21,22,22,22,23]b = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,15,10,11,13,12,13,6]

代码展示:

# plt.scatter??# x,yy_4 = [11,17,16,11,12,11,12,13,10,14,8,13,12,15,14,17,18,21,16,17,30,14,15,15,15,19,21,22,22,22,23]y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,15,10,11,13,12,13,6]x = range(1,32) # 4,10共享x 31天# 绘制图形plt.scatter(x,y_4)plt.scatter(x,y_10)plt.show()

如图所示:

优化散点图

代码展示:

# 优化:4,10月份的分布分开# x,yy_4 = [11,17,16,11,12,11,12,13,10,14,8,13,12,15,14,17,18,21,16,17,30,14,15,15,15,19,21,22,22,22,23]y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,15,10,11,13,12,13,6]x_4 = range(1,32) # 1~31x_10 = range(51,82) # 20+31 ~ 31+31+20# 绘制图形plt.scatter(x_4,y_4)plt.scatter(x_10,y_10)# 刻度 四月1号 四月31号 十月1号..十月31号x_t = list(x_4)+list(x_10)x_l = ["四月{}号".format(i) for i in x_4]x_l += ["十月{}号".format(i-50) for i in x_10] # 51-50,81-50plt.xticks(x_t[::4],x_l[::4],fontproperties=font,rotation=45)plt.show()

如图所示:

条形图

条形图介绍

条形图是用宽度相同的条形的高度或长短来表示数据多少的图形。条形图可以横置或纵置,纵置时也称为柱形图。

特点

• 能够使人们一眼看出各个数据的大小。

• 易于比较数据之间的差别。

条形图绘制方法:

条形图通过bar()函数绘制

plt.bar(x, height)# 绘制以x为x轴位置,height为y轴位置的竖条形图

练习

假设你获取到了内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据

a = [“流浪地球”,“复仇者联盟4:终局之战”,“哪吒之魔童降世”,“疯狂的外星人”,“飞驰人生”,“蜘蛛侠:英雄远征”,“扫毒2天地对决”,“烈火英雄”,“大黄蜂”,“惊奇队长”,“比悲伤更悲伤的故事”,“哥斯拉2:怪兽之王”,“阿丽塔:战斗天使”,“银河补习班”,“狮子王”,“反贪风暴4”,“熊出没”,“大侦探皮卡丘”,“新喜剧之王”,“使徒行者2:谍影行动”,“千与千寻”]b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22] 单位:亿

代码展示:

# 构建x,heighta = ["流浪地球","复仇者联盟4:终局之战","哪吒之魔童降世","疯狂的外星人","飞驰人生","蜘蛛侠:英雄远征","扫毒2天地对决","烈火英雄","大黄蜂","惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班","狮子王","反贪风暴4","熊出没","大侦探皮卡丘","新喜剧之王","使徒行者2:谍影行动","千与千寻"]b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22]# 放大画布plt.figure(figsize=(14,8))# 柱状图# width 调整柱子的宽度 默认0.8# bottom y的起始值改变了 堆叠图# align 默认为:center居中 设置为:edge边缘 取决于width的正负 正:右边 负:左边plt.bar(a,b,width=-0.3,bottom=10,align="edge")# 设置刻度plt.xticks(fontproperties=font,rotation=90)plt.show()

如图所示:

分组条形图

代码展示:

import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)# 构建x,heightfruits = ["苹果","梨子","车厘子"]Q1_sales = [1000,800,3000]Q2_sales = [1200,700,2800]# 柱子的对应索引位置 [0,1,2]# 设置柱子宽度width = 0.35# rects1 = plt.bar(list(range(len(fruits))),Q1_sales,width)# rects2 = plt.bar(list(range(len(fruits))),Q2_sales,width)# 蓝黄柱子宽度都为0.35 怎么使蓝色显示左边 黄色显示右边# 位置左移width/2 位置-width/2 [0-width/2,1-width/2,2-width/2]po_l = [i-width/2 for i in list(range(len(fruits)))]plt.bar(po_l,Q1_sales,width,label="Q1")po_r = [i+width/2 for i in list(range(len(fruits)))]plt.bar(po_r,Q2_sales,width,label="Q2")# 设置图例 plt.legend()# 数据标签auto_label(po_l,Q1_sales)auto_label(po_r,Q2_sales)plt.xticks(list(range(len(fruits))),fruits)plt.show()

如图所示:

堆叠条形图

没有封装相应的接口

代码展示:

# 构建x,heightfruits = ["苹果","梨子","车厘子"]Q1_sales = [1000,800,3000]Q2_sales = [1800,200,2800]plt.bar(fruits,Q1_sales,width=0.5,label="Q1")plt.bar(fruits,Q2_sales,width=0.5,bottom=Q1_sales,label="Q2")plt.legend()plt.show()

如图所示:

水平条形图

代码展示:

# plt.barh??a = ["流浪地球","复仇者联盟4:终局之战","哪吒之魔童降世","疯狂的外星人","飞驰人生","蜘蛛侠:英雄远征","扫毒2天地对决","烈火英雄","大黄蜂","惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班","狮子王","反贪风暴4","熊出没","大侦探皮卡丘","新喜剧之王","使徒行者2:谍影行动","千与千寻"]b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22]plt.figure(figsize=(14,8))plt.barh(a,b,height=0.5)plt.show()

如图所示:

如果觉得《数据分析-Jupyter Matplotlib介绍-Matplotlib绘制图形》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。