matplotlib从起点出发(4)_Tutorial_4_Lifecycle

news2024/11/25 3:35:13

1 一幅图像的生命周期

本教程旨在揭示使用matplotlib绘制的一幅图像的生命周期,包括它的开始、中间和结束。我们将从一些原始数据开始,最后保存自定义可视化的图形。在此过程中,我们尝试使用matplotlib突出一些简洁的功能和最佳实践。

2 关于显示接口和隐式接口的说明

matplotlib有两个接口。有关显示接口和隐式接口之间权衡的说明,请参阅matplotlib应用程序接口(API)。

在显式面向对象接口中,我们直接使用axes的实例。用于在图形实例中构建可视化的figure.figure。在受MATLAB启发并建模的隐式接口中,我们使用封装在pyplot模块中的基于全局状态的接口来绘制到当前轴。请参阅pyplot教程,更深入地了解pyplot接口。

大多数术语都很简单,但要记住的主要事情有:

  • Figure是最终的图像,可能包括一个或者多个axes
  • axes代表一个独立的绘图(不要和axis混淆,后者是指图中的x-、y-或z-轴)。

我们调用直接从axes进行绘图的方法,这为我们在自定义绘图时提供了更大的灵活性和功能。

注意
通常,使用显式接口而不是隐式pyplot接口进行绘图。

3 数据

我们将使用派生本教程的帖子中的数据。它包含一些公司的销售信息。

import numpy as np
import matplotlib.pyplot as plt


data = {'Barton LLC': 109438.50,
        'Frami, Hills and Schmidt': 103569.59,
        'Fritsch, Russel and Anderson': 112214.71,
        'Jerde-Hilpert': 112591.43,
        'Keeling LLC': 100934.30,
        'Koepp Ltd': 103660.54,
        'Kulas Inc': 137351.96,
        'Trantow-Barrows': 123381.38,
        'White-Trantow': 135841.99,
        'Will LLC': 104437.60}
group_data = list(data.values())
group_names = list(data.keys())
group_mean = np.mean(group_data)

4 启程

此数据自然可视化为柱形图,每组一条柱形。为了使用面向对象的方法做到这一点,我们首先生成一个图形的figure.Figure实例。图形就像一个画布,axes是该画布的一部分,我们将在其上进行特定的可视化。

在这里插入图片描述

我们这就产生了一个axes实例,我们能够在它的顶层绘图。

fig, ax = plt.subplots()
ax.barh(group_names, group_data)

在这里插入图片描述

5 控制风格

Matplotlib中有许多可用的样式,以便你根据需要定制可视化。要查看样式列表,我们可以使用style。

print(plt.style.available)

可以得到

['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']

你可以使用下列的语句激活一种样式:

plt.style.use('fivethirtyeight')

现在让我们重新绘制一下之前的图形,再看一下结果:

fig, ax = plt.subplots()
ax.barh(group_names, group_data)

在这里插入图片描述

可以看出这个图没有边框,标签字体也比较大。
这里的样式控制了很多方面,例如颜色、线宽、背景等等。

6 自定义绘图

现在我们得到了一个具有我们想要的一般外观的情节,所以让我们对其进行微调,以便它准备好打印。首先,让我们旋转x轴上的标签,以便它们更清晰地显示。我们可以使用axes.Axes.xticklabels()来访问这些标签。

fig, ax = plt.subplots()
ax.barh(group_names, group_data)
labels = ax.get_xticklabels()

如果我们想一次设置多个项目的属性,使用pyplot.setp()函数很有用。这将获取 matplotlib对象中的一个(或多个列表),并尝试为每个对象设置一些样式元素。

fig, ax = plt.subplots()
ax.barh(group_names, group_data)
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45, horizontalalignment='right')

在这里插入图片描述

看起来这样切断了底部的一些标签。我们可以告诉matplotlib自动为我们创建的图形中的元素腾出空间。为此,我们设置了rcParams的自动布局值。有关使用rcParams控制图的样式、布局和其他功能的详细信息。

plt.rcParams.update({'figure.autolayout': True})

fig, ax = plt.subplots()
ax.barh(group_names, group_data)
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45, horizontalalignment='right')

在这里插入图片描述

接下来,我们向图添加标签。要使用面向对象接口执行此操作,我们可以使用Artist.set()方法来设置此axes对象的属性。

fig, ax = plt.subplots()
ax.barh(group_names, group_data)
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45, horizontalalignment='right')
ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company',
       title='Company Revenue')

在这里插入图片描述

我们还可以使用pyplot.subplots()函数调整此图的大小。我们可以使用figsize关键字参数来做到这一点。

注意
虽然Numpy中的索引遵循顺序(行、列),但figsize关键字参数遵循顺序(宽、高)。这遵循可视化中的约定,不幸的是,这些约定与线性代数的约定不同。

fig, ax = plt.subplots(figsize=(8, 4))
ax.barh(group_names, group_data)
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45, horizontalalignment='right')
ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company',
       title='Company Revenue')

