【数学建模】——matplotlib简单应用

目录

1.绘制带有中文标签和图例的正弦和余弦曲线 

2. 绘制散点图

1.修改散点符号与大小 

2.修改颜色 

3.绘制饼状图 

4.在图例中显示公式 

5.多个图形单独显示 

6.绘制有描边和填充效果的柱状图 

7.使用雷达图展示学生成绩 

8.绘制三维曲面

9.绘制三维曲线 

10.设置图例样式 

总结 


ce6fbd68767d465bbe94b775b8b811db.png

731bd47804784fa2897220a90a387b28.gif

专栏:数学建模学习笔记

matplotlib模块依赖于numpy模块和tkinter模块,可以绘制多种形式的图形,包括线图、直方图、饼状图、散点图、误差线图等等。

1.绘制带有中文标签和图例的正弦和余弦曲线 

  • 使用numpy创建自变量数组t
  • 计算正弦函数值s和余弦函数值z
  • 使用pylab绘制正弦和余弦曲线,并设置标签。
  • 使用matplotlib.font_manager设置中文字体,确保字体文件路径正确。
  • 设置x轴和y轴标签,使用中文字体。
  • 设置图像标题,使用中文字体。
  • 显示图例,使用中文字体。
import numpy as np
import pylab as pl
import matplotlib.font_manager as fm# 必须使用关键参数fname,必须保证字体文件路径正确
myfont = fm.FontProperties(fname=r'C:\Windows\Fonts\STKAITI.ttf') #设置字体
t = np.arange(0.0, 2.0*np.pi, 0.01)        # 自变量取值范围
s = np.sin(t)                              # 计算正弦函数值
z = np.cos(t)                              # 计算余弦函数值
pl.plot(t, s, label='正弦')
pl.plot(t, z, label='余弦')
pl.xlabel('x-变量', fontproperties='STKAITI', fontsize=18)        # 设置x标签
pl.ylabel('y-正弦余弦函数值', fontproperties='simhei', fontsize=18)
pl.title('sin-cos函数图像', fontproperties='STLITI', fontsize=24)  # 标题
pl.legend(prop=myfont)                     # 设置图例
pl.show()

2. 绘制散点图

  • 使用numpy创建数据数组ab
  • 使用scatter函数绘制散点图。
  • 通过参数修改散点符号、大小、颜色和线宽。
  • 生成随机数据,使用scatter绘制散点图,设置符号形状、大小和颜色。
import numpy as np
import pylab as pl
a = np.arange(0, 2.0*np.pi, 0.1)
b = np.cos(a)
pl.scatter(a,b)
pl.show()

 

1.修改散点符号与大小 

#修改散点符号与大小
pl.scatter(a, b, s=20, marker='+')
pl.show()

2.修改颜色 

# 修改颜色
import matplotlib.pylab as pl
import numpy as np
x = np.random.random(100)
y = np.random.random(100)
pl.scatter(x, y, s=x*500, c=u'r', marker=u'*')
# s指大小,c指颜色,marker指符号形状
pl.show()

3.绘制饼状图 

  • 使用numpy创建数据数组。
  • 使用pie函数绘制饼状图,设置标签、颜色和百分比格式。
  • 使饼状图中的某些部分裂开,设置阴影和开始角度。
  • 设置坐标轴刻度和标签。
  • 设置坐标轴跨度和纵横比。
import numpy as np
import matplotlib.pyplot as plt#The slices will be ordered and plotted counter-clockwise.
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
colors = ['yellowgreen', 'gold', '#FF0000', 'lightcoral']
explode = (0, 0.1, 0, 0.1)              # 使饼状图中第2片和第4片裂开fig = plt.figure()
ax = fig.gca()
ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors,autopct='%1.1f%%', shadow=True, startangle=90,radius=0.25, center=(0, 0), frame=True)   # autopct设置饼内百分比的格式
ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors,autopct='%1.1f%%', shadow=True, startangle=45,radius=0.25, center=(1, 1), frame=True)
ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors,autopct='%1.1f%%', shadow=True, startangle=90,radius=0.25, center=(0, 1), frame=True)
ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors,autopct='%1.2f%%', shadow=False, startangle=135,radius=0.35, center=(1, 0), frame=True)
ax.set_xticks([0, 1])                    # 设置坐标轴刻度
ax.set_yticks([0, 1])ax.set_xticklabels(["Sunny", "Cloudy"])  # 设置坐标轴刻度上的标签
ax.set_yticklabels(["Dry", "Rainy"])ax.set_xlim((-0.5, 1.5))                 # 设置坐标轴跨度
ax.set_ylim((-0.5, 1.5))ax.set_aspect('equal')                   # 设置纵横比相等plt.show()

