python---数据可视化篇

news2024/9/24 13:21:24

目录

1.matplotlib简介

2.安装并且导入对应的模块

3.设置中文字体

4.创建画布

5.绘制折线图

6.对于折线图的美化

7.散点图的绘制

8.双y轴叠加图

9.簇形柱状图

10.百分比堆积柱状图 

11.绘制多个子图(一个画布上面)


1.matplotlib简介

matplotlib是Python的基本绘图模块,包含了大量的工具。

我们可以使用matplotlib创建各种图像,包括简单的折线图、柱状图等,甚至是复杂的三维图像。

matplotlib模块里有一个非常方便的子模块:pyplot,我们之后要绘制的图像主要都是依赖于这个子模块~

2.安装并且导入对应的模块

安装的时候,使用的是:    pip install matplotlib    指令

和以前导入模块的方法略有不同,我们在导入matplotlib模块时,使用的是matplotlib.pyplot,可以理解为导入matplotlib模块下最常用的pyplot子模块。

通常,会使用 plt 作为matplotlib.pyplot的简写,方便以后调用。

# TODO 使用import导入matplotlib模块下的pyplot子模块
# 并使用 plt 作为该模块的简写
import matplotlib.pyplot as plt

3.设置中文字体

像下面的这个情况之所以会出现,原因就是我们对于这个字体的设置没有成功,我们需要根据自己的操作系统去设置对应的字体;

解决中文不显示的问题,我们可以在导入matplotlib.pyplot后,在代码中对plt.rcParams["font.sans-serif"]进行赋值,来自定义字体。

在本地运行时,如果是Windows系统,可以把字体设置成 SimHei ;

如果是macOS系统,可以把字体设置为 Arial Unicode MS 。

# 导入matplotlib.pyplot,并使用"plt"作为该模块的简写
import matplotlib.pyplot as plt

# TODO 将字体设置为SimHei,以windows作为例子
plt.rcParams["font.sans-serif"] = "SimHei"

4.创建画布

# 导入matplotlib.pyplot,并使用"plt"作为该模块的简写
import matplotlib.pyplot as plt

# 通过 rcParams 参数将字体设置为 SimHei
plt.rcParams["font.sans-serif"] = "SimHei"

# TODO 使用plt.figure()函数创建画布
# 添加参数figsize设置画布大小为(4,3)
# 添加参数facecolor设置画布颜色为'blue'
plt.figure(figsize=(4,3),facecolor='blue')

创建画布之后,我们的图形并不会显示出来,我们想要图片显示出来,需要使用plt.show()函数 

5.绘制折线图

我们首先设定一个下面的场景:每一月的每层楼的销售书的数据,来回根据这个数据进行折线图的绘制;

# 导入matplotlib.pyplot,并使用"plt"作为该模块的简写
import matplotlib.pyplot as plt
# 导入pandas,并使用"pd"作为该模块的简写
import pandas as pd

# 读取路径为 "/Users/yequ/书店每月销量数据.csv" 的CSV文件,并将结果赋值给变量data
data = pd.read_csv("/Users/yequ/书店每月销量数据.csv")

# 通过 rcParams 参数将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"

# TODO 使用plt.plot()函数
# 以data["month"]为x轴的值和data["sum"]为y轴的值,绘制折线图
plt.plot(data["month"],data["sum"])

# TODO 使用plt.show()函数显示图像
plt.show()

这个就是先导入数据,plot函数的第一个参数就是我们的月份,第二个参数就是我们的总计的销售量 ;

6.对于折线图的美化

# 导入matplotlib.pyplot,并使用"plt"作为该模块的简写
import matplotlib.pyplot as plt
# 导入pandas,并使用"pd"作为该模块的简写
import pandas as pd

# 读取路径为 "/Users/yequ/书店每月销量数据.csv" 的CSV文件,并将结果赋值给变量data
data = pd.read_csv("/Users/yequ/书店每月销量数据.csv")