在这里插入图片描述

对于标签,我们可以以函数的形式指定自定义格式指南。下面我们定义一个函数,该函数将整数作为输入,并返回一个字符串作为输出。当与Axis.set_major_formatterAxis.set_minor_formatter一起使用时,它们将自动创建和使用一个ticker.FuncFormatter类。

对于此函数,x参数是原始即时刻度标签,pos是即时刻度标签。我们在这里只使用x,但两个参数都是必需的。

def currency(x, pos):
    """The two arguments are the value and tick position"""
    if x >= 1e6:
        s = '${:1.1f}M'.format(x*1e-6)
    else:
        s = '${:1.0f}K'.format(x*1e-3)
    return s

然后,我们可以将此函数应用于图上的标签。对此,我们使用axes的xaxis属性。这使你可以在我们的绘图上的特定轴上执行操作。

fig, ax = plt.subplots(figsize=(6, 8))
ax.barh(group_names, group_data)
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45, horizontalalignment='right')

ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company',
       title='Company Revenue')
ax.xaxis.set_major_formatter(currency)

在这里插入图片描述

7 组合多个可视化效果

可以在同一axes.Axes实例上绘制多个绘图元素。为此,我们只需要在该axes对象上调用另一个绘图方法。

fig, ax = plt.subplots(figsize=(8, 8))
ax.barh(group_names, group_data)
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45, horizontalalignment='right')

# 添加一条垂直线,这里我们在函数调用中设置样式
ax.axvline(group_mean, ls='--', color='r')

# 标记新的公司
for group in [3, 5, 8]:
    ax.text(145000, group, "New Company", fontsize=10,
            verticalalignment="center")

# 标题有点低,我们现在把它提高一些
ax.title.set(y=1.05)

ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company',
       title='Company Revenue')
ax.xaxis.set_major_formatter(currency)
ax.set_xticks([0, 25e3, 50e3, 75e3, 100e3, 125e3])
fig.subplots_adjust(right=.1)

plt.show()

在这里插入图片描述

8 保存图像

现在我们对绘图的结果感到满意,我们想将其保存到磁盘。我们可以在matploblib中保存许多文件格式。要查看可用选项的列表,请使用:

print(fig.canvas.get_supported_filetypes())

输出

{'eps': 'Encapsulated Postscript', 'jpg': 'Joint Photographic Experts Group', 'jpeg': 'Joint Photographic Experts Group', 'pdf': 'Portable Document Format', 'pgf': 'PGF code for LaTeX', 'png': 'Portable Network Graphics', 'ps': 'Postscript', 'raw': 'Raw RGBA bitmap', 'rgba': 'Raw RGBA bitmap', 'svg': 'Scalable Vector Graphics', 'svgz': 'Scalable Vector Graphics', 'tif': 'Tagged Image File Format', 'tiff': 'Tagged Image File Format'}

然后我们可以使用figure.Figure.savefig()来将图像保存到磁盘。请注意,我们在下面显示了几个有用的标识位:

  • transparent = True 使保存的图形的背景透明(如果格式支持);
  • dpi = 80 控制输出的分辨率(每平方英寸点数);
  • bbox_inches = "tight"自动适应图像的边界。
# 解引用这一行即可保存图像,不透明,dpi为80,边距设置为紧.
# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight")

在这里插入图片描述

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

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

相关文章

【Matlab】基于粒子群优化算法优化BP神经网络的时间序列预测(Excel可直接替换数据)

