Python matplotlib绘制折线图

article/2025/11/7 14:00:49

Python matplotlib绘制折线图

matplotlib是Python中的一个第三方库。主要用于开发2D图表,以渐进式、交互式的方式实现数据可视化,可以更直观的呈现数据,使数据更具说服力。

一、安装matplotlib

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

二、matplotlib图像简介

matplotlib的图像分为三层,容器层、辅助显示层和图像层。

1. 容器层主要由Canvas、Figure、Axes组成。

Canvas位于图像的最底层,充当画布的作用。

Figure位于Canvas之上,指画布上的一整张图像。

Axes位于Figure之上,指Figure中的单个图表,一个Figure中可以有一个或多个Axes,即一张图像中可以有一个或多个图表。

2. 辅助显示层是单个图表(Axes)中用来提供辅助信息的层。

辅助显示层主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。

辅助层可使图像显示更加直观,提高可读性。

3. 图像层指Axes内通过plot、scatter、bar、histogram、pie等函数绘制出的图形。

三、matplotlib绘制折线图

# coding=utf-8
import matplotlib.pyplot as pltplt.figure(figsize=(20, 10), dpi=100)
game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3','3-G4', '3-G5', '总决赛-G1', '总决赛-G2', '总决赛-G3', '总决赛-G4', '总决赛-G5', '总决赛-G6']
scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28]
plt.plot(game, scores)
plt.show()

运行结果:

figure(): 创建图像并设置图像的大小等属性,返回一张图像,可以传入很多参数,常用参数有两个。figsize参数传入一个元组(width, height),设置图像的大小。dpi传入一个整数值,设置图像的清晰度。

plot(): matplotlib中绘制折线图的函数。可以传入很多参数,一般传入两个列表,分别是折线图中的x值和y值。上面的例子中用了NBA2020年季后赛James的得分数据。

show(): 展示图像。

在上面的图表中,x坐标值中有中文,首次使用matplotlib绘图时中文无法正常显示。要解决中文显示问题,需要下载安装SimHei字体,下载链接:https://www.zitijia.com/i/281258939050380345.html,或直接搜索SimHei然后找一个正确的网站下载。下载完成后,在Windows下直接解压双击安装。安装完成后删除~/.matplotlib中的缓存文件,并创建配置文件matplotlibrc,将matplotlibrc中的内容设置为如下内容。

font.family         : sans-serif
font.sans-serif     : SimHei
axes.unicode_minus  : False

操作命令如下截图,完成后图像中就可以正常显示中文了。

使用上面的代码,已经实现了简单的折线图,但展示的效果很差,所以需要进行优化,使图像展示得更好。

四、matplotlib优化折线图

import matplotlib.pyplot as pltplt.figure(figsize=(20, 10), dpi=100)
game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3','3-G4', '3-G5', '总决赛-G1', '总决赛-G2', '总决赛-G3', '总决赛-G4', '总决赛-G5', '总决赛-G6']
scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28]
plt.plot(game, scores, c='red')
plt.scatter(game, scores, c='red')
y_ticks = range(50)
plt.yticks(y_ticks[::5])
plt.grid(True, linestyle='--', alpha=0.5)
plt.xlabel("赛程", fontdict={'size': 16})
plt.ylabel("得分", fontdict={'size': 16})
plt.title("NBA2020季后赛詹姆斯得分", fontdict={'size': 20})
plt.show()

运行结果:

在使用plot()函数绘图时,可以通过c='颜色'来设置折线图的颜色。

scatter(): 绘制散点图。折线图是用直线连接相邻的两个点形成的,但是连成折线后点的显示不明显。scatter可以单独对点进行设置,展示得更明显。

yticks(): 用于设置y轴坐标的范围,传入一个可迭代对象(如range()函数)。最开始绘制的折线图中,图像的y轴坐标范围是数据的范围,坐标原点不是0,使用yticks函数可以设置想要的坐标范围。同理xticks可以用于设置x轴坐标的范围。

grid(): 用于设置图表中的网格线,使用linestyle参数设置网格线的样式,常用的样式有下表中的几种,plot()函数中也可以用linestyle参数设置折线图的样式。使用alpha参数设置网格线的透明度。

样式字符
实线
虚线- - 
点划线-.
点虚线