# 通过 rcParams 参数将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"

# 使用plt.plot()函数
# 以data["month"]为x轴的值和data["sum"]为y轴的值,将颜色设置为"orange","o"作为标记点的样式
# "每月总销量"作为图例,绘制折线图
plt.plot(data["month"],data["sum"],color="orange",marker="o",label="每月总销量")

# TODO 使用plt.xlabel()函数,将x轴标题设置为"月份"
plt.xlabel("月份")
# TODO 使用plt.ylabel()函数,将y轴标题设置为"销量"
plt.ylabel("销量")
# TODO 使用plt.title()函数,将图表标题设置为"2019年8月至2020年7月书店每月销量走势"
plt.title("2019年8月至2020年7月书店每月销量走势")

# 使用plt.legend()函数显示图例
plt.legend()
# 使用plt.show()函数显示图像
plt.show()
  1. color是用来设置这个曲线的颜色;
  2. marker是用来表示这个曲线上面的标记点的形状;
  3. label是用来设计这个图例的,表明这个标记代表什么;legend函数显示图例
  4. xlabel,ylabel分别对于这个x,y轴进行说明,title就是这个折线图的题目说明;
  5. 这个地方顺便说明一下这个柱状图:使用plt.bar函数绘制,也是使用的xlabel和ylabel进行表示这个横纵坐标的含义,使用width进行这个柱状图的宽度的设置;

7.散点图的绘制

下面这个就是散点图的一个场景,绘制的是这个销量和广告费用的关系

其实可视化这个专题,都是大同小异:

# 导入matplotlib.pyplot,并使用"plt"作为该模块的简写
import matplotlib.pyplot as plt
# 导入pandas,并使用"pd"作为该模块的简写
import pandas as pd

# 读取路径为 "/Users/yequ/书店图书销量和广告费用.csv" 的CSV文件,并将结果赋值给变量data
data = pd.read_csv("/Users/yequ/书店图书销量和广告费用.csv")

# 通过 rcParams 参数将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"

# TODO 使用plt.scatter()函数
# 以data["ads_fee"]为x轴的值和data["sales"]为y轴的值,绘制散点图
plt.scatter(data["ads_fee"],data["sales"])

# TODO 使用plt.xlabel()函数,将x轴标题设置为"广告费用"
plt.xlabel("广告费用")
# TODO 使用plt.ylabel()函数,将y轴标题设置为"销量"

plt.ylabel("销量")
# 使用plt.show()函数显示图像
plt.show()
  • 导入模块
  • 读取文件内容
  • 设置字体
  • scatter函数用来绘制散点图
  • xlabel和ylabel分别表示的就是横纵坐标 

8.双y轴叠加图

实际上这个图像需要我们的两个因变量都和这个自变量x有关系,这样的话,随着这个x的变化,这个两个y都可以有自己的变化,方便我们查看这个走势;

 

# 导入matplotlib.pyplot,并使用"plt"作为该模块的简写
import matplotlib.pyplot as plt

# 导入pandas,并使用"pd"作为该模块的简写
import pandas as pd

# 使用pd.read_csv()函数
# 读取路径为 "/Users/yequ/每月曝光量和转化率.csv" 的CSV文件,并赋值给变量data
data = pd.read_csv("/Users/yequ/每月曝光量和转化率.csv")

# 通过给 plt.rcParams["font.sans-serif"] 赋值
# 将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"

# TODO 使用plt.bar()函数
# 以data["month"]为x轴的值,data["exposure"]为y轴的值
# 绘制曝光量的柱状图

plt.bar(data["month"],data["exposure"])
# TODO 使用plt.twinx()函数,添加另一个y轴
plt.twinx()

# TODO 使用plt.plot()函数
# 以data["month"]为x轴的值,data["CVR"]为y轴的值
# 绘制转化率的折线图
plt.plot(data["month"],data["CVR"])

