【matplotlib】4-完善统计图形

news2024/11/25 10:25:45

文章目录

  • 完善统计图形
    • 1 添加图例和标题
      • 1.1 图例和标题的设置方法
      • 1.2 案例1--图例的展示样式的调整
      • 1.3 案例2--标题的展示样式的调整
      • 1.4 案例3--带图例的饼图
    • 2 调整刻度范围和刻度标签
      • 2.1 调整刻度范围和刻度标签的方法
      • 2.2 子区函数--subplot()
      • 2.3 案例--逆序设置坐标轴刻度标签
    • 3 向统计图形添加表格

完善统计图形

1 添加图例和标题

在绘图区域中可能会出现多个图形,而这些图形如果不加以说明,观察者则很难识别出这些图形的主要内容。因此,我们需要给这些图形添加标签说明,用以标记每个图形所代表的的内容。方便观察者辨识,这个标签说明就是图例。
同样,如果观察者想要清楚地了解绘图区域中的内容。就需要给绘图区域添加文本内容用以说明绘图区域的主要内容,标题就可以让观察者清楚地知道绘图区域的核心信息和图标内容。

1.1 图例和标题的设置方法

下面通过python代码来演示图例和标题的设置方法,重点讲解函数legend()和title()的使用方法。

# -*- coding:utf-8 -*-

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

x = np.linspace(-2*np.pi, 2*np.pi, 200)
y = np.sin(x)
y1 = np.cos(x)

plt.plot(x, y, label=r"$\sin(x)$")
plt.plot(x, y1, label=r"$\cos(x)$")

plt.legend(loc="lower left")

plt.title("正弦和余弦函数的折线图")

plt.show()

sincos
这里我们使用的是matplotlib自带的TeX功能来实现对数学表达式支持的,用TeX对文本内容进行渲染,通过使用r"$$“模式,将表达式\sin和\cos嵌入一对美元符号之间。一般而言,对于在r”$text\text2$“中的非数学表达式文本text1会以斜体形式输出,并且最终输出时就会呈现印刷级别的文档效果。需要说明的是,在字符串r”$text\text2$“的开始之处有一个标记"r”,表示该字符串是raw strings,字符串按照TeX规范进行解析。

1.2 案例1–图例的展示样式的调整

不仅图例的显示位置可以改变,图例的展示样式也可以进行调整,比如图例的外边框、图例中的文本标签的排列位置和图例的投影效果等方面。这些图例的展示样式都是通过图例函数legend()的关键字参数实现的。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 2.1, 0.1)
y = np.power(x, 3)
y1 = np.power(x, 2)
y2 = np.power(x, 1)

plt.plot(x, y, ls="-", lw=2, label="$x^{3}$")
plt.plot(x, y1, ls="-", lw=2, c="r", label="$x^{2}$")
plt.plot(x, y2, ls="-", lw=2, c="y", label="$x^{1}$")

plt.legend(loc="upper left",bbox_to_anchor=(0.05, 0.95), ncol=3,
           title="power function", shadow=True, fancybox=True)

plt.show()

power
图例函数legend()的关键字参数主要有位置参数loc、线框位置参数bbox_to_anchor、图例标签内容的标题参数title、线框阴影shadow和线框圆角处理参数fancybox等。对于位置参数loc不仅可以使用字符串还可以使用字符串对应的数字。

位置参数值位置数值
upper right1
upper left2
lower left3
lower right4
center left6
center right7
lower center8
upper center9
center10

1.3 案例2–标题的展示样式的调整

针对标题的展示样式,可以通过title()的关键字参数得以实现,这些关键字参数包括字体样式、字体大小、字体风格和字体颜色等文本属性。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2, 2, 1000)
y = np.exp(x)

plt.plot(x, y, ls="-", lw=2, color="g")

plt.title("center demo")
plt.title("Left Demo", loc="left",
          fontdict={"size": "xx-large", "color": "r", "family": "Times New Roman"})
plt.title("Right Demo", loc="right", family="Comic Sans MS",
          size=20, style="oblique", color="c")

plt.show()

demo

1.4 案例3–带图例的饼图

为饼图添加图例,从而实现绘图区域的清爽布局。

 # -*- coding: utf-8 -*-

import matplotlib as mpl
import matplotlib.pyplot as plt

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

