Matplotlib数据可视化实战-2绘制折线图(2)

news2024/12/27 11:03:39

2.11营业额可视化

已知某学校附近一个烧烤店2022年每个月的营业额如下图所示。编写程序绘制折线图对该烧烤店全年营业额进行可视化,使用红色点画线连接每个月的数据,并在每个月的数据处使用三角形进行标记。

烧烤店营业额
月份123456789101112
营业额/万元5.22.75.85.77.39.218.715.620.518.01.86.9

运行结果如下:

import matplotlib.pyplot as plt

# 月份和每月营业额
month = range(1, 13)
money = [5.2, 2.7, 5.8, 5.7, 7.3, 9.2, 18.7, 15.6, 20.5, 18.0, 7.8, 6.9]

plt.plot(month, money, 'r-.v', mfc='b', mec='y')
plt.xlabel('月份', fontproperties='simhei', fontsize=14)
plt.ylabel('营业额(万元)', fontproperties='simhei', fontsize=14)
plt.title('烧烤店2022年营业额变化趋势图', fontproperties='simhei', fontsize=18)
# 紧缩四周空白,扩大绘图区域可用面积
plt.tight_layout()

plt.show()

参数mfc(marker face color)用来设置散点符号内部颜色

参数mec(marker edge color)设置散点符号边线颜色 

 

2.12绘制折线图模拟连续信号与数字信号

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0, 6*np.pi, 0.05)
# 连续信号与数字信号的函数值
t_sin = np.sin(t)
t_digital1 = np.piecewise(t_sin, [t_sin>0, t_sin<0], [1,-1])
t_digital2 = np.round_(t_sin)

plt.plot(t, t_sin, label='$sin(x)$', color='red', lw=1)
plt.plot(t, t_digital1, 'b--', label='digital1')
plt.plot(t, t_digital2, 'g-.', label='digital2')
plt.ylim(-2.0, 2.0)
plt.legend()

plt.show()

 

2.13在第一象限中,任意反比例函数xy=k与任意矩形OABC的两个交点的连线始终与矩形的对角线平行,请编写程序验证这一点。

import numpy as np
import matplotlib.pyplot as plt

k = 1                                          # 反比例函数xy=k的常数k
m, n = 6, 3                                    # 矩形右上角坐标(m,n)
x = np.arange(0.1, m+0.5, 0.02)                # 第一象限中反比例函数曲线上顶点的x坐标
y = k / x                                      # 根据反比例函数xy=k计算顶点y坐标
plt.plot(x, y, 'b')                            # 绘制第一象限指定区间内的反比例函数图像

plt.plot([0,m,m,0,0], [0,0,n,n,0], 'r')        # 绘制矩形,从左下角出发,向右、上、左、下
plt.plot([0,m], [n,0], 'g')                    # 矩形对角线
plt.plot([k/n,m], [n,k/m], 'g')                # 矩形与反比例函数的交点连线

for x, y, ch in zip([0,m,m,0,k/n,m], [0,0,n,n,n,k/m], 'OABCDE'):
    plt.text(x, y+0.02, ch)                    # 绘制顶点与交点的符号
plt.xlim(-0.1, m+1)                            # 设置坐标轴跨度
plt.ylim(-0.1, n+1)
plt.title(f'k={k},m={m},{n=}', fontsize=20)   # 设置图形标题
plt.gca().set_aspect(True)                     # 设置图形纵横比相等

plt.show()                                     # 显示图形

2.14绘制函数曲线,计算并标记极值 

import numpy as np
import matplotlib.pyplot as plt

# 函数自变量取值范围区间
start, end = 0, 10
# 计算所有采样点的x坐标、y坐标,绘制折线图
x = np.arange(start, end, 0.01)
y = 3*np.sin(x) + 5*np.cos(3*x)
s, = plt.plot(x, y, 'r-')
# 设置子区间长度,在每个子区间(不包含端点)内寻找极值
# 调整区间大小时会影响极值数量,应使得每个子区间内都包含波峰和波谷
span = 66

for start in range(0, len(y), span):
    # 每个子区间的自变量与函数值
    sectionY = y[start:start+span]
    sectionX = x[start:start+span]
    # 局部最大值和局部最小值
    localMax = sectionY.max()
    localMin = sectionY.min()

    # 方案一:
    # 按值大小升序排序的索引
    argsort_result = sectionY.argsort()
    # 区间内所有最大值的索引和所有最小值的索引
    args_max = argsort_result[-len(sectionY[sectionY==localMax]):]
    args_min = argsort_result[:len(sectionY[sectionY==localMin])]
    # 去除子区间端点
    args_max = list(set(args_max)-{0,span-1})
    if args_max:
        s1 = plt.scatter(sectionX[args_max], sectionY[args_max], marker='*', c='b')
    
    args_min = list(set(args_min)-{0,span-1})
    if args_min:
        s2 = plt.scatter(sectionX[args_min], sectionY[args_min], marker='*', c='g')

    # 方案二:
##    for index, yy in enumerate(sectionY):
##        if yy==localMax and index not in (0, span-1):
##            # 在极大值处绘制一个蓝色五角星
##            s1 = plt.scatter(sectionX[index], yy, marker='*', c='b')
##        elif yy==localMin and index not in (0, span-1):
##            # 在极小值处绘制一个绿色五角星
##            s2 = plt.scatter(sectionX[index], yy, marker='*', c='g')

# 创建图例
plt.legend([s,s1,s2], ['curve','local max','local min'])
#显示绘制的结果
plt.show()

2.15使用折线图可视化角谷猜想

角谷猜想,也被称为“冰雹猜想”或“3n+1猜想”,是一个数学上的未解问题。这个猜想的内容是,对于任意一个正整数,如果是奇数,则乘3再加1,如果是偶数,则除以2,这样得到的结果再按照上述规则重复处理,最终总能够得到1。

角谷猜想的名称来源于其在不同地方的流传历史。它首先在美国流传开来,然后传播到欧洲。后来,一位名叫角谷的日本人将其带到亚洲,因此得名“角谷猜想”。而“冰雹猜想”的名称则来源于这个猜想处理数字时数字上上下下的变化过程,就像冰雹在高空中形成并落下的过程一样。

尽管角谷猜想自提出以来已经经过了许多数学家的研究,但至今仍然没有找到证明或反证。这个猜想在数学界引起了广泛的关注,甚至有一些数学家悬赏求解。

from random import choice, seed
import matplotlib.pyplot as plt

def check(num):
    times = 0         # 变为1所需要的次数
    numbers = [num]   # 变为1的过程中的所有数字
    while True:
        times = times + 1
        if num%2 == 0:
            num = num // 2
        else:
            num = num*3 + 1
        numbers.append(num)
        if num == 1:
            # 变为1时结束循环
            break
    return range(times+1), numbers

seed(20220702)
for _ in range(6):
    num = choice(range(1, 9999))
    plt.plot(*check(num), label=str(num))
    
plt.legend()
plt.show()

 2.16角谷猜想中正整数最终变为1所需要的计算次数

 

from random import randrange, seed
import matplotlib.pyplot as plt

def check(num):
    times = 0
    while True:
        times = times + 1
        if num%2 == 0:
            num = num // 2
        else:
            num = num*3 + 1
        if num == 1:
            break
    return times

ticks = []
seed(20220702)
for _ in range(6):
    num = randrange(1, 9999)
    tick = check(num)
    ticks.append(tick)
    # 第一个参数表示y坐标,表示每个柱的位置,对应变为1所需要的次数
    # 第二个参数表示长度,对应要变为1的数字
    plt.barh(tick, num, label=str(num))
# 在每个柱对应的位置显示刻度
plt.yticks(ticks)
plt.legend()

plt.show()

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

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

相关文章

8.HelloWorld小案例

文章目录 一、Java程序开发运行流程如何理解编译&#xff1f; 二、HelloWorld案例的编写1、新建文本文档文件&#xff0c;修改名称为HelloWorld.java。2、用记事本打开HelloWorld.java文件&#xff0c;输写程序内容。代码要跟我编写的完全保持一致。3、ctrl s 保存&#xff0c…

基于springboot实现图书个性化推荐系统项目【项目源码+论文说明】

基于springboot实现图书个性化推荐系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论…

【vue3学习笔记(二)】(第141-143节)初识setup;ref函数_处理基本类型;ref函数_处理对象类型

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 本篇内容对应课程第141-143节 课程 P141节 《初识setup》笔记 1、setup是所有组合式API“表演的舞台”&#xff0c;组件中所用到的所有数据、方法、监视数据、生命周期钩子等都需要配置在setup中。 2、setup的两种返回值&…

技术导读 | 如何为SecOps插上AI的翅膀

随着数字经济的蓬勃发展&#xff0c;数据安全和网络安全的重要性日益凸显。在数字经济时代&#xff0c;数据已成为企业的核心资产&#xff0c;而网络安全则是保障数据安全的基石。然而&#xff0c;面对不断变化的攻击模式、扩大的攻击面以及日益复杂的安全事件&#xff0c;许多…

国内IP切换软件:解锁网络世界的新钥匙

在数字化快速发展的今天&#xff0c;互联网已成为我们生活中不可或缺的一部分。然而&#xff0c;伴随着网络使用的深入&#xff0c;许多用户逐渐意识到&#xff0c;不同的IP地址可能会带来截然不同的网络体验。为了应对这一问题&#xff0c;国内IP切换软件应运而生&#xff0c;…

阿里云倚天服务器是什么?倚天服务器c8y、g8y和r8y详细介绍

阿里云倚天云服务器CPU采用倚天710处理器&#xff0c;租用倚天服务器c8y、g8y和r8y可以享受优惠价格&#xff0c;阿里云服务器网aliyunfuwuqi.com整理倚天云服务器详细介绍、倚天710处理器性能测评、CIPU架构优势、倚天服务器使用场景及生态支持&#xff1a; 阿里云倚天云服务…

