HuaPu在学:机器学习——数据科学库【matplotlib】

news/2024/10/30 23:28:00/

数据科学库【matplotlib】


文章目录

  • 数据科学库【matplotlib】
  • 前言
  • 一、数据分析介绍及环境安装
    • 1.为什么要数据分析???
    • 2.环境安装
  • 二、matplotlib
    • 1.为什么学习matplotlib???
    • 2.绘制折线图
    • 3.绘制散点图
    • 3.绘制条形图
    • 4.绘制直方图
    • 5.更多绘图工具


前言

“花圃记录学习日常”。刚开始走上机器学习之路,以下都是入门基础内容的一些要点笔记。


一、数据分析介绍及环境安装

1.为什么要数据分析???

-》岗位要求
-》python数据科学的基础
-》机器学习的基础

数据分析实际上就是用适当的方法对收集来的大量数据进行分析,帮助人们作出判断,以便采取行动。

数据分析流程
在这里插入图片描述

2.环境安装

conda环境安装
在这里插入图片描述

conda集成了很多平台用到的环境,conda可以非常容易的安装以往不好安装的模块,几乎百分之百可以成功。
我们说实际上一个项目是在一个环境中去做的,我们不是看项目指定什么,而是看我们做项目用到的环境,然后将环境进行requirments说明。
jupyter notebook
在这里插入图片描述

实际上它是一款编程、文档、笔记、展示软件

二、matplotlib

1.为什么学习matplotlib???

-》数据的可视化,直观呈现
-》使得数据更加客观,更具有说服力

matplotlib是最为流行的 python底层绘图库,主要做数据可视化图表
,实际上名字就是取材于matlab,仿照matlab的实现。

2.绘制折线图

示例:

from matplotlib import pyplot as pltx=range(2,26,2)
y=[15,13,14.5,17,20,25,26,26,27,22,18,15]
plt.plot(x,y)
plt.show()
输出结果:

在这里插入图片描述
那么显然上述的图像所呈现的信息是不完整的,我们可以 do more!

1.设置图片大小(想要一个高清无码大图)
2.保存到本地
3.描述信息,比如x轴和y轴表示什么,这个图表示什么
4.调整x或者y的刻度的间距
5.线条的样式(比如颜色,透明度等)
6.标记出特殊的点(比如告诉别人最高点和最低点在哪里)
7.给图片添加一个水印(防伪,防止盗用)

from matplotlib import pyplot as pltx=range(2,26,2)
y=[15,13,14.5,17,20,25,26,26,27,22,18,15]# 设置图像的尺寸,figsize表示宽*高,dpi表示每英寸的像素点个数
plt.figure(figsize=(20,8),dpi=80)# 调整x,y刻度大小
# plt.xticks()要注意的是()传入的是什么范围以什么步长进行变化
# plt.xticks([i/2 for i in range(4,49)])
plt.xticks(range(2,25))
# plt.yticks()要注意的是()传入的是什么范围以什么步长进行变化,尤其是范围,一般y不是顺序大小,就需要用到min(y)与max(y)这样的函数,注意range()右端取不到
plt.yticks(range(min(y),max(y)+1))# 绘图
plt.plot(x,y)# 保存,保存要注意的是在绘图plot执行之后,注意./ 表示保存在当前目录下
# .png可以保存为 .svg矢量形式
plt.savefig("./savefig_1.png")#显示
# plt.show()

在这里插入图片描述
示例:
在这里插入图片描述

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")x=range(11,31)
y=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_1=[1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]plt.figure(figsize=(20,8),dpi=80)
plt.xticks(range(11,31,1),["{}岁".format(i) for i in range(11,31,1)][::1],fontproperties=my_font)
plt.yticks(range(0,9),["{}个".format(i) for i in range(0,9)],fontproperties=my_font)
plt.xlabel("年龄",fontproperties=my_font)
plt.ylabel("恋爱次数",fontproperties=my_font)
plt.title("恋爱走势",fontproperties=my_font)
plt.grid(alpha=0.5,linestyle=":") #alpha是透明度参数,1是不透明plt.plot(x,y,label="自己",color="r",linestyle=":",linewidth=2)
plt.plot(x,y_1,label="同桌",color="b",linestyle="--",linewidth=2)
plt.legend(prop=my_font,loc="best")
# 	best
# 	upper right
# 	upper left
# 	lower left
# 	lower right
# 	right
# 	center left
# 	center right
# 	lower center
# 	upper center
# 	center
plt.savefig("./save_2.png")

