matplotlib——折线图(python)

news2024/11/15 10:05:46

前言

在学习数据分析前,一定要有python基础,不一定要非常熟练的掌握这门语言,但一定要对python有个大概的了解(就像我一样,大一学过python,但是现在忘的差不多了,但是没关系,有个大致了解即可,遇到不会的再去Google就行😂)。

什么是matplotlib

matplotlib是最流行的python底层绘图库,主要做数据可视化图表,名字取自matlab,模仿matlib构建

我们为什么要学matplotlib

  1. 能将数据进行可视化,更直观的呈现。
  2. 使数据更加客观,更具说服力

正文

第一版

代码
from matplotlib import pyplot as plt

x=range(2,26,2)
y=[15,16,18,19,21,21,24,27,25,23,22,18]

plt.plot(x,y)
plt.show()
效果

在这里插入图片描述

这是最简略的版本,我们只是简单的把折线图画出来了,但是先不说别人能不能看明白,我们自己就看不明白。所以我们要改进。
要改进的问题:

  1. 设置图片大小
  2. 保存到本地
  3. 描述信息,比如x轴,y轴表示什么,这个图表示什么
  4. 调整x轴,y轴刻度的间距
  5. 线条的样式(比如颜色,透明度)
  6. 给图片加水印(防止图片被盗用)

第二版

代码
# 导入库
from matplotlib import pyplot as plt

# 解决中文乱码
import matplotlib
matplotlib.rc("font",family='FangSong')

# 初始化数据
# 数据在x轴的位置,是一个可迭代的对象,在y轴也是如此
# x轴和y轴的数据一起组成了所有要绘制出的坐标,分别是(2,15),(4,16).....(24.18)
x=range(2,26,2)		
y=[15,16,18,19,21,21,24,27,25,23,22,18]


# 设置图片大小属性
# figsize设置画布的大小,第一个元素是长,第二个元素是宽
# dpi表示清晰度(我也不是很清楚,大概这么理解),越大图片越清晰
fig=plt.figure(figsize=(20,8),dpi=160)

# 添加描述信息,x/y轴表示什么,这个图形表示什么
# xlabel和ylabel都是设置横纵坐标的信息
# title是设置整张图片的信息,表示这张图片表示什么
plt.xlabel("时间")
plt.ylabel("温度(摄氏度)")
plt.title("一天中气温随时间变化曲线")

# 调整x/y轴的刻度间距
# 先准备一个列表,这个列表中的数据是x轴的刻度,然后将x轴刻度设置成列表中的数据。y轴也是如此。
x_ticks=range(2,25)
y_ticks=range(min(y),max(y)+1)
plt.xticks(x_ticks)
plt.yticks(y_ticks)

# 添加水印
plt.text(x=1,               # 水印开头左下角对应的X点
            y=35,               # 水印开头左下角对应的Y点
            s="Matplotlib",    # 水印文本
            fontsize=30,       # 水印大小
            color="gray",      # 水印颜色
            alpha=0.5)         # 水印是通过透明度控制的

# 绘制图形
plt.plot(x,y)

# 保存到本地
plt.savefig("./image/pic1.svg")

# 展示图形
plt.show()
效果

在这里插入图片描述

进阶练习

需求:我们绘制一个折线图,表示我和同桌随年龄增长交往的朋友的数量,注意这里是要一个图里画两条线。

代码
# 一个小demo演示

from matplotlib import pyplot as plt

# 解决中文乱码
import matplotlib
matplotlib.rc("font",family='FangSong')

y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2 = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]
x = range(11,31)

fig=plt.figure(figsize=(20,8),dpi=160)

plt.xlabel("年龄")
plt.ylabel("交往的朋友数量(个)")
plt.title("随年龄增长交往的朋友数量")

x_ticks=["{}岁".format(i) for i in x]
plt.xticks(x,x_ticks)
plt.yticks(range(min(y),max(y)+3))

# 加上网格
plt.grid(alpha=.4,linestyle="-.")

# 设置线条样式
plt.plot(x,y_1,label="自己",color="r",linestyle=":")
plt.plot(x,y_2,label="同桌",color="b",linestyle="--")

plt.legend()
plt.show()

# plt.savefig("./image/pic2.svg")
注意

● 这里设置的x轴刻度带有中文,一般按照上面的格式来设置(应该还有其他方法,但是我才学疏浅,还没有掌握)。x_ticks是中文和数字组合的刻度的列表,最后用plt.plot()设置时要传两个参数,第一个参数是纯数字(一定要和x_ticks中的填充的数字一样),第二个参数就是x_ticks。
● 设置线条样式