证书(公钥):网络安全的关键

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【软考】UML中的图之状态图

目录 1. 说明2. 图示 1. 说明 1.状态图&#xff08;State Diagram&#xff09;展现了一个状态机。2.由状态、转换、事件和活动组成。3.关注系统的动态视图。4.对于接口、类和协作的行为建模尤为重要。5.强调对象行为的事件顺序。6.通常包括简单状态和组合状态、转换&#xff0…

TensorRT的两种INT8量化方式: QTA, PTQ

TensorRT的两种INT8量化方式: QTA, PTQ 深度学习 (DL) 模型的训练阶段包括学习大量密集的浮点权重矩阵&#xff0c;这导致推理过程中需要进行大量的浮点计算。 研究表明&#xff0c;可以通过强制某些权重为零来跳过其中许多计算&#xff0c;而对最终精度的影响很小。 与此同时…

【学习】企业申请DCMM原来有这么多的好处

DCMM&#xff0c;即数据管理能力成熟度评估模型&#xff08;Data management Capability Maturity Model&#xff09;&#xff0c;是我国在数据管理领域首个正式发布的国家标准。DCMM的核心目的是帮助企业利用先进的数据管理理念和方法&#xff0c;建立和评价自身的数据管理能力…

JAVA------基础篇

java基础 1.JDK JDK :java development kit JRE&#xff1a;java runtime environment JDK包含JRE java跨平台&#xff1a;因为java程序运行依赖虚拟机&#xff0c;虚拟机需要有对应操作系统的版本&#xff0c;而jre中有虚拟机。 当你想要在Linux系统下运行&#xff0c;则需要…

U盘未格式化?数据恢复大揭秘!

在日常办公和生活中&#xff0c;U盘已成为我们不可或缺的数据存储工具。然而&#xff0c;有时我们会遇到这样一个令人头疼的问题&#xff1a;原本正常使用的U盘&#xff0c;突然提示“未格式化”&#xff0c;里面的文件似乎都消失不见了。面对这种情况&#xff0c;很多人会感到…

[2021]Zookeeper getAcl命令未授权访问漏洞概述与解决

今天在漏洞扫描的时候蹦出来一个zookeeper的漏洞问题&#xff0c;即使是非zookeeper的节点&#xff0c;或者是非集群内部节点&#xff0c;也可以通过nc扫描2181端口&#xff0c;获取极多的zk信息。关于漏洞的详细描述参考apache zookeeper官方概述&#xff1a;CVE-2018-8012: A…

FPGA时钟资源详解(2)——Clock-Capable Inputs

FPGA时钟系列文章总览&#xff1a;FPGA原理与结构&#xff08;14&#xff09;——时钟资源https://ztzhang.blog.csdn.net/article/details/132307564 目录 一、概述 1.1 为什么使用CC 1.2 如何使用CC 二、Clock-Capable Inputs 2.1 SRCC 2.2 MRCC 2.3 其他用途 2.3.1…

Day23 代码随想录(1刷) 二叉树

669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有被移除&#xff0c;原有的父代…

安踏,步入“高端化”的甜蜜陷阱

文丨黄小艺 2023年3月14日&#xff0c;徐阳重回安踏担任CEO的第二天&#xff0c;就颇为急切地拉了一场高层会议。 面对在场的安踏老人们&#xff0c;徐阳提了两个很终极的问题&#xff0c;“是什么让过去30年的安踏获得了成功&#xff1f;”“未来30年&#xff0c;如果安踏想…

mysql80-DBA数据库学习1-数据库安装

掌握能力 核心技能 核心技能 mysql部署 官网地址www.mysql.com 或者www.oracle.com https://dev.mysql.com/downloads/repo/yum/ Install the RPM you downloaded for your system, for example: yum install mysql80-community-release-{platform}-{version-number}.noarch…

智慧公厕的技术融合策略

智慧公厕是迎合现代城市发展需要的一项重要基础设施&#xff0c;其设计的技术融合策略在实现公共厕所泛在感知、互通互联、协同构筑智慧城市等方面起到了关键作用。本文将以智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案例现场实景实图实例&#xff0c;从物…

NetCore3.1 Controller中直接返回JObject对象抛出异常解决方案

问题描述 在NetCore 3.1的Web项目中&#xff0c;Controller有一个方法直接返回JObject对象时&#xff0c;抛出了异常 S y s t e m . N o t S u p p o r t e d E x c e p t i o n : T h e c o l l e c t i o n t y p e ′ N e w t o n s o f t . J s o n . L i n q . J O b j …

FID离子流采集硬件方案设计

一、原理简介 氢离子火焰检测器(Flame Ionization Detector, FID)是气相色谱仪中常用的一种检测器,主要用于检测有机化合物。它的工作原理基于在高温氢气/空气火焰中,有机化合物会发生离子化放出电子的过程。 1、FID的基本结构 燃烧器: 内部有一个小型燃烧池,燃烧池顶端有一个…