elements = ["面粉", "砂糖", "奶油", "草莓酱", "坚果"]

weight = [40, 15, 20, 10, 15]

colors = ["#e41a1c", "#377eb8", "#4daf4a", "#984ea3", "#ff7f00"]

wedges, texts, autotexts = plt.pie(weight,
                                   autopct="%3.1f%%",
                                   textprops=dict(color="w"),
                                      colors=colors)

plt.legend(wedges,elements,fontsize=12, title="配料表",
           loc="center left",bbox_to_anchor=(0.91, 0, 0.3, 1)) # 设置图例的位置和大小

plt.setp(autotexts, size=15, weight="bold")
plt.setp(texts, size=12)

plt.title("野果派配料表", fontsize=20)

plt.show()

pie
通过调用图例函数"plt.legend(wedges, elements)",就可以将饼片外部的文本标签放在图例中,而各饼片的数值仍在饼片内部。函数legend()的参数wedges和elements分别表示饼片实例列表和文本标签列表,而且这两个参数要一起配合才能将外部文本标签放在图例中。

2 调整刻度范围和刻度标签

刻度范围是绘图区域中坐标轴的取值区间,包括x轴和y轴的取值区间。刻度范围是否合适直接决定绘图区域中图形展示效果的优劣。因此,调整刻度范围对可视化效果的影响非常明显。同理,刻度标签的样式也会对可视化效果造成影响。如果可以根据具体的数据结构和数据形式采用合适的刻度标签样式,那么不仅可以将数据本身的特点很好的地展示出来,还可以让可视化效果变得更加理想。

2.1 调整刻度范围和刻度标签的方法

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2*np.pi, 2*np.pi, 200)
y = np.sin(x)

plt.subplot(211)
plt.plot(x, y)

plt.subplot(212)
plt.xlim(-2*np.pi, 2*np.pi)