xlabel(): 用于设置x轴的标签,说明x轴坐标的含义,第一个参数传入需要设置的标签值,后面可以通过其他参数设置显示的效果,如字体大小等。ylabel同理。

title(): 用于设置折线图的标题,说明这张折线图展示的数据。用法同xlabel。

五、matplotlib绘制多条折线图

import matplotlib.pyplot as pltplt.figure(figsize=(20, 10), dpi=100)
game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3','3-G4', '3-G5', '总决赛-G1', '总决赛-G2', '总决赛-G3', '总决赛-G4', '总决赛-G5', '总决赛-G6']
scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28]
rebounds = [17, 6, 12, 6, 10, 8, 11, 7, 15, 11, 6, 11, 10, 9, 16, 13, 9, 10, 12, 13, 14]
assists = [16, 7, 8, 10, 10, 7, 9, 5, 9, 7, 12, 4, 11, 8, 10, 9, 9, 8, 8, 7, 10]
plt.plot(game, scores, c='red', label="得分")
plt.plot(game, rebounds, c='green', linestyle='--', label="篮板")
plt.plot(game, assists, c='blue', linestyle='-.', label="助攻")
plt.scatter(game, scores, c='red')
plt.scatter(game, rebounds, c='green')
plt.scatter(game, assists, c='blue')
plt.legend(loc='best')
plt.yticks(range(0, 50, 5))
plt.grid(True, linestyle='--', alpha=0.5)
plt.xlabel("赛程", fontdict={'size': 16})
plt.ylabel("数据", fontdict={'size': 16})
plt.title("NBA2020季后赛詹姆斯数据", fontdict={'size': 20})
plt.show()

运行结果:

要在同一张图像中展示多条折线图,多次调用plot()函数就行。每条折线图的颜色、样式等可以分别设置,以便更好地进行区分。

legend(): 展示图例,通过loc参数传入图例在图表中展示的位置,可以传入的值有‘best’, 'upper right', 'upper left', 'lower left', 'lower right', 'right', 'center left', 'center right', 'lower center', 'upper center', 'center',这十一个值分别对应数字0~10,传值时也可以传对应的数字,后面十个值都指定了图例的位置,'best'表示自适应,会自动根据图像的分布在后面的十个值中选择一个,大部分为右上角'upper right'。

为了使用图例,在每次调用plot()函数绘制折线图时,需要使用label参数给折线图添加标签,在图例中展示。有多条折线图时,图例可以用于区分每条折线图表示的含义,如将James的得分和篮板、助攻展示在同一张图中。

六、matplotlib绘制多张折线图

import matplotlib.pyplot as pltfig, axs = plt.subplots(nrows=1, ncols=3, figsize=(20, 6), dpi=100)
game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3','3-G4', '3-G5', '总决赛-G1', '总决赛-G2', '总决赛-G3', '总决赛-G4', '总决赛-G5', '总决赛-G6']
scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28]
rebounds = [17, 6, 12, 6, 10, 8, 11, 7, 15, 11, 6, 11, 10, 9, 16, 13, 9, 10, 12, 13, 14]
assists = [16, 7, 8, 10, 10, 7, 9, 5, 9, 7, 12, 4, 11, 8, 10, 9, 9, 8, 8, 7, 10]
y_data = [scores, rebounds, assists]
colors = ['red', 'green', 'blue']
line_style = ['-', '--', '-.']
y_labels = ["得分", "篮板", "助攻"]
for i in range(3):axs[i].plot(game, y_data[i], c=colors[i], label=y_labels[i], linestyle=line_style[i])axs[i].scatter(game, y_data[i], c=colors[i])axs[i].legend(loc='best')axs[i].set_yticks(range(0, 50, 5))axs[i].grid(True, linestyle='--', alpha=0.5)axs[i].set_xlabel("赛程", fontdict={'size': 16})axs[i].set_ylabel(y_labels[i], fontdict={'size': 16}, rotation=0)axs[i].set_title("NBA2020季后赛詹姆斯{}".format(y_labels[i]), fontdict={'size': 20})
fig.autofmt_xdate()
plt.show()

运行结果:

subplots(): 用于在同一张图像中绘制多张图表,通过nrows, ncols两个参数设置图表的张数和排列方式,figsize和dpi同figure()函数。subplots()函数返回两个参数,一个是图像对象fig,一个是可迭代的图表数组axs(类型为numpy中的数组对象)。

每一张图表中的标签、标题、样式、图例等都需要单独设置,为了避免代码过于冗余,可以使用循环。绘制每一张图表时,从axs中取出每一张图表,再调用plot()函数绘图。在设置坐标轴、标签、标题时,使用'set_'开头的方法进行设置,如设置x轴标签用set_xlabel()。

autofmt_xdate(): x轴坐标值自适应倾斜。因为一张图像中有多张图表,x坐标值靠得很近,可能会因重叠造成展示效果差,使用fig对象的autofmt_xdate()方法可以设置自适应倾斜。

以上就是matplotlib实现折线图的简单介绍,更多设置可以参考官网https://matplotlib.org/tutorials/index.html,并多作尝试。

 

 


http://chatgpt.dhexx.cn/article/1Rej3qBv.shtml

相关文章

用python画折线图

import matplotlib.pyplot as plt #设置默认字体,选择支持中文的字体以避免出现中文乱码情况 plt.rcParams[font.sans-serif] [Arial Unicode MS] from matplotlib.ticker import MultipleLocator, FormatStrFormatter lst_temp3[10, 16, 17, 14, 12, 10, 12, 6, 6…

一文看懂用python绘制折线图(吐血整理版)极详细!

折线图的绘制主要分为四步: 1)导入相关的库 2)做图片输出的通用设置 3)设置数据及折现的属性 4)设置图的标题 案例: import matplotlib import numpy as np from matplotlib import pyplot as plt %…

代码解读——Retinex低光照图像增强(Deep Retinex Decomposition for Low-Light Enhancement)

今天带来一篇代码解读的文章,是2018年BMVC上的一篇暗光增强文章。个人觉得网络比较轻量并且能够取得还不错的效果。废话不多说,直接贴传送门: 文章地址:http://arxiv.org/abs/1808.04560 源码地址:https://github.co…

Retinex低光照图像增强

Retinex低光照图像增强 常见的图像增强算法基于直方图的增强算法基于Retinex理论的图像增强算法基于同态滤波的图像增强算法基于双边滤波改进的Retinex算法分析 常见的图像增强算法 在夜间等弱光环境下拍摄的图像,由于其亮度、对比度较低且含有噪声、色彩不饱和、细…

对Retinex算法的一些理解

最近在跟老师做视网膜病灶检测的一个项目,其中一个环节是将两张不同时刻的视网膜图像(灰度图像)亮度对齐以方便后续的处理,即保持相同的组织变化后的灰度值基本相同而病变区域仍有较大的差异。在这个对齐图像亮度的环节中我主要应用了Retinex算法,也测试了一些图像,现在把…

OpenCV—Python Retinex图像增强算法

Retinex图像增强算法 一、单尺度SSR(Single Scale Retinex)理论二、Retinex理论的理解三、多尺度MSR(Multi-Scale Retinex)四、MSRCR & MSRCPMSRCR 算法步骤MSRCR其他实现方法MSRCP算法实现:(代码有问题,改进待续) 一、单尺度…

Retinex算法在暗光增强应用以及Python实现

图像暗光增强(一) Retinex简介Single Scale Retinex(SSR)多尺度MSR Multi-Scale Retinex带色彩恢复的多尺度MSR,即MSRCR(Multi-Scale Retinex with Color Restoration)MSRCP Retinex简介 Retinex由两个单词合成的一个…

基于retinex理论改进的低照度图像增强算法

写本文的目的是记录自己学习过或做过的一些东西,深化理解,理清思路,便于回忆。本人处于学习阶段,欢迎指出不对的地方。 本文算法参考文献:李勇.基于Retinex理论的低照度图像增强算法研究与实现[D].西安电子科技大学,2…

图像去雾(二)Retinex图像增强算法

前一段时间研究了一下图像增强算法,发现Retinex理论在彩色图像增强、图像去雾、彩色图像恢复方面拥有很好的效果,下面介绍一下我对该算法的理解。 Retinex理论 Retinex理论始于Land和McCann于20世纪60年代作出的一系列贡献,其基本思想是人感知到某点的颜…