在这里插入图片描述

plt.grid(alpha=0.5,linestyle=":") #alpha是透明度参数,1是不透明plt.plot(x,y,label="自己",color="r",linestyle=":",linewidth=2)
plt.plot(x,y_1,label="同桌",color="b",linestyle="--",linewidth=2)
plt.legend(prop=my_font,loc="best")

plt.grid()是开启网格,其中参数alpha是表示网格透明度,1为不透明,linestyle为线形

plt.plot()中参数label是表示给图加入图例,color表示选取颜色,这里的颜色可以是一些常见英文单词,也可以去找颜色对应的十六进制码,linestyle线形,linewidth表示线宽

plt.legend(prop=my_font,loc=“best”)尤为注意,这其实与label对应的,加入图例后,设置中文格式表示,需要用它,注意其他地方的参数都是fontproperties等于我们的实例对象my_font,而这里是prop,后面的loc代表图例的位置,注释中右对应的字符

we have done!
绘制折线图(plt.plot)
设置了图片大小(plt.figure)
实现了图片保存(plt.saveflg)
设置了xy轴上的刻度和字符串(xticks)
解决了刻度稀疏和密集的问题(xticks)
【注意这里调整间距传入的参数是包含数字的可迭代对象】
【注意这里的添加字符串到轴上,需要的参数是与间距一一对应的另一个可迭代对象】
设置了标题,xy轴的lable(title,xlable,ylable)
设置了字体(font_manager. fontProperties,matplotlib.rc)
在一个图上绘制多个图形(plt多次plot即可)
为不同的图形添加图例

在这里插入图片描述

3.绘制散点图

matplotlib能够绘制折线图,散点图,柱状图,直方图,箱线图,饼图等(代码完全可以去找官方代码的demo)
在这里插入图片描述
示例:
在这里插入图片描述

from matplotlib import pyplot as plt
from matplotlib import font_managermy_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")y_3=[11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,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,17,10,11,13,12,13,6]x_3=range(1,32)
x_10=range(41,72)#设置图片尺寸
plt.figure(figsize=(20,8),dpi=80)#设置刻度
_x=list(x_3)+list(x_10)
_x_labels=["3月{}日".format(i) for i in _x[:32]]+["10月{}日".format(i-40) for i in _x[33:]]
plt.xticks(_x[::3],_x_labels[::3],rotation=45,fontproperties=my_font)# 设置信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度",fontproperties=my_font)
plt.title("气温走势",fontproperties=my_font)# 绘图,并设置图例,格式
plt.scatter(x_3,y_3,label="3月份",linestyle=":",linewidths=2)
plt.scatter(x_10,y_10,label="10月份",linestyle=":",linewidths=2)
plt.legend(loc="upper left",prop=my_font)# 保存
plt.savefig("./save_3.png")

在这里插入图片描述

3.绘制条形图

示例:
在这里插入图片描述

# 绘制竖着的条形图
# 导入模块
from matplotlib import pyplot as plt
from matplotlib import font_manager# 实例化设置中文格式
my_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")# 数据
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队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]# 设置图片尺寸
plt.figure(figsize=(20,15),dpi=100)# 设置刻度
plt.xticks(range(len(a)),a,rotation=90,fontproperties=my_font)
plt.xlabel("电影",fontproperties=my_font)
plt.ylabel("票房(单位:亿元)",fontproperties=my_font)
plt.title("2017电影票房",fontproperties=my_font)# 打开网格
plt.grid(alpha=0.4)
# 绘图
plt.bar(range(len(a)),b,width=0.3,color="orange")
# 这里注意的是竖着的width表示的是条形的宽度,而横着的条形图是不同的# 保存
plt.savefig("./save_4.png")

在这里插入图片描述

