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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python调用Python并传参

常规 在Python中调用另一个Python脚本可以通过多种方式实现&#xff0c;例如使用subprocess模块或者直接导入模块。以下是两种常见的方法&#xff1a; 使用subprocess模块&#xff1a; 调用 import subprocess # 调用另一个Python脚本&#xff0c;例如script.py subprocess.r…

ES5和ES6的深拷贝问题

深拷贝我们知道是引用值的一个问题&#xff0c;因为在拷贝的时候&#xff0c;拷贝的是在内存中同一个引用。所以当其中的一个应用值发生改变的时候&#xff0c;其他的同一个引用值也会发生变化。那么针对于这种情况&#xff0c;我们需要进行深度拷贝&#xff0c;这样就可以做到…

centos安装jdk的坑

文章目录 一、安装jdk二、查找jdk的目录三、配置JAVA_HOME 一、安装jdk 我们一般用yum search java | grep jdk查询可以安装的jdk 但是一定要注意如下图&#xff0c;必须知道jdk和jre的区别 yum install java-1.8.0-openjdk-devel.x86_64二、查找jdk的目录 用如下命令 sudo…

云电脑安全性怎么样?企业如何选择安全的云电脑

云电脑在保障企业数字资产安全方面&#xff0c;采取了一系列严谨而全面的措施。随着企业对于数字化转型的深入推进&#xff0c;数字资产的安全问题日益凸显&#xff0c;而云电脑作为一种新兴的办公模式&#xff0c;正是为解决这一问题而生。云电脑安全吗&#xff1f;可以放心使…

Mybatis-获取参数值的两种方式

1. ${ } 和 #{ } MyBatis获取参数值的两种方式&#xff1a;${ } 和 #{ } 对于初学者来说&#xff0c;理解MyBatis中获取参数值的两种方式——#{}和${}&#xff0c;关键在于明白它们如何影响SQL语句的构建以及为何在安全性、灵活性上有显著差异。下面我将用简单易懂的语言来解…

Flutter开发之下标

Flutter开发之下标 在iOS开发中使用下标就很方便&#xff0c;本文主要是记录一下Flutter中系统自带的下标&#xff0c;还可以通过对应的方法编写自己的下标。 在Objective-C中的下标 关键字Subscript。 NSArray - (ObjectType)objectAtIndexedSubscript:(NSUInteger)idx A…

Abaqus周期性边界代表体单元Random Sphere RVE 3D (Mesh)插件