# 使用plt.show()函数显示图像
plt.show()
  • bar绘制柱状图,plot绘制折线图;
  • twinx用来增加一个y轴;
  • 我们在一个图里面绘制两个图像,如果都设置一个图例,就会出现下面的问题:

存在一个问题:柱状图和折线图的图例重合在了一起。

如果在绘图的时侯不设置图例位置,那么matplotlib会自动在图像中选择最合适的位置。

所以,柱状图和折线图的图例都被matplotlib模块放在了右上角,产生了重叠。 

# TODO 使用plt.legend()函数和loc参数,将图例显示在左上角"upper left"
plt.legend(loc="upper left")

9.簇形柱状图

这个图形就是对于一个维度上面的三个数据进行综合展示,比如和这个销售数据,同样是1月份的销售数据,可以同时显示出来2022年的1月,2023年的1月,2024年的1月;

# 导入matplotlib.pyplot,并使用"plt"作为该模块的简写
import matplotlib.pyplot as plt
# 导入pandas,并使用"pd"作为该模块的简写
import pandas as pd

# 使用pd.read_csv()函数
# 读取路径为 "/Users/yequ/书店每月销量数据.csv" 的CSV文件,并赋值给变量data
data = pd.read_csv("/Users/yequ/书店每月销量数据.csv")

# 通过给 plt.rcParams["font.sans-serif"] 赋值
# 将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"

# TODO 对data变量使用plot.bar()函数绘制指定簇形柱状图
data.plot.bar("month",["first_floor","second_floor","third_floor"])

# 使用plt.show()函数显示图像
plt.show()
  • plot.bar就是用来绘制这个簇形柱状图的,第一个参数就是横坐标,第二个参数就是一个列表,表示的就是对个需要同时展示的结果;

10.百分比堆积柱状图 

# 导入matplotlib.pyplot,并使用"plt"作为该模块的简写
import matplotlib.pyplot as plt
# 导入pandas,并使用"pd"作为该模块的简写
import pandas as pd

# 使用pd.read_csv()函数
# 读取路径为 "/Users/yequ/书店每月销量数据百分比.csv" 的CSV文件,并赋值给变量data
data = pd.read_csv("/Users/yequ/书店每月销量数据百分比.csv")

# 通过给 plt.rcParams["font.sans-serif"] 赋值
# 将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"

# TODO 使用plot.bar()函数
# 根据data变量,以"month"为x轴,["一楼","二楼","三楼"]为y轴
# 绘制百分比堆积柱状图
data.plot.bar("month",["一楼","二楼","三楼"],stacked=True)

# 使用plt.show()函数显示图像
plt.show()
  • stacked=True会使DataFrame中每一行的值垂直堆叠放置,形成堆积柱状图。
  • 效果展示: 

11.绘制多个子图(一个画布上面)

# 导入matplotlib.pyplot,并使用"plt"作为该模块的简写
import matplotlib.pyplot as plt
# 导入pandas,并使用"pd"作为该模块的简写
import pandas as pd

# 读取路径为 "/Users/yequ/书店每月销量数据.csv" 的CSV文件,并将结果赋值给变量data
data = pd.read_csv("/Users/yequ/书店每月销量数据.csv")
# 读取路径为 "/Users/yequ/书店图书销量和广告费用.csv" 的CSV文件,并将结果赋值给变量df
df = pd.read_csv("/Users/yequ/书店图书销量和广告费用.csv")

# 通过 rcParams 参数将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"

# 使用plt.subplot()函数添加4个子图
# 子图有两行两列
# 选择序号为1子图
plt.subplot(2,2,1)
# 使用plt.plot()函数绘制折线图
plt.plot(data["month"],data["sum"])
# TODO 使用plt.xticks()函数旋转x轴的刻度至90度
plt.xticks(rotation=90)

# 选择序号为2子图
plt.subplot(2,2,2)
# 使用plt.scatter()函数
# 以df["ads_fee"]为x轴的值和df["sales"]为y轴的值,绘制散点图
plt.scatter(df["ads_fee"],df["sales"])