# 绘制横着的条形图
# 导入模块
from matplotlib import pyplot as plt
from matplotlib import font_manager# 实例化设置中文格式
my_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")# 数据
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队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]
# ------------------------与之前竖着的条形图基本相同----------------------------------------------
# 设置图片尺寸
plt.figure(figsize=(20,8),dpi=100)# 设置刻度
plt.yticks(range(len(a)),a,fontproperties=my_font)
# plt.ylabel("电影",fontproperties=my_font)
plt.xlabel("票房(单位:亿元)",fontproperties=my_font)
plt.title("2017电影票房",fontproperties=my_font)# 打开网格
plt.grid(alpha=0.4)
# 绘图
plt.barh(range(len(a)),b,height=0.3,color="orange")
# 这里注意的横着的条形图是height
# 这里用的函数是barh# 保存
plt.savefig("./save_4_1.png")

在这里插入图片描述
示例(绘制多个条形图):在这里插入图片描述

# 绘制横着的条形图
# 导入模块
from matplotlib import pyplot as plt
from matplotlib import font_manager# 实例化设置中文格式
my_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")# 数据
a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]x_14=list(range(len(a)))
x_15=[i+0.2 for i in x_14]
x_16=[i+0.4 for i in x_14]# 设置图片尺寸
plt.figure(figsize=(20,8),dpi=100)# 设置刻度
plt.xticks(x_15,a,fontproperties=my_font)
plt.xlabel("电影",fontproperties=my_font)
plt.ylabel("票房",fontproperties=my_font)
plt.title("电影票房",fontproperties=my_font)# 打开网格
plt.grid(alpha=0.4)
# 绘图
plt.bar(x_14,b_14,label="2017年09月14日",width=0.2,color="orange")
plt.bar(x_15,b_15,label="2017年09月15日",width=0.2,color="blue")
plt.bar(x_16,b_16,label="2017年09月16日",width=0.2,color="green")# 设置图例
plt.legend(loc="upper right",prop=my_font)# 保存
plt.savefig("./save_5.png")

在这里插入图片描述一次要绘制多个图在一起,比如之前的两个例子,散点图和上方的柱状图,那么这个时候,只需要调用多次相应的plt.scatter、plt.bar绘制命令,但相应的我要将横坐标进行移动不能重合,也要注意宽度的问题。
以plt.bar(x,y)为例子,实际上,这里面的x,y确实是可迭代的对象,只是数量,取什么x对应什么y
而已,那么把握整个x轴或y轴的是plt.xstick与plt.xstick
也就是说我设置好了一个取值步长,范围,我只需要将其余的做相同的步长,但每个x都平移以至不与之重合。
在这里插入图片描述
在这里插入图片描述

4.绘制直方图

示例:
在这里插入图片描述

from matplotlib import pyplot as plt
from matplotlib import font_managermy_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")a=[131,  98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114,119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99,136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144,105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123,117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116,108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125,138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102,123,107,143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123,116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123, 111, 110, 111,100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149,122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114,133, 137,  92,121, 112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113,134, 106, 144, 110,137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94,146, 133, 101,131, 116, 111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]plt.figure(figsize=(20,8),dpi=100)bin_width=3
num_bin=(max(a)-min(a))//bin_widthplt.grid(alpha=0.8)
plt.xticks(range(min(a),max(a)+bin_width,bin_width))
# plt.hist(a,num_bin)plt.hist(a,num_bin,density=True)
# 这里是绘制频率直方图,注意的是,新的matplotlib中density=True,代替了norms=Trueplt.savefig("./save_6.png")

在这里插入图片描述
绘制直方图,这里可能会有疑问说,直方图与条形图长得一样,不是一个东西吗???事实上,长得确实一样,但表示表示的内容确实相差的,条形图表示的内容是离散的什么是离散的呢,就比如说是电影、水果等这些种类问题,而直方图表示的连续的量,比如说是时间、距离。

在直方图的绘制方法中我们调用的是plt.hist,这其中的参数是我们需要停机的序列即数据,要将这些数据分成几组,调用会自动的生成我们的纵轴,后面加上一个参数(新版matplotlib)是density=True,即可绘制频率直方图。

在这里插入图片描述
示例:
在这里插入图片描述
这个例子可以绘制成直方图吗???显然是不可以的,题目中的数据已经是完成统计之后的了,那么我们就没办法调用hist去生成,因为hist我们使用的是原始的数据,当然,事实上我们可以调整条形图让我们的统计结果变成神似直方图的图形。

