Matplotlib学习笔记(第二章 2.1.5 图形的绘制过程)

news2024/11/26 2:39:05

本教程旨在展示使用Matplotlib的单个可视化的开始、中间和结束。

我们将从一些原始数据开始,最后保存一个定制的可视化图形。

在此过程中,我们尝试使用Matplotlib来突出一些整洁的特性和最佳实践。


注意:本教程基于克里斯·莫菲特这篇优秀的博客文章。它被克里斯·霍德格拉夫转化为本教程。


关于面向对象的API与Pyplot的说明

Matplotlib有两个接口,第一个是面向对象(OO)接口。在本例中,我们使用axes.ax的一个实例来呈现图形实例上的可视化。

第二部分基于MATLAB,采用基于状态的接口,封装在pyplot模块中。更深入地了解pyplote界面,请参阅pyplot教程。

大多数术语都是直截了当的,但主要要记住的是:

  • 图形是可能包含一个或多个绘图区域的最终图像。
  • Axes表示一个单独的绘图区域(不要将"Axes"与“Axis”一词混淆,后者指的是绘图的坐标轴)。

我们调用直接从绘图区域进行绘图的方法,这给了我们更大的灵活性和更大的力量来定制我们的图像。


注意:通常情况下,尝试使用面向对象的接口而不是pyplot接口。


我们的数据

我们将使用来自于本教程的文章的数据,它包含了一些公司的销售信息。

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)
开始

这些数据自然被可视化为一个条形图,每个组有一个bar。为了使用面向对象的方法来实现这一点,我们首先生成一个图形实例:图形和绘图区域。图形就像一个画布,而绘图区域是画布的一部分,我们将在其中进行一个特定的可视化。


注意:图形上可以有多个绘图区域。有关如何执行此操作的信息,请参阅Tight Layout 教程。


fig, ax = plt.subplots()

在这里插入图片描述

现在我们有了一个Axes实例,我们可以在上面绘图。

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

在这里插入图片描述

输出:

<BarContainer object of 10 artists>

控制样式

Matplotlib中有许多可用的样式,以便使您能够根据需要定制可视化。如果有一个样式列表,那么我们就可以参考使用。

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)
plt.style.use('fivethirtyeight')

在这里插入图片描述

输出:

<BarContainer object of 10 artists>

样式控制许多东西,例如颜色、线宽、背景等。

定制图形

现在我们有了一个我们想要的总体外观的图形,所以让我们微调一下,这样它就可以打印了。首先,我们在x轴上旋转标签,使它们更清晰地显示出来。我们可以使用axes.Axes.get_xticklabels()方法访问这些标签:

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