# 选择序号为3的子图
plt.subplot(2,2,3)

# 选择序号为4子图
plt.subplot(2,2,4)

# TODO 使用plt.tight_layout()函数来调整子图布局
plt.tight_layout()

# 使用plt.show()函数显示图像
plt.show()
  • plt.tight_layout这个就是为了调整我们的子图的布局情况;
  • suplot函数用来绘制子图,前面的两个参数表示的是这个子图的行数和列数,第三个参数表示的就是这个子图位于那一个顺序上面;
  • xticks(rotation=90)这个是为了旋转我们的x轴说明文字的位置,不让我们的下面的子图遮挡x的说明;
  • 由于pandas模块不能像matplotlib.pyplot一样默认将图像绘制到当前的子图坐标轴上,所以需要传入ax=plt.gca(),来确保图像绘制在当前子图的坐标轴中。
  • # 导入matplotlib.pyplot,并使用"plt"作为该模块的简写
    import matplotlib.pyplot as plt
    # 导入pandas,并使用"pd"作为该模块的简写
    import pandas as pd
    
    # 读取路径为 "/Users/yequ/书店每月销量数据.csv" 的CSV文件,并将结果赋值给变量data
    data = pd.read_csv("/Users/yequ/书店每月销量数据.csv")
    # 读取路径为 "/Users/yequ/书店图书销量和广告费用.csv" 的CSV文件,并将结果赋值给变量df
    df = pd.read_csv("/Users/yequ/书店图书销量和广告费用.csv")
    # 使用pd.read_csv()函数
    # 读取路径为 "/Users/yequ/书店每月销量数据百分比.csv" 的CSV文件,并赋值给变量percentData
    percentData = pd.read_csv("/Users/yequ/书店每月销量数据百分比.csv")
    
    # 通过 rcParams 参数将字体设置为 Arial Unicode MS 
    plt.rcParams["font.sans-serif"] = "Arial Unicode MS"
    
    #--------------------------------------------------------
    
    # 使用plt.subplot()函数添加4个子图
    # 子图有两行两列
    # 选择序号为1子图
    plt.subplot(2,2,1)
    # 使用plt.plot()函数绘制折线图
    plt.plot(data["month"],data["sum"])
    # 使用plt.xticks()函数旋转x轴的刻度至90度
    plt.xticks(rotation=90)
    # 使用plt.xlabel()函数,将x轴标题设置为"月份"
    plt.xlabel("月份")
    # 使用plt.ylabel()函数,将y轴标题设置为"销量"
    plt.ylabel("销量")
    
    #---------------------------------------------------------
    
    # 选择序号为2子图
    plt.subplot(2,2,2)
    # 使用plt.scatter()函数
    # 以df["ads_fee"]为x轴的值和df["sales"]为y轴的值,绘制散点图
    plt.scatter(df["ads_fee"],df["sales"])
    # 使用plt.xlabel()函数,将x轴标题设置为"广告费用"
    plt.xlabel("广告费用")
    # 使用plt.ylabel()函数,将y轴标题设置为"销量"
    plt.ylabel("销量")
    
    #--------------------------------------------------------
    
    # 选择序号为3的子图
    plt.subplot(2,2,3)
    # 使用plot.bar()函数和ax=plt.gca()
    # 根据data中的数据
    # 以"month"为x轴,["first_floor","second_floor","third_floor"]为y轴
    # 绘制簇形柱状图
    data.plot.bar("month",["first_floor","second_floor","third_floor"],ax=plt.gca())
    # 使用plt.xlabel()函数,将x轴标题设置为"月份"
    plt.xlabel("月份")
    # 使用plt.ylabel()函数,将y轴标题设置为"销量"
    plt.ylabel("销量")
    
    #--------------------------------------------------------------
    
    # 选择序号为4子图
    plt.subplot(2,2,4)
    # 使用plot.bar()函数,stacked=True和ax=plt.gca()
    # 根据percentData中的数据
    # 以"month"为x轴,绘制对比["一楼","二楼","三楼"]的百分比堆积柱状图
    # 这个是用的就是pandas模块
    
    percentData.plot.bar("month",["一楼","二楼","三楼"],stacked=True,ax=plt.gca())
    # 使用plt.xlabel()函数,将x轴标题设置为"月份"
    plt.xlabel("月份")
    # 使用plt.ylabel()函数,将y轴标题设置为"占比"
    plt.ylabel("占比")
    
    #-----------------------------------------------------------
    
    # 使用plt.tight_layout()函数来调整子图布局
    plt.tight_layout()
    # 使用plt.show()函数显示图像
    plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2053546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C盘扩容遇到恢复分区怎么办?