from matplotlib import pyplot as plt
from matplotlib import font_managermy_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")interval = [0,5,10,15,20,25,30,35,40,45,60,90]
width = [5,5,5,5,5,5,5,5,5,15,30,60]
quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]plt.figure(figsize=(20,8),dpi=100)_x=[i-0.5 for i in range(len(interval)+1)]
_x_labels=interval+[150]plt.xticks(_x,_x_labels)
plt.bar(range(len(interval)),quantity,width=1)plt.grid(alpha=0.5)plt.savefig("./save_7.png")

在这里插入图片描述

5.更多绘图工具

matplotlib使用流程

明确问题
选择图形的呈现方式
准备数据
绘图和图形完善

后期就是利用我们的numpy和pandas去处理数据,获取数据,然后matpkotlib去数据可视化,但实际上它用的并不是很多,百度ECharts等前端的绘图工具也是很多的。

应该选择那种图形来呈现数据
matplotlib.plot(x,y)
matplotlib.bar(x,y)
matplotlib.scatter(x,y)
matplotlib.hist(data,bins,normed)
xticks和yticks的设置
label和titile,grid的设置
绘图的大小和保存图片

plotly:可视化工具中的github,相比于matplotlib更加简单,图形更加漂亮,同时兼容matplotlib和pandas

使用用法:简单,照着文档写即可

文档地址: https://plot.ly/python/


http://www.ppmy.cn/news/276491.html

相关文章

CVPR2022论文列表(中英对照)

Cascade Transformers for End-to-End Person Search用于端到端人员搜索的级联变压器 Compositional Temporal Grounding with Structured Variational Cross-Graph Correspondence Learning结构化变分跨图对应学习的组合时间基础 Long-Tailed Recognition via Weight Balancin…

【数据可视化】第二章——基于matplotlib的数据可视化

课程代码链接:https://pan.baidu.com/s/1OyzTC-lCwhAOtObyHfA–Q?pwdabcd 提取码:abcd 目录 系列课程学习目标1. 基于matplotlib的数据可视化2 matplotlib.pyplot函数库简介3 matplotlib.pyplot相关函数简介3.1 plt.plot(x, y, format_string, **kwargs…

大新闻|高通将为Meta定制VR芯片,Quest端Beat Saber售出650万份

本周大新闻,AR方面,苹果申请多个含“Reality”的商标;Snap裁员20%业务调整,减少Spectacles投资;WebXR标准组主席加入苹果;美军IVAS新增360环境感知功能;Magic Leap 2全局调光demo公布。 VR方面…

还在用chatGPT聊天?《元宇宙2086》已开始用AIGC做漫画连载了!

ChatGPT 是由 OpenAI开发的一个人工智能聊天机器人程序,于 2022 年 11 月推出。该程序使用基于 GPT-3.5架构的大型语言模型并通过强化学习进行训练。 ChatGPT 目前仍以文字方式互动,而除了可以透过人类自然对话方式进行交互,还可以用于相对复…

联想乐Pad A1入手!开箱图片鉴赏(点击打开高清大图)

乐Pad A1 毫无疑问是最近关注度最高的平板电脑之一。乐Pad A1 售价仅为1000元人民币,价格相当的低,大多数消费者都可以接受。其次还挂着联想的品牌,确实又增加了不少吸引力。雷锋网已经收到了联想的这款千元平板,现在将开箱与网友…

荣耀智慧屏:AI与IoT碰撞而生的“变形金刚”

这两天,鸿蒙系统与荣耀智慧屏,绝对是刷屏般的存在。 但有些读者或许会遇到这样的问题:荣耀智慧屏一次性放出了太多新技术和新能力,颇有眼花缭乱之感。到底如何理解荣耀智慧屏“做未来的电视”这件事,这款产品对电视产业…

【Protobuf速成指南】enum类型的使用

文章目录 2.1枚举类型一、如何定义枚举类型?二、语法规范三、重定义问题四、enum类型相关函数五、Contact 2.1 改写六、总结 2.1枚举类型 本系列文章将通过对通讯录项目的不断完善,带大家由浅入深的学习Protobuf的使用。这是Contacts的2.1版本&#xff0…

3.多线程之JUC并发编程0

1.学习方法 java1.8才有juc 面试高频问 源码官方文档 2.什么是juc 三个包 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks 介绍 Callable性能比Runnable高,并且Runnable没有返回值进程和线程 进程: 一个程序比如QQ.exe 线程 在QQ里面同时打字和…