颜色字符风格字符
r红色-实线
g绿色--虚线
b蓝色-.点划线
w白色:点虚线
c青色' '留空或空格,无线条
m洋红
y黄色
k黑色
#00ff0016进制,自定义颜色
效果

在这里插入图片描述

代码
# 第二个小demo,演示十点到十二点的的气温变化

from matplotlib import pyplot as plt

# 解决中文乱码
import matplotlib
matplotlib.rc("font",family='FangSong')

x=range(0,120)
y=[random.randint(20,35) for i in range(120)]

fig=plt.figure(figsize=(20,8),dpi=200)

plt.xlabel("time")
plt.ylabel("气温")

x_ticks=["10点{}分".format(i) for i in range(60)]
x_ticks+=["11点{}分".format(i) for i in range(60)]
plt.xticks(list(x)[::3],x_ticks[::3],rotation=45)
plt.yticks(range(20,36))
           
plt.grid(alpha=.4)

plt.text(x=1,               # 水印开头左下角对应的X点
            y=35,               # 水印开头左下角对应的Y点
            s="Matplotlib",    # 水印文本
            fontsize=30,       # 水印大小
            color="gray",      # 水印颜色
            alpha=0.5)         # 水印是通过透明度控制的


plt.plot(x,y)
plt.show()

# plt.savefig("./image/pic3.svg")
效果

在这里插入图片描述

说明

在设置x轴刻度时,我们会遇到两个问题。
● 如果太密集的话,我们进行切片操作。
● 如果太密集的话,我们对刻度进行旋转,rotation就是设置旋转的参数,传的参数就是旋转的度数(0度是横着,即与x轴平行)

总结

  1. 绘制折线图(plt.plot)
  2. 设置图片的大小和分辨率(plt.figure)
  3. 实现图片的保存(plt.savefig)
  4. 设置x/y轴上的刻度和字符串(plt.xticks和plt.yticks)
  5. 解决刻度稀疏和密集的问题(切片和旋转)
  6. 设置标题,xy轴的label(plt.titleplt.xlabelplt.ylabel)。特别的,如果有多条线的话,要在绘制时(plt.plot)设置每条线的标签,并且最后还要plt.legend。
  7. 设置字体,解决中文乱码的问题

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

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

相关文章

01、MongoDB -- 下载、安装、配置文件等配置 及 副本集配置

目录 MongoDB -- 下载、安装、配置 及 副本集配置启动命令启动 mongodb 的服务器(单机和副本集)启动单机模式的 mongodb 服务器启动副本集的 3 个副本节点(mongodb 服务器) 启动 mongodb 的客户端 MongoDB 下载MongoDB 安装1、解压…

Java 封装阿里云 oss 上传图片时抽取配置到 application 使用 @Value 获取值

Java 封装阿里云 oss 上传图片时抽取配置到 application 使用 Value 获取值 application .yml 配置 alioss: # 阿里云配置endpoint: "https://oss-cn-beijing.aliyuncs.com" # Endpoint以华东1(杭州)为例,其它Region请按实际…

ES系列之Logstash实战入门

概述 作为ELK技术栈一员,Logstash用于将数据采集到ES,通过简单配置就能把各种外部数据采集到索引中进行保存,可提高数据采集的效率。 原理 数据源提供的数据进入Logstash的管道后需要经过3个阶段: input:负责抽取数…

AI新工具(20240301) Ideogram; Image to Music Generator等

1: Ideogram 全新的多模态生图AI工具,以其优秀的文字渲染能力和生图能力受到业界瞩目 Ideogram是一个创新的AI工具,它通过在生成的图片中自然地整合文字,解决了生图AI领域长期存在的一个难题。这个工具特别擅长将文本以极其自然和协调的方式…

gRPC知识归档