文章目录 1.0 问题描述2.0 了解恢复分区是啥3.0 恢复分区可以删除吗?(需确认好!)4.0 删除恢复分区(需要谨慎操作)4.0.1 管理员打开CMD4.0.2 查看磁盘 给C盘扩容 1.0 问题描述 想要给C盘扩容,但…

Hyper-v ubuntu22 上外网方法

1. 前置步骤 步骤一,首先新建一个虚拟网络交换机,我这里名称为vEthernet (hyper-v-ubuntu),选【内部网络】 步骤二, 在网络设置中,找到可以上网的网卡,这里我用的是无线网卡WLAN,设置共享连接…

【SpringBoot】SpringBoot的运行原理

SpringBoot项目中都有一个如下的启动类。 SpringBootApplication public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class,args);} }其中SpringBootApplication是这个启动类的核心注解,在它下面又有三个子…

Spring Cloud Gateway动态路由及路由插件实现方案

前言 sim-framework之前使用Zuul作为网关,结合Eureka实现了动态路由及灰度路由,但是存在以下几个问题: 性能问题:Zuul基于线程隔离,一个请求需要一个线程处理,而Gateway基于事件驱动,少量线程…

Go项目布局

Go项目布局,自举语言,源码是靠Go自己实现的 所以Go源码可以参考作为项目布局 源码放在src目录下 cmd放main internal目录下放不希望外部访问的代码(业务) common目录下可以放直接 import外部访问的 etc放配置文件yaml

第二届海南大数据创新应用大赛 - 算法赛道冠军比赛攻略_海南新境界队

关联比赛: 第二届海南大数据创新应用大赛 - 智能算法赛 第二届海南大数据创新应用大赛 - 算法赛道冠军比赛攻略 首先很幸运能拿到这次初赛冠军,本着积极学习和提升自我的态度,团队成员通力合作是获胜关键,再次感谢。 赛题背景分析和理解 …

gpio的使用----->4412的裸机的使用(第三节)

这一节主要是 4412 的裸机的使用 0 4412 的硬件原理图 数据手册 然后是数据手册的解析: 每一组都有这几个 寄存器。 需要注意: 1、 4412 的中断是 与输入,输出在同一个级别的,与stm32不同。 2、 我是在uboot 上进行编程的&#x…

重头开始嵌入式第二十二天(Linux系统编程 进程)

进程 目录 进程 1.进程的概念 2.PCB(process control block) 3.进程和程序有什么区别? 4.进程的内存分布 5.进程的分类 守护进程 6.进程的作用 7.进程的状态 8.进程的调度 9.查询进程的相关指令 1.ps aux 2.top 3.kill和killa…

12 Text 组件

12 Text 组件 Tkinter 是 Python 的标准 GUI 库,而 Text 组件是其中用于显示和编辑多行文本的控件。以下是对 Text 组件的详细说明和一个使用案例。 Text 组件属性 基本属性 width: 文本框的宽度,通常以字符数为单位。height: 文本框的高度&#xff…

亚世光电:消费电子年度表演