4.在图例中显示公式 

  • 使用numpy创建自变量数组x
  • 计算正弦函数值y和余弦函数值z
  • 使用plot函数绘制曲线,标签中包含LaTeX公式。
  • 设置x轴和y轴标签。
  • 设置图像标题。
  • 设置y轴范围。
  • 显示图例。
import numpy as np
import matplotlib.pyplot as pltx = np.linspace(0, 2*np.pi, 500)
y = np.sin(x)
z = np.cos(x*x)
plt.figure(figsize=(8,4))
# 标签前后加$将使用内嵌的LaTex引擎将其显示为公式
plt.plot(x,y,label='$sin(x)$',color='red',linewidth=2)   # 红色,2个像素宽
plt.plot(x,z,'b--',label='$cos(x^2)$')                   # 蓝色,虚线
plt.xlabel('Time(s)')
plt.ylabel('Volt')
plt.title('Sin and Cos figure using pyplot')
plt.ylim(-1.2,1.2)
plt.legend()                                              # 显示图例
plt.show()                                                # 显示绘图窗口

 

5.多个图形单独显示 

  • 使用numpy创建自变量数组x
  • 计算正弦、余弦和其他函数值。
  • 创建图形,使用subplot函数创建多个子图。
  • 在每个子图中绘制曲线,设置颜色和样式。
  • 限制y轴范围。
import numpy as np
import matplotlib.pyplot as pltx= np.linspace(0, 2*np.pi, 500)            # 创建自变量数组
y1 = np.sin(x)                             # 创建函数值数组
y2 = np.cos(x)
y3 = np.sin(x*x)
plt.figure(1)                              # 创建图形
ax1 = plt.subplot(2,2,1)                   # 第一行第一列图形
ax2 = plt.subplot(2,2,2)                   # 第一行第二列图形
ax3 = plt.subplot(212, facecolor='y')      # 第二行
plt.sca(ax1)                               # 选择ax1
plt.plot(x,y1,color='red')                 # 绘制红色曲线
plt.ylim(-1.2,1.2)                         # 限制y坐标轴范围
plt.sca(ax2)                               # 选择ax2
plt.plot(x,y2,'b--')                       # 绘制蓝色曲线
plt.ylim(-1.2,1.2)
plt.sca(ax3)                               # 选择ax3
plt.plot(x,y3,'g--')
plt.ylim(-1.2,1.2)
plt.show()

6.绘制有描边和填充效果的柱状图 

  • 使用numpy创建数据数组xy
  • 使用bar函数绘制柱状图,设置颜色、透明度、边框颜色和样式、填充效果。
  • 为每个柱形添加文本标注。
import numpy as np
import matplotlib.pyplot as plt#生成测试数据
x = np.linspace(0, 10, 11)
y = 11-x#绘制柱状图
plt.bar(x, y,color='#772277',        #柱的颜色alpha=0.8,              #透明度edgecolor='blue',       #边框颜色linestyle='--',         #边框样式为虚线linewidth=1,            #边框线宽hatch='*')              #内部使用五角星填充#为每个柱形添加文本标注
for xx, yy in zip(x,y):plt.text(xx-0.2, yy+0.1, '%2d' % yy)#显示图形
plt.show()

7.使用雷达图展示学生成绩 

  • 创建包含课程名称和成绩的数组。
  • 计算角度数组,均匀分布在圆周上。
  • 使用polar函数绘制雷达图,设置角度和数据,设置颜色、线型和端点符号。
  • 设置角度网格标签,使用中文字体。
  • 填充雷达图内部。
import numpy as np
import matplotlib.pyplot as pltcourses = ['C++', 'Python', '高数', '大学英语', '软件工程', '组成原理', '数字图像处理', '计算机图形学']
scores = [80, 95, 78, 85, 45, 65, 80, 60]
dataLength = len(scores)  # 数据长度# angles数组把圆周等分为dataLength份
angles = np.linspace(0, 2 * np.pi, dataLength, endpoint=False)# 闭合数据
scores.append(scores[0])
angles = np.append(angles, angles[0])# 绘制雷达图
plt.polar(angles, scores, 'rv--', linewidth=2)# 设置角度网格标签
plt.thetagrids(angles[:-1] * 180 / np.pi, courses, fontproperties='simhei')# 填充雷达图内部
plt.fill(angles, scores, facecolor='r', alpha=0.6)plt.show()

8.绘制三维曲面

  • 使用numpy创建数据数组xyz
  • 使用mpl_toolkits.mplot3d中的plot_surface函数绘制三维曲面。
  • 设置坐标轴标签。
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3dx,y = np.mgrid[-2:2:20j, -2:2:20j]        # 步长使用虚数# 虚部表示点的个数# 并且包含end
z = 50 * np.sin(x+y)                      # 测试数据
ax = plt.subplot(111, projection='3d')    # 三维图形
ax.plot_surface(x,y,z,rstride=2, cstride=1, cmap=plt.cm.Blues_r)
ax.set_xlabel('X')                        # 设置坐标轴标签
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

import pylab as pl
import numpy as np
import mpl_toolkits.mplot3d
rho, theta = np.mgrid[0:1:40j, 0:2*np.pi:40j]
z = rho**2
x = rho*np.cos(theta)
y = rho*np.sin(theta)
ax = pl.subplot(111, projection='3d')
ax.plot_surface(x,y,z)
pl.show()

9.绘制三维曲线 

  • 使用numpy创建自变量数组thetaz
  • 计算极坐标下的xy值。
  • 使用mpl_toolkits.mplot3d中的plot函数绘制三维曲线。
  • 设置图例。
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as pltmpl.rcParams['legend.fontsize'] = 10  # 图例字号
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')  # 三维图形
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-4, 4, 100) * 0.3  # 测试数据
r = z**3 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
ax.legend()
plt.show()