文章目录 gRPC知识归档gRPC原理什么是gRPCgRPC的特性gRPC支持语言gRPC使用场景gRPC设计的动机和原则 数据封装和数据传输问题网络传输中的内容封装和数据体积问题JSONProtobuf(微服务之间的服务器调用,一般采用二进制序列化,比如protobuf&…

ChatGPT与GEE+ENVI+python高光谱,多光谱等成像遥感数据处理技术

原文链接:ChatGPT与GEEENVIpython高光谱,多光谱等成像遥感技术 第一遥感科学与AI基础 一:遥感科学的基本原理和历史 从摄影侦察到卫星图像 遥感的基本原理 遥感的典型应用 最新进展和未来趋势 二:ChatGPT 什么是ChatGPT&a…

数字口岸再升级:广西二期项目助力口岸通关提速运营增效!

在数字口岸相关政策的引领下,广西与RCEP其他成员国进出口规模有力攀升,大力推动了广西向海经济,临港产业集群不断壮大,大宗商品贸易快速增长。据海关统计,2023年,广西进出口总值6936.5亿元人民币&#xff0…

k8s中容器的调度与创建:CRI,cgroup

container调度与创建 选自:K8s、CRI与container - packy的文章 - 知乎 https://zhuanlan.zhihu.com/p/102897620 Cgroup创建: cgexec -g cpu,memory:$UUID \ > unshare -uinpUrf --mount-proc \ > sh -c "/bin/hostname $UUID &…

关于vue中关于eslint报错的问题

1 代码保存的时候会自动将单引号报错为双引号 导致eslint报错的问题, 解决思路: 在项目根目录下新建一个.prettierrc.json文件 { “tabWidth”: 2,“useTabs”: false,“singleQuote”: true,“semi”: false} 2 关于报错代码的时候 出现尾随逗号报错…

MySQL 多表查询 连接查询 外连接

介绍 MySQL 多表查询 连接查询 内连接 外连接分为两种,左外和右外连接, 左外:相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据,完全包含左表的数据 右外:相当于查询表2(右表)的所有数据 包含 表1和表2交集部分的数据…

《PySide6/PyQt6快速开发与实战》P111被省略了的案例

编程环境:Fedora, QtCreator 见代码: # This Python file uses the following encoding: utf-8 import sys from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget from PySide6.QtGui import QPalette #, QColo…

Scratch 第十三课-飞机大战游戏

第十三课-飞机大战游戏 学习目标 这节课我们做一款大家都爱玩的飞机大战游戏,学习重点: 如何导入外部角色如何让飞机发射子弹鼠标控制角色移动 程序设计 程序分析 : 飞机大战游戏相信很多小朋友都玩过,我方飞机在下方&#xf…

双通道音频功率放大电路,外接元件少, 通道分离性好,3V 的低压下可正常使用——D2025

D2025 为立体声音频功率放大集成电路,适用于各类袖珍或便携式立体声 收录机中作功率放放大器。 D2025 采用 DIP16 封装形式。 主要特点:  适用于立体声或 BTL 工作模式  外接元件少  通道分离性好  电源电压范围宽(3V~12V &#xff…

Unity3d Shader篇(十)— 渐变纹理

文章目录 前言一、什么是Unlity渐变纹理Shader?1. 渐变纹理Shader工作原理2. 渐变纹理?3. 渐变纹理的优缺点优点:缺点: 4. 渐变纹理例图 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函…

【Flutter 面试题】解释 Flutter的热重载(Hot Reload)功能

【Flutter 面试题】解释 Flutter的热重载(Hot Reload)功能 文章目录 写在前面解答补充说明 写在前面 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2…

JVM运行时数据区——本地方法接口和本地方法栈

1、本地方法接口 虽然Java语言使用非常广泛,但是有些事务Java仍然无法处理。例如线程相关的功能,在线程类当中就有很多本地方法接口。那么Java如何来处理这些问题呢?Java设计师提出了一种解决方案就是本地方法接口。本贴将会讲解本地方法接口…

spark sql 转换字符串数组成多列结构

背景 在平时使用spark sql分析数据时,特别是分析从mysql的表入仓的hive表时,我们会经常和字符串数组的列打交道,而且这种情况下我们一般都需要把一行字符串数组的行数据转成多列的形式,我们看下怎么写这个sql spark sql 转换字符…

idea中maven配置(一次成功,全部细节都有)

写这篇文章的原因是maven的配置很简单,但是也很容易出错,我连配了两台电脑的maven出现了各种小错误,参考了以下两篇博文IDEA配置Maven教程(超详细版~)_idea maven配置教程-CSDN博客 一次包会——最新IDEA配置Maven指南&#xff0…

(学习日记)2024.03.01:UCOSIII第三节

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

ABAP - OOALV 单元格 F4实现

方式一:使用标准数据表,FIELDCAT字段设置值 gs_fieldcat-ref_table X. "列可编辑gs_fieldcat-ref_table MARA. "F4 参考表gs_fieldcat-ref_field MATNR. "F4 参考字段 方式二.使用自定义数据 ,实现效果如下图…