机圈风云再起,消费电子乘风而起? 今天我们来聊——亚世光电 最近,华为mate60突然降价,被大家怀疑是为新品上市做准备,算算时间,下半年的消费电子大战也即将拉开帷幕,而亚世光电所在的光电显示领…

sklearn-线性回归

文章目录 一、sklearn-线性回归介绍二、线性回归1.一元线性回归2.多元线性回归模型3.最小二乘法 三、一元线性回归应用1.导入库2.绘制散点图3.建立回归模型并进行训练4.模型评估与数据查看5.模型测试 四、多元线性回归应用1.导入库2.计算相关性3.数据预处理4.训练评估模型5.模型…

iOS 18.1 Beta 2评测:新变化与体验升级

苹果公司近日向开发者推送了iOS 18.1 Beta 2更新,这一版本基于beta1版本进行多个方面优化和改进,为用户带来了更加流畅和个性化的使用体验。作为一位热衷于体验新系统的用户,小编也是第一时间升级了Beta 2版本,并对其进行了全面的…

Java二十三种设计模式-状态模式(20/23)

本文深入探讨了状态模式,一种允许对象根据其内部状态变化而改变行为的软件设计模式。文章从定义、组成部分、实现方式、使用场景、优缺点分析、与其他模式的比较,到最佳实践和建议,全面介绍了状态模式的各个方面。通过Java语言的实现示例和实…

2024前端面试题-篇章一(个人向)

1.vue2生命周期(省略) 2.vue3生命周期(省略) 3.vue2页面生命周期与组件生命周期执行顺序: 一般是 页面先创建,然后准备再准备挂载,挂载的时候发现有组件再执行组件的生命周期,组件…

数字影像技术是如何改变我们看待世界的方式呢?

在当今的科技时代,数字影像技术正以惊人的速度改变着我们的生活和视觉体验。那么,什么是数字影像技术呢? 数字影像技术是指通过数字化手段对图像和视频进行获取、处理、存储、传输和展示的一系列技术。 它利用各种数字设备,如数…

msf+proxychains组合搭建socks5隧道 | 内网穿透

实验环境 网络拓扑: kali: VMnet1(公网)192.168.52.134 win10: VMnet1(公网)192.168.52.135VMnet2(内网)192.168.72.133 win2008: VMnet2&#xff08…

【数据结构初阶】二叉树--基本概念

hello! 目录 一、树 1.1 树的概念和结构 1.2 树的相关术语 1.3 树的表示 1.4 树形结构实际应用场景 二、二叉树 2.1 概念和结构 2.2 特殊的二叉树 2.2.1 满二叉树 2.2.2 完全二叉树 2.3 二叉树的存储结构 2.3.1 顺序结构 2.3.2 链式结构 …

转行到大模型,完整版攻略从大模型零基础到大模型精通,我是这样过来的

在当今这个日新月异的时代,技术的更新迭代速度远超我们的想象。对于那些渴望在职业生涯中寻求新挑战的人来说,转向人工智能领域,尤其是投身于大规模语言模型的研究与开发,无疑是一个充满机遇的选择。本文将为您揭示如何从零开始&a…

阿里十万卡训练集群 网络拓扑架构和优势 Alibaba HPN: A Data Center Network for Large Language Model Training

本博客的视频教程在这: 2.2阿里十万卡集群 网络拓扑架构和优势 Alibaba HPN: A Data Center Network for Large Language Model_哔哩哔哩_bilibili 一、大模型训练的核心问题 1.1 流量模式的问题 大语言模型训练的流量模式问题可参考这个: ECMP等价…

Linux 服务器下非root用户安装CUDA完整流程(多次踩雷经验总结)

参考博客: linux下安装cuda和cudnn(非root权限)_cuda下载安装 远程服务器 linux-CSDN博客 Linux下非root用户安装CUDA_linux下cuda-toolkit-archive-CSDN博客 非root用户安装cuda10.1,以及CUDA不同版本间切换_非root用户.run文…