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

news2024/11/17 9:51:23

目录

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 plt

x = 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 plt

x= 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 plt

courses = ['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.mplot3d

x,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 plt

mpl.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 fm

t = 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.coloradmin.cn/o/1955706.html

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

相关文章

在 Postman 中设置全局 token

目录 问题描述解决方案 问题描述 在使用 Postman 进行接口测试时,经常会遇到在 Header 中添加 token 的情况。当接口数量较多时,需要为每个接口进行设置,而且当 token 失效时需要重新获取并设置,这样一来效率较低。 解决方案 下…

idea-springboot后端所有@注释含义汇总-持续更新!

(1)启动类 ①SpringBootApplication 出现这个代表这个就是整个程序的入口,是运行的开始位置 (2)Dao层 ①Repository 作用就是声明自己这个为bean文件(每一个controller都是一个bean文件)&am…

搭建自己的金融数据源和量化分析平台(四):自动化更新上市公司所属一级、二级行业以及股票上市状态

前面做了更新沪深交易所的上市股票列表的读取和更新,但一旦股票退市则需要在数据库里将该股票状态更新为退市,同时附上退市日期,将股票名更改为XX退。 此外深交所下载的xls解析出来是没有上市公司所属的二级行业的,因此还需要建立…

永磁同步电机无速度算法--非线性磁链观测器

非线性磁链观测器顾名思义观测器的状态变量为磁链值,观测的磁链值收敛于电机实际磁链值,观测器收敛。非线性是由于观测器存在sin和cos项,所以是非线性观测器 一、原理介绍 表贴式永磁同步电机αβ轴电压方程: 将公式变换 定义状态变量X: 定…

网络安全 DVWA通关指南 DVWA Command Injection(命令注入)

DVWA Command Injection&#xff08;命令注入&#xff09; 文章目录 DVWA Command Injection&#xff08;命令注入&#xff09;LowMediumHighImpossible Low 1、分析网页源代码 <?php// 当表单提交按钮&#xff08;Submit&#xff09;被触发时执行以下代码 if (isset($_P…

用Python编写用于IAR内存上传和下载的motorola格式转换工具

需求背景 IAR导出和载入内存支持 motorola 格式和 intel-extended 格式&#xff1a; 其中 motorola 格式以16进制表示&#xff0c;在输出文件中可以直接看到内存地址信息&#xff0c;并且文本长度比 intel-extended 格式更短。 所以我这里以 motorola 格式为基础&#xff0c;…

【b站-湖科大教书匠】6 应用层 - 计算机网络微课堂

课程地址&#xff1a;【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 6 应用层 6.1 应用层概述 6.2 客户-服务器方式和对等方…

【iOS】暑期第一周——ZARA app仿写

目录 前言无限轮播图分栏控件和滚动视图自定义cell遇到的问题调整图标大小单元格附件视图设置 总结 前言 暑假学习的第一周任务是对ZARA app进行仿写&#xff0c;充分运用之前学习的Objective-C语言和UI控件。我在编写demo的过程中遇到了一些问题&#xff0c;特写该博客作为学习…

微信小程序配置访问服务器失败所发现的问题及解决方案

目录 事前现象问题1&#xff1a;问题现象&#xff1a;问题分析&#xff1a; 问题2&#xff1a;问题现象&#xff1a;问题分析&#xff1a;解决方案&#xff1a; 事后现象 事前现象 问题1&#xff1a; 问题现象&#xff1a; 在本地调试时&#xff0c;一切顺利&#xff0c;但一…

2.10.批量归一化

批量归一化 ​ 损失出现在最后&#xff0c;所以后面的层训练比较快&#xff0c;而数据在最底部&#xff0c;则&#xff1a; 底部的层训练较慢底部层一变化&#xff0c;所有都会跟着变化最后的层需要重新学习多次 ​ 最后导致收敛变慢。 ​ 或许我们可以通过固定输出和梯度的…

古文:李密《陈情表》

原文 臣密言&#xff1a;臣以险衅&#xff0c;夙遭闵凶。生孩六月&#xff0c;慈父见背&#xff1b;行年四岁&#xff0c;舅夺母志。祖母刘愍臣孤弱&#xff0c;躬亲抚养。臣少多疾病&#xff0c;九岁不行&#xff0c;零丁孤苦&#xff0c;至于成立。既无伯叔&#xff0c;终鲜…

说说你对redis的理解

数据结构 String&#xff1a;缓存对象、常规计数、分布式锁、共享session信息 hash&#xff1a;&#xff08;包含键值对的无序散列表&#xff09; list&#xff1a;消息队列 set&#xff1a;聚合计算、点赞、公共关注、抽奖活动 zset&#xff1a;&#xff08;格式key、val…

【Streamlit学习笔记】Streamlit-ECharts热力图tooltip提示信息拓展

Streamlit-ECharts Streamlit-ECharts是一个Streamlit组件&#xff0c;用于在Python应用程序中展示ECharts图表。ECharts是一个由百度开发的JavaScript数据可视化库Apache ECharts 安装模块库 pip install streamlitpip install streamlit-echarts绘制热力图展示 在基础热力…

【强化学习的数学原理】课程笔记--5(值函数近似,策略梯度方法)

目录 值函数近似一个例子TD 算法的值函数近似形式Sarsa, Q-learning 的值函数近似形式Deep Q-learningexperience replay 策略梯度方法&#xff08;Policy Gradient&#xff09;Policy Gradient 的目标函数目标函数 1目标函数 2两种目标函数的同一性 Policy Gradient 目标函数的…

18967 六一儿童节

这个问题可以使用贪心算法来解决。我们可以先将孩子们的需求和巧&#xfffd;&#xfffd;&#xfffd;力的重量都进行排序&#xff0c;然后从最大的需求开始&#xff0c;找到能满足这个需求的最大的巧克力&#xff0c;将其分给这个孩子。然后继续处理下一个需求&#xff0c;直…

基于微信小程序+SpringBoot+Vue的自助点餐系统(带1w+文档)

基于微信小程序SpringBootVue的自助点餐系统(带1w文档) 基于微信小程序SpringBootVue的自助点餐系统(带1w文档) 基于微信小程序的自助点餐系统前后台分离&#xff0c;让商品订单&#xff0c;用户反馈信息&#xff0c;商品信息等相关信息集中在后台让管理员管理&#xff0c;让用…

【进程间通信机制】管道和 FIFO、信号、消息队列、信号量、共享内存、套接字(Socket)

进程详细剖析&#xff0c;移步&#xff1a;https://blog.csdn.net/Thmos_vader/article/details/140750535 进程间通信 前文介绍&#xff1a;如何通过 fork()或 vfork()创建子进程&#xff0c;以及在子进程中通过 exec()函数执行一个新的程序&#xff1b; 谓进程间通信指的是…

考题相似度 AI 分析 API 数据接口

考题相似度 AI 分析 API 数据接口 基于 AI 的相似度评估&#xff0c;专有 AI 模型&#xff0c;包含评估详情 。 1. 产品功能 基于自有专业模型进行 AI 智能分析&#xff1b;提供详细的相似度评分和结果描述&#xff1b;高效的模型分析性能&#xff1b;全接口支持 HTTPS&#…

乐鑫ESP32-H2设备联网芯片,集成多种安全功能方案,启明云端乐鑫代理商

在数字化浪潮的推动下&#xff0c;物联网正以前所未有的速度融入我们的日常生活。然而&#xff0c;随着设备的激增&#xff0c;安全问题也日益成为公众关注的焦点。 乐鑫ESP32-H2致力于为所有开发者提供高性价比的安全解决方案&#xff0c;这款芯片经过专门设计以集成多种安全…