10.设置图例样式 

  • 使用numpy创建自变量数组t
  • 计算正弦函数值s和余弦函数值z
  • 使用plot函数绘制正弦和余弦曲线。
  • 设置图像标题,使用中文字体。
  • 使用legend函数设置图例字体、标题、位置、背景色、边框颜色和列数。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fmt = np.arange(0.0, 2*np.pi, 0.01)
s = np.sin(t)
z = np.cos(t)plt.plot(t, s, label='正弦')
plt.plot(t, z, label='余弦')
plt.title('sin-cos函数图像',          #标题文本fontproperties='STLITI',  #标题字体fontsize=24)              #标题字号myfont = fm.FontProperties(fname=r'C:\Windows\Fonts\STKAITI.ttf')
plt.legend(prop=myfont,               #图例字体title='Legend',            #图例标题loc='lower left',    #图例左下角位于图形(0.43,0.75)的位置bbox_to_anchor=(0.43,0.75),shadow=True,               #显示阴影facecolor='yellowgreen',   #图例背景色edgecolor='red',           #图例边框颜色ncol=2,                    #显示为两列markerfirst=False)         #图例文字在前,符号在后plt.show()

总结 

Matplotlib 是一个强大的 Python 可视化库,广泛应用于绘制各种图形。其基本用法包括导入必要的模块,如 numpymatplotlib.pyplot,并生成数据进行绘图。例如,可以通过线图、散点图、柱状图和雷达图来展示数据。创建三维图形需要使用 mpl_toolkits.mplot3d 库。使用 matplotlib 进行可视化可以通过简单的代码实现,包括设置标签、图例、颜色和线型等,以生成直观的图表来分析和展示数据。

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

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

相关文章

定制化即时通讯企业级移动门户解决方案,WorkPlus IM系统让工作事半功倍

随着移动设备的普及和移动办公的兴起,企业越来越需要一种定制化的即时通讯企业级移动门户解决方案来提高工作效率和团队协作效果。WorkPlus IM系统作为一种创新的解决方案,为企业提供了一个个性化定制、高度安全和高效便捷的移动门户平台。本文将对定制化…

BFF:优化前后端协作设计模式

BFF:优化前后端协作设计模式 BFF是什么 BFF即 Backends For Frontends (服务于前端的后端)。是一种介于前端和后端之间一种重要的通信设计模式。它旨在解决前端与后端协作中的复杂性问题。 背景 行业背景:传统前端应用(如Web应用、移动应…

微服务-MybatisPlus下

微服务-MybatisPlus下 文章目录 微服务-MybatisPlus下1 MybatisPlus扩展功能1.1 代码生成1.2 静态工具1.3 逻辑删除1.4 枚举处理器1.5 JSON处理器**1.5.1.定义实体****1.5.2.使用类型处理器** **1.6 配置加密(选学)**1.6.1.生成秘钥**1.6.2.修改配置****…

网络安全防御【IPsec VPN搭建】

目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤: 修改双机热备的为主备模式: 2、配置交换机LSW6新增的配置: 3、防火墙(FW4)做相关的基础配置: 4、搭建IPsec VPN通道 (1…

Java代码基础算法练习-求杨辉三角第n行的值-2024.07.27

任务描述&#xff1a; 给定一个非负整数n&#xff0c;生成「杨辉三角」的第n行。&#xff08;1<n<10&#xff09;在「杨辉三角」中&#xff0c;每 个数是它左上方和右上方的数的和。 &#xff08;提示&#xff0c;第一列数值为1&#xff0c;如数组下标用i,j表示&#xf…

独占电脑资源来执行一个应用

1. 背景 在人工智能时代&#xff0c;随着神经网络的发展&#xff0c;训练人工智能模型需要越来越多的硬件资源&#xff0c;例如&#xff0c;利用10万条棋局数据、使用一台PC电脑、完整地训练一次确定性神经网络五子棋模型&#xff0c;需要花费一年半的时间。随着训练数据的增长…

APP逆向 day23司小宝逆向

一.前言 今天也是讲最后一个基础知识点了&#xff0c;ptrace占坑&#xff0c;这个也算是一个坑&#xff0c;今天通过这个案例和大家讲一下&#xff0c;今天这个案例我们来整验证码登录&#xff0c;版本选择4.7.8 二.抓包分析 抓包发现&#xff0c;请求头里的东西通过改包发现…

Spring Boot:图书管理系统(一)

1.编写用户登录接口 代码&#xff1a; package com.example.demo;import jakarta.servlet.http.HttpSession; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotatio…

技术成神之路:设计模式(九)备忘录模式

介绍 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为设计模式&#xff0c;它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。通过备忘录模式&#xff0c;可以在程序运行过程中保存和恢复对象的某个状态&#xff0c;从而实现“撤销”等功能。 1.定义 备忘…

【BUG】已解决:UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10

UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10 目录 UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#x…

使用python内置的虚拟环境

在一台机器上安装了太多的第三方python库&#xff0c;它们依赖相同的库可能版本不同&#xff0c;就会造成某些第三方库崩溃&#xff0c;之前可以使用的库可能就会坏掉不能用了&#xff0c;所以可以使用虚拟环境运行不同的程序&#xff0c;python有内置的虚拟环境&#xff1b; …

前端八股文 promise async await 的理解

promise是什么 Promise 是异步编程的一种解决方案&#xff0c;比传统的解决方案——回调函数和事件——更合理和更强大。 目的 解析 吴优编程 &#xff08;解决异步编程中的嵌套问题的&#xff0c;将嵌套的格式 用peomise 写成同步&#xff09; promise.then() 是成功后继…

Cocos Creator2D游戏开发(4)-飞机大战(2)-编辑器界面

编辑器几个重要板块 参考: https://docs.cocos.com/creator/3.8/manual/zh/editor/ (1) 场景编辑器: 仅看2D视图: 按钮作用依次是: 平移, 旋转,缩放,矩形变换,增量吸附工具,最后三个,前俩是变换工具,最后一个是布局组件 矩形变换: 中心点和锚点切换 以后用到慢慢整吧! (2)层…

AI服务器产业链研究分析

AI服务器产业链初探 一、AI服务器的技术架构与构成 AI服务器的主要构成包括&#xff1a; 芯片种类丰富&#xff0c;包括X86、ARM、MIPS等架构的CPU&#xff0c;以及GPU、FPGA、ASIC和NPU等。 内存&#xff1a;DRAM、HBM&#xff08;高带宽存储&#xff09;。 本地存储&#…

前端开发调试工具推荐分类整理

具体前往&#xff1a;前端调试工具分类整理汇总

黑马Java零基础视频教程精华部分_6_字符串

系列文章目录 文章目录 系列文章目录前言一、API是什么&#xff1f; API帮助文档案例&#xff1a;API文档练习Step1&#xff1a;查找文档中Scanner内容。Step2&#xff1a;学习文档中Scanner内容。 二、字符串String类1、String概述总结&#xff1a; 创建String对象的两种方式2…

java学习--String类StringBuffer类StringBuilder类

String类简介 关系图&#xff1a; value不可修改的是value指向的地址&#xff0c;因为可以value为一个数组&#xff0c;而数组名其实就相当于一个指针&#xff0c;指向着一块地址&#xff0c;然后在指向的地址里存放相应的值&#xff0c;值可以任意是什么&#xff0c;但是地址不…

RedHat Enterprise Linux 7 YUM源(本地/网络源)配置详解

目录 一、挂载 二、建立本地源 三、建立网络源 四、验证可行性 一、挂载 ——将光盘挂载到 /mnt 下 当/mnt中有如图内容时&#xff0c;即挂载成功 若挂载光驱/dev/sr0时报错&#xff1a;mount: no medium found on /dev/sr0 解决措施&#xff1a;查看该设备状态是否全部勾选…

MATLAB仿真:数字信号处理IIR数字滤波器设计

目录 1&#xff0e;实验目的 2&#xff0e;实验原理 3&#xff0e;实验仪器及设备 4. 实验内容及步骤 5&#xff0e;信号产生函数mstg清单 6.实验程序及波形如下&#xff1a; 1&#xff0e;实验目的 &#xff08;1&#xff09;熟悉用双线性变换法设计IIR数字滤波器的原理…

Python——Pandas(第三讲)

文章目录 修改替换变量值对应数值的替换指定数值范围的替换 虚拟变量变换数值变量分段数据分组基于拆分进行筛选 分组汇总使用 agg 函数进行汇总引用自定义函数 长宽格式转换转换为最简格式长宽型格式的自由互转 多个数据源的合并数据的横向合并concat 命令 处理缺失值认识缺失…