插件介绍 Random Sphere RVE 3D (Mesh) - AbyssFish 插件可在Abaqus生成三维具备周期性边界条件(Periodic Boundary Conditions, PBC)的随机球体骨料及骨料-水泥界面过渡区(Interfacial Transition Zone, ITZ)模型。即采用周期性代表性体积单元法(Periodic Representative Vol…

vscode上编辑vba

安装xvba插件更换vscode的工作目录启动扩展服务器在config.json中添加目标工作簿的名称加载excel文件&#xff08;必须带宏的xlsm&#xff09;这个扩展就会自动提取出Excel文件中的代码Export VBA&#xff08;编辑完成的VBA代码保存到 Excel文件 &#xff09;再打开excel文件可…

java中的单例模式

一、描述 单例模式就是程序中一个类只能有一个对象实例 举个例子: //引出单例模式&#xff0c;一个类中只能由一个对象实例 public class Singleton1 {private static Singleton1 instance new Singleton1();//通过这个方法来获取实例public static Singleton1 getInstance…

标定系列——预备知识-OpenCV中与标定板处理相关的函数(四)

标定系列——预备知识-OpenCV中与标定板处理相关的函数&#xff08;四&#xff09; 说明记录棋盘格圆网格 说明 记录了OpenCV中与标定板处理相关的函数用法 记录 棋盘格 圆网格

Qt源程序编译及错误问题解决

Error 5 while parsing C:/qt-everywhere-src-6.6.2/qt-build/qtdeclarative/src/qmlmodels/meta_types/qt6qmlmodels_release_metatypes.json: illegal value .json 文件为空文件0字节&#xff0c;加 “[]”&#xff0c;不要引号。可以解决这类错误。 Qt编译 Qt for Windows…

[BT]BUUCTF刷题第9天(3.27)

第9天&#xff08;共2题&#xff09; [护网杯 2018]easy_tornado 打开网站就是三个txt文件 /flag.txt flag in /fllllllllllllag/welcome.txt render/hints.txt md5(cookie_secretmd5(filename))当点进flag.txt时&#xff0c;url变为 http://b9e52e06-e591-46ad-953e-7e8c5f…

WPF 命名空间解释

在C#中有命名空间的概念&#xff0c;我们可以使用using引入&#xff0c;就可以使用其中的类&#xff0c;在xaml中&#xff0c;也同样有命名空间&#xff0c;在window标签中用xmlns声明的这几行&#xff0c;这就是本页面引入的命名空间。 一般的情况下&#xff0c;我们引入命名空…

左手医生:医疗 AI 企业的云原生提效降本之路

相信这样的经历对很多人来说并不陌生&#xff1a;为了能到更好的医院治病&#xff0c;不惜路途遥远奔波到大城市&#xff1b;或者只是看个小病&#xff0c;也得排上半天长队。这些由于医疗资源分配不均导致的就医问题已是老生长谈。 云计算、人工智能、大数据等技术的发展和融…

qt-C++笔记之QSpinBox控件

qt-C笔记之QSpinBox控件 code review! 文章目录 qt-C笔记之QSpinBox控件1.运行2.main.cpp3.main.pro4.《Qt6 C开发指南》&#xff1a;4.4 QSpinBox 和QDoubleSpinBox 1.运行 2.main.cpp #include <QApplication> #include <QSpinBox> #include <QPushButton&g…

数据结构——排序算法

1、排序的概念 排序是指的是将一组数据&#xff08;如数字、单词、记录等&#xff09;按照某种特定的顺序&#xff08;升序或降序&#xff09;进行排列的过程。排序算法是实现排序的程序或方法&#xff0c;它们在软件开发和数据处理中扮演着至关重要的角色。 排序算法可以根据…

人脸68关键点与K210疲劳检测

目录 人脸68关键点检测 检测闭眼睁眼 双眼关键点检测 计算眼睛的闭合程度&#xff1a; 原理: 设置阈值进行判断 实时监测和更新 拓展&#xff1a;通过判断上下眼皮重合程度去判断是否闭眼 检测嘴巴是否闭合 提取嘴唇上下轮廓的关键点 计算嘴唇上下轮廓关键点之间的距…

案例分析-IEEE 754浮点标准

案例一&#xff1a; 请分析IEEE 754双精度浮点数规格化数的表示范围。 案例二&#xff1a; 规格化浮点数的Bias为什么采用2k-1-1而不是2k-1​&#xff1f;非规范数的指数E1-Bias而不是0-Bias&#xff1f; &#xff08;1&#xff09; ① bias 127时 E e - 127 &#xff08;00…

Remote Desktop Manager for Mac:远程桌面管理软件

Remote Desktop Manager for Mac&#xff0c;是远程桌面管理的理想之选。它集成了多种远程连接技术&#xff0c;无论是SSH、RDP还是VNC&#xff0c;都能轻松应对&#xff0c;让您随时随地安全访问远程服务器和工作站。 软件下载&#xff1a;Remote Desktop Manager for Mac下载…

DevSecOps平台架构系列-互联网企业私有化DevSecOps平台典型架构

目录 一、概述 二、私有化DevSecOps平台建设思路 2.1 采用GitOps公有云建设 2.2 采用GitOps私有云建设 2.3 总结 三、GitOps及其生态组件 3.1 采用GitOps的好处 3.1.1 周边生态系统齐全 3.1.2 便于自动化的实现 3.1.3 开发人员属性GitOps 3.2 GitOps部分生态组件介绍…