【Matlab】基于粒子群优化算法优化BP神经网络的时间序列预测(Excel可直接替换数据) 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码5.1 fun.m5.2 main.m 6.完整代码6.1 fun.m6.2 main.m 7.运行结果 1.模型原理 基于粒子群优化算法(Pa…

【LeetCode 75】第九题(443)压缩字符串

目录 题目: 示例: 分析: 题目: 示例: 分析: 给一个字符串,如果该字符有连续的相同的字符,则只保留一个字符,并在该字符后加上该字符连续的数量.例如原数组为 [a,a,a],则因为字符a连续了三次,因此可以压缩为[a,3],我们需要注意的是数字也需要是字符,则如果字符连续次数不止有…

SpringCloud学习路线(13)——分布式搜索ElasticSeach集群

前言 单机ES做数据存储,必然面临两个问题:海量数据的存储,单点故障。 如何解决这两个问题? 海量数据的存储问题: 将索引库从逻辑上拆分为N个分片(shard),存储到多个节点。单点故障…

C++笔记之memset分析

C笔记之memset分析 code review! 文章目录 C\笔记之memset分析1.介绍2.误区总结3.代码一,char数组和uint8_t使用memset4.代码三,int数组使用memset 1.介绍 2.误区总结 参考文章:Cmemset踩坑 3.代码一,char数组和uint8_t使用mem…

2023年河北省研究生数学建模竞赛D题中国钢铁工业低碳转型与高质量发展路径优化研究思路和代码

D题中国钢铁工业低碳转型与高质量发展路径优化研究 目前已写出D题初步代码,下载地址:【2023年河北省研究生数学建模竞赛D题初步思路和代码-哔哩哔哩】 https://b23.tv/g2ATbX5 随着我国工业化、城镇化进程的加快和消费结构持续升级,能源需求…

tty(五)串口的打开过程

一、字符设备完成注册 我们知道,在serial核心层提供了2个重要接口 uart_register_driver uart_add_one_port 上者通过调用tty核心的接口,完成了tty_driver的动态分配和注册,然而此时并没有看到创建字符设备, 通过对uart_add_one…

货拉拉基于 Flink 计算引擎的应用与优化实践

摘要:本文整理自货拉拉实时研发平台负责人王世涛,在Flink Forward Asia 2022 平台建设专场的分享。本篇内容主要分为六个部分: Flink 在货拉拉的使用现状Flink 平台化性能优化主题数据准确性主题稳定性主题未来展望 点击查看原文视频 & 演…

【leetcode】链表的中间节点|链表中倒数第k个节点

目录 1.链表的中间节点 2.链表中倒数第k个节点 1.链表的中间节点 思路1:遍历链表,统计节点个数count,返回第count/2 1个节点 📖Note:注意循环条件为--mid,--mid循环执行mid-1次,mid--循环mid次&#xf…

SpringBoot 8种异步实现方式

前言:异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:「发送短信、邮件、异步更新等」,这些都是…

采用串级控制和超高精度PID调节器的微张力精密控制技术

摘要:采用当前的各种涂布机很难适用气体扩散层这类脆性材料的涂布工艺,需要控制精度更高的微张力控制系统。为此本文基于串级控制原理,提出了采用双闭环PID控制模式和超高精度PID张力控制器的解决方案,一方面形成浮动摆棍闭环和主…

python机器学习(五)逻辑回归、决策边界、代价函数、梯度下降法实现线性和非线性逻辑回归

线性回归所解决的问题是把数据集的特征传入到模型中,预测一个值使得误差最小,预测值无限接近于真实值。比如把房子的其他特征传入到模型中,预测出房价, 房价是一系列连续的数值,线性回归解决的是有监督的学习。有很多场…

kafka权威指南学习以及kafka生产配置

0、kafka常用命令 Kafka是一个分布式流处理平台,它具有高度可扩展性和容错性。以下是Kafka最新版本中常用的一些命令: 创建一个主题(topic): bin/kafka-topics.sh --create --topic my-topic --partitions 3 --replic…

【论文阅读22】Label prompt for multi-label text classification

论文相关 论文标题:Label prompt for multi-label text classification(基于提示学习的多标签文本分类) 发表时间:2023 领域:多标签文本分类 发表期刊:Applied Intelligence(SCI二区&#xff0…

生态系统景观指数-聚集度指数AI计算

景观指数是景观生态学的常见指标,可用于不同生态系统的特征识别。景观指数是反映景观结构与空间格局的定量指标,目前已成为景观生态学领域常用的分析景观格局、度量空间异质性的重要方法。不同水平下的指数结果往往代表不同含义,应在把握指数…

git冲突“accept theirs”和“accept yours”

Accept Yours 就是直接选取本地的代码,覆盖掉远程仓库的 Accept Theirs 是直接选取远程仓库的,覆盖掉自己本地的 我们选择Merge,自己手动行进选择、修改。 这里左边部分是你本地仓库的代码,右边部分是远程仓库的代码,中间的res…

uniapp WIFI上下班打卡

大纲 🥙 uniapp官网:uni-app官网 🥙 WIFI功能模块: 1、下载 wifi 插件 uni-WiFi 2、在 manifest.json 中 App权限配置中 配置权限 1. ACCESS_WIFI_STATE (访问权限状态) 2. CHANGE_WIFI_STATE&#xff…

13.Netty源码之Netty中的类与API

highlight: arduino-light ServerBootstrap Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中ServerBootstrap 是服务端启动引导类。 java //泛型 AbstractB…

VMware上安装Ubuntu64

D:\VMware\Virtual Machines\Ubuntu64 D:\VMware\Virtual Machines\Ubuntu64\Ubuntu64.vmdk 继续

【ESP32】调试UART功能

1.创建示例项目uart_echo:VSCODE中->“查看”->”命令面板“->输入:Show Examples projects->选择Use current ESP-IDF(C:\Espressif\frameworks\esp-idf-v5.1)->弹出示例ESP-IDF Examples,选择peripherals->uart->uart…

泰晓科技发布 Linux Lab v1.2 正式版

导读近日消息,Linux Lab 是一套用于 Linux 内核学习、开发和测试的即时实验室,官方称其“可以极速搭建和使用,功能强大,用法简单”。 自去年 12 月份发布 Linux Lab v1.1 后,v1.2 正式版目前已经发布于 GitHub 及 Gite…