![在这里插入图片描述](https://img-blog.csdnimg.cn/de45576138a64424946b4da47c9008d6.png

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

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

在这里插入图片描述

输出:

[None, None, None, None, None, None, None, None, None, None, None, None, None,
↪ None, None, None, None, None]

看上去像是把底部的一些标签剪掉了。我们可以告诉Matplotlib在我们创建的图形中自动为元素腾出空间。为此,我们设置了rcParams的autolayout值。有关用rcParams控制图形的样式、布局和其他特性的表单信息,使用样式表和rcParams可以查看Matplotlib with style sheets and 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')

在这里插入图片描述

输出:

[None, None, None, None, None, None, None, None, None, None, None, None, None,
↪ None, None, None, None, None]

接下来,我们将标签添加到绘图中。为了使用OO接口实现这一点,我们可以使用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')

在这里插入图片描述

输出:

[(-10000.0, 140000.0), Text(0.5, 0, 'Total Revenue'), Text(0, 0.5, 'Company'),
↪ Text(0.5, 1.0, 'Company Revenue')]

我们还可以使用pyplot.subplots()函数来调整这个绘图的大小。我们也可以figsize参数来调整绘图的大小。


注意:NumPy中的索引遵循表单(行、列),而图形大小的参数kwarg则遵循表单(宽度、高度)。这在可视化方面遵循惯例,不幸的是,这与线性代数不同。


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')

在这里插入图片描述

输出:

[(-10000.0, 140000.0), Text(0.5, 0, 'Total Revenue'), Text(0, 0.5, 'Company'),Text(0.5, 1.0, 'Company Revenue')]

For labels,we can specify custom formatting guidelines in the form of functions. Below we definea function that takes an integer as input,and returns a string as an output. When used with axis.set_major_formatter or Axis.set_minor_formatter, they will automatically create and usea ticker.FuncFormatter class.

对于标签,我们可以以函数的形式指定自定义格式指南。

下面我们定义了一个函数,它以一个整数作为输入,并返回一个字符串作为输出。当与Axis.
set_major_formatterAxis.set_minor_formatter一起使用时,它们将自动创建和使用ticker.FuncFormatter类。

对于这个函数,x参数是原始的 tick 标签,pos是 tick 位置。我们将只使用x.here,但这两个参数都是必需的。

def currency(x, pos):
    """The two args 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属性ax.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)

在这里插入图片描述

组合多个可视化

在相同的绘图区域上绘制多个绘图元素是可能的。要做到这一点,我们只需调用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()

在这里插入图片描述

Saving our plot

保存图形

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

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” 使得图形符合界限

在这里插入图片描述

# 保存图形
fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight")

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

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

相关文章

【图像去噪】鲁棒PCA图像去噪【含Matlab源码 463期】

⛄一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素&#xff0c;图像去噪是指减少图像中噪声的过程。噪声分类有三种&#xff1a;加性噪声&#xff0c;乘性噪声和量化噪声。我们用f(x,y&#xff09;表示图像&#xff0c;g(x,y&#xff0…

jmeter性能测试-Arrivals 线程组解释

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 公号同名&#xff0c;欢迎加入我的测试交流群&#xff0c;我们一起交流学习&#xff01; 目录…

Go项目目录结构该怎么写?

原文地址&#xff1a;Go项目目录结构该怎么写&#xff1f; Go 目录 /cmd 项目的主干。 每个应用程序的目录名应该与想要的可执行文件的名称相匹配(例如&#xff0c;/cmd/myapp)。 不要在这个目录中放置太多代码。如果认为代码可以导入并在其他项目中使用&#xff0c;那么它…

Python入门自学到精通需要看哪些书籍?

Python语言在近几年可以算得上如日中天&#xff0c;越来越火爆的同时&#xff0c;学习Python的人也越来越多了。对于不同基础的学习者来讲&#xff0c;学习的重点和方式也许会有差别&#xff0c;但是基础语法永远都是重中之重。在牢牢掌握基础知识的前提下&#xff0c;我们才能…

SAP ABAP 利用弹窗(POPUP)实现屏幕(DIALOG)快速开发

SAP ABAP 利用弹窗&#xff08;POPUP&#xff09;实现屏幕&#xff08;DIALOG&#xff09;快速开发 引言&#xff1a; 在 ABAP 开发中经常用到屏幕&#xff08;DIALOG&#xff09;开发&#xff0c;这通常都比较耗时。按复杂度可以分成复杂和简单两类屏幕开发&#xff0c;复杂的…

linux(乌班图)开发环境搭建

乌班图远程连接方法&#xff1a;安装openssh-server 和openssh-clientsudo apt-get -y install openssh-server openssh-client 设置允许root用户进行远程连接 方法一&#xff1a; /etc/ssh/sshd_config里面添加PermitRootLogin yes #重启 service ssh restart方法二&#xff1…

Pandas小白入门(一)---将value_counts的结果转为DataFrame

文章目录代码示例工作原理rename_axisreset_index各函数对于DataFrame下的应用其他应用quantile结果转为DataFrame代码示例 value_counts的结果是一个series&#xff0c;其index为原来列的值&#xff0c;value为值的个数。要将其转为DataFrame需要两个函数rename_axis和reset_…

为什么每个程序员都必须写博客

工作了好几年了&#xff0c;一直没写过技术类的博客&#xff0c;最近才开始尝试写一些技术类的博客。通过写博客的这段时间发现&#xff0c;写博客能够帮助我们快速成长已经提高我们学习的积极性&#xff0c;本文将和大家详细说说程序员写博客的好处。 &#x1f680; 一、加深对…

机器学习必会技能之微积分【一文到底】

机器学习必会技能 —— 微积分【一文到底】 文章目录机器学习必会技能 —— 微积分【一文到底】1 微积分的四类问题2 深入理解导数的本质3 深入理解复合函数求导4 理解多元函数偏导5 梯度究竟是什么&#xff1f;6 真正理解微积分6.1 直观理解6.2 理解微积分基本定理7 非常重要的…

NLP之文本分类项目(基于tensorflow1.14版本)

1.README.md:(查看项目整体结构以及各个部分作用) # Text Classification with RNN使用循环神经网络进行中文文本分类本文是基于TensorFlow在中文数据集上的简化实现&#xff0c;使用了字符级RNN对中文文本进行分类&#xff0c;达到了较好的效果。## 环境- Python 3 - TensorF…

Oracle项目管理之设施与资产管理Facilities and Asset (English)

目录 Maintenance Management Stand Alone or Integrated Facility Condition Assessment Space Management Lease Management Full Lease Expenses and Payment Management Transaction Management Asset Portfolio Management Portfolio Management Capabilities S…

改进二进制粒子群算法在配电网重构中的应用(Matlab实现)【论文复现】

目录 ​ 0 概述 1 配电网重构的目标函数 2 算例 3 matlab代码实现 0 概述 配电系统中存在大量的分段开关和联络开关&#xff0c;配电网重构正是通过调整分段开关和联络升大的组合状态来变换网络结构,用于优化配电网某些指标&#xff0c;使其达到最优状态。正常运行时,则通…

简单理解Vue的data为啥只能是函数

在学习vue的时候vue2只有在组件中严格要求data必须是一个函数&#xff0c;而在普通vue实例中&#xff0c;data可以是一个对象&#xff0c;但是在vue3出现后data必须一个函数&#xff0c;当时看着官方文档说的是好像是对象的引用问题&#xff0c;但是内部原理却不是很了解&#…

[附源码]Node.js计算机毕业设计高校教学过程管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

异常检测方法总结

在数据挖掘中&#xff0c;异常检测&#xff08;英语&#xff1a;anomaly detection&#xff09;对不匹配预期模式或数据集中其他项目的项目、事件或观测值的识别。 通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。异常也被称为离群值、新奇、噪声、…

1999-2020年各省农村综合数据

1999-2020年各省农村综合数据 1、时间&#xff1a;1999-2020年 2&#xff1a;来源&#xff1a;各省NJ、统计NJ、农村NJ 3、范围&#xff1a;包括31省 4、指标包括&#xff1a; 第一产业增加值占地区生产总值比重&#xff08;%&#xff09;、第一产业人员占就业人员比重&a…

scikit-learn 决策树入门实践 iris花分类

背景 为了了解sklearn的API&#xff0c;以及决策树的工作原理&#xff0c;本文以经典的花分类问题为例&#xff0c;编写代码并讲解。最后深入源代码查看其实现 关键词&#xff1a;决策树、基尼系数、决策树可视化、特征重要性。 代码案例 训练决策树 首先要准备数据集&#…

1.引入——如何创建Spring项目

目录 1.创建SpringBoot项目 1.未安装插件 2.安装插件 2.尝试着运行这个FirstApplication 3.Spring的核心——IOC&#xff08;控制反转&#xff09;/DI的讲解 1.相关概念&#xff1a; 2.什么是IOC&#xff0c;为什么要有IOC&#xff1f; 4.基于XML的方式&#xff0c;演示…

制造企业数字化车间MES系统方案

在市场经济越发严峻的局面下&#xff0c;现代制造业工厂越来越追求效率与精益生产管理&#xff0c;争相通过各种技术手段实现生产线上的现代管理&#xff0c;其中&#xff0c;可视化生产管理技术受到企业的关注&#xff0c;对MES系统也越来越重视。 MES系统解决的问题 1、条码…

094基于nodejs框架的学生作业管理系统vue

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 系统分为不同的层次&#xff1a;视图层&#xff08;vue页面…