plt.xticks([-2*np.pi, -3*np.pi/2, -np.pi, -1*np.pi/2, 0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi],
           [r'$-2\pi$',r'$-3\pi/2$', r'$-\pi$',r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$', r'$3\pi/2$',r'$2\pi$'])

plt.plot(x, y)

plt.show()

pi
下半部分是改进后的正弦曲线,我们通过xlim()函数来改变x轴的刻度范围,使得绘图区域变得更加紧凑。又通过xticks()来改变刻度标签,使得图形内容更加直观,便于观察和理解。

2.2 子区函数–subplot()

这个函数专门用来绘制几何形状相同的网格区域,子区顾名思义就是将画布分成若干个子画布,这些子画布就构成了几何形状规则且对称的矩形绘图区域,然后在这些区域上分别绘制图形。例如,subplot(211)和subplot(212)代表首先在画布上分隔出一个2行1列的画布格式,然后在一个2行1列的画布格式上分别绘制图形1和图形2。

2.3 案例–逆序设置坐标轴刻度标签

我们通过调整xlim()的参数内容来实现逆序展示刻度标签的可视化需求。这样,我们就能够根据具体需求来灵活调整坐标轴刻度标签的数值排序方向,轻松实现升序和降序刻度标签的标记需求。

# -*- coding: utf-8 -*-

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

time = np.arange(1, 11, 0.5)
machinePower = np.power(time, 2) + 0.7

plt.plot(time, machinePower, linestyle='-', linewidth=2, color='r')

plt.xlim(10, 1)

plt.xlabel('使用年限')
plt.ylabel('机器功率')

plt.title('机器功率随使用年限的变化')

plt.grid(ls=':', lw=1, color='gray', alpha=0.5)

plt.show()

machine

3 向统计图形添加表格

通过matplotlib可以绘制精美的统计图形,数据可视化的主要作用就是直观地解释数据,以使观察者可以发现数据背后的规律或者变化趋势。有时为了更加全面地凸显数据的规律和特点,需要将统计图形和数据表格结合使用。

# -*- coding: utf-8 -*-

import matplotlib as mpl
import matplotlib.pyplot as plt

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

labels = "A难度水平", "B难度水平", "C难度水平", "D难度水平"

students = [0.35, 0.15, 0.20, 0.30]

explode = (0.1, 0.1, 0.1, 0.1)

colors = ["#377eb8", "#4daf4a", "#984ea3", "#ff7f00"]

plt.pie(students, explode=explode,
        labels=labels, autopct='%1.1f%%',
        startangle=45, shadow=True, colors=colors)

plt.title("选择不同难度测试试卷的学生百分比")

colLabels = ["A难度水平", "B难度水平", "C难度水平", "D难度水平"]
rowLabels = ["学生选择试卷人数"]
studentValues = [[350, 150, 200, 300]]
colColors = ["#377eb8", "#4daf4a", "#984ea3", "#ff7f00"]

plt.table(cellText=studentValues,
          cellLoc="center",
            colWidths=[0.1] * 4,
            colLabels=colLabels,
            colColours=colColors,
            rowLabels=rowLabels,
            rowLoc="center",
            loc="bottom")

plt.show()

table
我们主要添加了table()函数,该函数各参数含义如下:

  • cellText: 表格的数值,将源数据按照行进行分组,每组数据放在列表里存储,所有组数据再放在列表里存储
  • cellLoc: 表格中数据的对齐方式,可左对齐、居中和右对齐
  • colWidths: 表格中每列的宽度
  • colLabels: 表格中每列的列名称
  • colColours: 表格中每列的类名称所在单元格的颜色
  • rowLabels: 表格每行的行名称
  • rowLoc: 表格每行的行名称对齐方式
  • loc: 表格在画布中的位置

通过上面的表格,我们就可以清楚地知道学生选择不同难度试卷的实际人数,从相对和绝对绝对分别考察试卷的难易程度对学生选择试卷的影响情况,使得后续的分析结论能够更加客观和全面地反映试卷难度对学生考试的影响。想要举一反三的同学可以试试将前面讲的饼图外部文本添加到图例中,让图形更加直观。

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

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

相关文章

密码学:公钥密码.(非对称密码)

密码学:公钥密码. 公钥密码 (Public Key Cryptography),又称为非对称密码,其最大特征是加密和解密不再使用相同的密钥,而使用不同的密钥。使用者会将一个密钥公开,而将另一个密钥私人持有,这时这两个密钥被…

【WebGIS初学到入职】第二阶段的小结

一、前言 2021年12月,我进行了【WebGIS初学到入职】第一阶段的小结,如今,一年半过去了。我完成了毕业设计,平缓得通过了岗位的试用期,而且作为我所在部门唯一的前端开发,参与了越来越多的工作项目。 同时…

源码分析RocketMQ之NameServer

整体架构图 从部署架构图可知NameServer与所有的broker通讯,NameServer集群之间互不通信。 主要功能包括 1、Broker管理 1.1 维护Broker集群 clusterAddrTable 1.2 Broker信息 接收Broker注册信息并保存作为路由信息的基本数据 brokerAddrTable 1.3 Topic消息路由…

【软件质量保证与测试】实验二之ACTS工具

索引 0. 前言1. ACTS 获取2. ACTS 启动2.1 双击启动GUI2.2 终端启动GUI2.3 进入GUI 3. ACTS 参数类型3.1 新建系统3.2 ACTS 添加成员3.2.1 Boolean类型3.2.2 Enum类型3.2.3 Number类型3.2.4 Range类型3.2.5 其他 4. ACTS 约束5. 混合组合强度6. 参考模型6.1 设定模型6.2 参数设…

Win系统软件闪屏 - 解决方案

Win系统软件闪屏 - 解决方案 前言原因解决方案方法1:软件使用独显方法2:软件关闭硬件加速方法3:降级显卡驱动 前言 使用Win10及以上系统时,可能会出现频繁闪现黑屏的状态,下文简称闪屏。一般在使用第三方软件时&#…

【Linux】进程信号保存

前言 上篇博客我们了解了进程信号的概念和信号如何产生。 本篇我们将学习进程信号如何保存。 文章目录 前言一. 阻塞信号二. 递达动作三. 信号集四. 信号集操作函数结束语 一. 阻塞信号 首先我们需要一些预备知识 实际执行信号的处理动作称为信号递达(Delivery&am…

可能是最有前途的国产大模型:讯飞星火认知大模型

大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加:keeepdance,备注:chatgpt,拉你进群。 昨天下午,科大讯飞发布了自己的大模型——星火认知大模型。在上周他们还在…

小白专用VScode从安装到入门编写_Windows_C/C++

此篇主要梳理VScode的安装、功能拓展等,包括与git管理和Cmake的结合 一、VScode下载二、VScode功能拓展2.1 VScode中文界面在线安装2.2 VScode中文界面离线安装2.3 鼠标滚轮调整字体大小2.4 调整编辑器界面大小2.5 Windows下VScode C/C环境配置2.5.1 MinGW编译器下载…

Illustrator如何创建Web图形与动画之实例演示?

文章目录 0.引言1.创建切片2.选择和编辑切片3.快速生成PNG元素图标 0.引言 因科研等多场景需要进行绘图处理,笔者对Illustrator进行了学习,本文通过《Illustrator CC2018基础与实战》及其配套素材结合网上相关资料进行学习笔记总结,本文对创建…

【Docker】docker核心概念与常用指令

目前掌握的docker处理平时工作倒是可以,但docker网络这块有些模棱两可,干脆从头整理一遍Docker。 🌳🌳【Docer篇整理】🌳🌳 篇一:docker核心概念与常用指令 篇二:镜像与docker数据卷…

【C++】vector的介绍及使用

目录 一、vector的介绍二、vector的常用接口2.1 vector的定义2.2 vector iterator的使用2.3 vector 空间增长问题2.4 vector 增删查改2.4.1.尾插和尾删2.4.2.任意位置插入和删除以及查找2.4.3.vector 的交换与遍历 2.5 vector 迭代器失效问题 一、vector的介绍 vector是表示可…

《花雕学AI》讯飞星火认知大模型的特点和优势,与ChatGPT的对比分析

引言: 人工智能是当今科技领域的热门话题,自然语言处理是人工智能的重要分支。自然语言处理的目标是让计算机能够理解和生成自然语言,实现人机交互和智能服务。近年来,随着深度学习的发展,自然语言处理领域出现了许多创…

人人开源代码

后台源代码: git clone gitgitee.com:renrenio/renren-fast.git 前端源代码: git clone gitgitee.com:renrenio/renren-fast-vue.git 自动生成源代码: git clone gitgitee.com:renrenio/renren-generator.git 关于 renren-fast-vue npm npm报…

RabbitMQ --- 惰性队列、MQ集群

一、惰性队列 1.1、消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。之后发送的消息就会成为死信,可能会被丢弃,这就是消息堆积问题。 解决消息堆积有三种…

cenos7安装wkhtmltopdf

参考:http://www.023dns.com/server_ECS/2190.html https://blog.csdn.net/nexttrial/article/details/125504683 在Centos7 安装wkhtmltopdf,把html页面转换成pdf文档。 1、安装 yum install wkhtmltopdf 2、安装之后,执行操作&#xff…

处理 json 和 HttpMessageConverter--文件下载-ResponseEntity --SpringMVC 文件上传

目录 处理 json 和 HttpMessageConverter 处理 JSON-ResponseBody 说明: 下面是要完成的效果 准备工作 创建json.jsp 创建Dog.java , 作为返回的数据 创建JsonHandler.java 完成测试(页面方式)和 (Postman 方式) ​编辑 处理 JSON-RequestBody 应用案例 修改 json…

Masonry使用以及源码解析(未完待续

文章目录 Masonry使用约束约束优先级 以及 intrinsicContentSize相关问题 Masonry:iOS12Masonry源码解析下面是使用make.width点语法后的全部内部调用过程: Masonry使用 约束 在写Masonry之前,我想先来聊聊约束的基础知识,我们首先要了解一…

igraph的layout布局

做图论的社区检测,需要画图显示,用igraph可以进行可视化。 igraph有几个布局,分别如下: layout_with_dh : The Davidson-Harel layout algorithm Place vertices of a graph on the plane, according to the simulat…

电脑远程控制

这里介绍2种常用的电脑远程控制方式。第一种,向日葵。第二种,QQ。 向日葵 --- 推荐 支持 Mac、Windows、Linux、iOS、Android。 Mac 版向日葵如果想让别人控制你的电脑,安装完向日葵以后要在 Mac 的“安全与隐私”开启几个权限才能被对方正…

node笔记_写文件(异步写入,同步写入,追加写入,流式写入)

文章目录 ⭐前言⭐写文件💖writeFile写入写一个txt文件 💖writeFileSync同步写入写一个txt文件 💖appendFile 追加写入追加写入一个txt 💖createWriteStream流式写入流式写入txt ⭐ 结束 ⭐前言 大家好,我是yma16&…