基于 Retinex 的几种图像增强算法总结

Retinex 理论 Retinex 这个词由 Retina 和 Cortex 两个单词组成。在 Retinex 理论中,物体的颜色是由物体对长波、中波和短波光线的反射能力决定的,而不是由反射光强度的绝对值决定的,并且物体的色彩不受光照非均性的影响,具有一致…

Retinex图像增强算法(SSR, MSR, MSRCR)详解及其OpenCV源码

Retinex图像增强算法(SSR, MSR, MSRCR)详解及其OpenCV源码 Retinex是一种常用的建立在科学实验和科学分析基础上的图像增强方法,它是Edwin.H.Land于1963年提出的。就跟Matlab是由Matrix和Laboratory合成的一样,Retinex也是由两个单词合成的一个词语&…

Retinex实例

Retinex实例 1、代码&#xff1a; #include <iostream>#include <cstring>#include "opencv2/opencv.hpp"using namespace cv;static void help(std::string errorMessage){std::cout<<"Program init error : "<<errorMessage&l…

matlab Retinex图像增强算法

Retinex理论在彩色图像增强、图像去雾、彩色图像恢复方面拥有很好的效果&#xff0c;下面介绍一下我对该算法的理解。 Retinex理论 Retinex理论始于Land和McCann于20世纪60年代作出的一系列贡献,其基本思想是人感知到某点的颜色和亮度并不仅仅取决于该点进入人眼的绝对光线&a…

深入探究Retinex

深入探究Retinex 导读Retinex动态范围增强Retinex核心理论 带色彩恢复的Retinex->MSRCR 导读 Retinex理论是建立在人对颜色感知的恒常性上&#xff0c;真实物体都是无色的&#xff0c;所有颜色的产生都是光和物体相互作用&#xff0c;再被人眼感知的过程。在这样的理论基础下…

Retinex图像增强算法——SSR,MSR,MSRCR,MSRCP,autoMSRCR

系列文章目录 关于OpenCV的一些图像处理函数 图象基本操作&#xff08;读取、显示、通道提取、边界填充、融合、保存&#xff09; Retinex图像增强算法——SSR,MSR,MSRCR,MSRCP,autoMSRCR 文章目录 系列文章目录前言一、Retinex理论二、算法目的&#xff1a;三、Retinex基础算…

Retinex图像增强算法

Retinex图像增强算法 Retinex是一种常用的建立在科学实验和科学分析基础上的图像增强方法&#xff0c;它是Edwin.H.Land于1963年提出的。就跟Matlab是由Matrix和Laboratory合成的一样&#xff0c;Retinex也是由两个单词合成的一个词语&#xff0c;他们分别是retina 和cortex&am…

图像增强算法Python实现之Retinex(含代码)

Retinex是一种常用的建立在科学实验和科学分析基础上的图像增强方法&#xff0c;它是Edwin.H.Land于1963年提出的。就跟Matlab是由Matrix和Laboratory合成的一样&#xff0c;Retinex也是由两个单词合成的一个词语&#xff0c;他们分别是retina 和cortex&#xff0c;即&#xff…

Retinex图像增强

Retinex是一种常用的建立在科学实验和科学分析基础上的图像增强方法。就跟Matlab是由Matrix和Laboratory合成的一样&#xff0c;Retinex也是由两个单词合成的一个词语&#xff0c;他们分别是retina 和cortex&#xff0c;即&#xff1a;视网膜和皮层。Land的retinex模式是建立在…

图像处理:Retinex算法

目录 前言 概念介绍 Retinex算法理论 单尺度Retinex&#xff08;SSR&#xff09; 多尺度Retinex&#xff08;MSR&#xff09; 多尺度自适应增益Retinex&#xff08;MSRCR&#xff09; Opencv实现Retinex算法 SSR算法 MCR算法 MSRCR算法 效果展示 总结 参考文章 前…

Retinex

Retinex图像增强算法 前一段时间研究了一下图像增强算法&#xff0c;发现Retinex理论在彩色图像增强、图像去雾、彩色图像恢复方面拥有很好的效果&#xff0c;下面介绍一下我对该算法的理解。 Retinex理论 Retinex理论始于Land和McCann于20世纪60年代作出的一系列贡献,其基本思…