【数学建模美赛M奖速成系列】Matplotlib绘图技巧(三)

news2025/4/22 3:18:04

Matplotlib绘图技巧(三)

  • 写在前面
  • 7. 雷达图
    • 7.1 圆形雷达图
    • 7.2 多边形雷达图
  • 8. 极坐标图 subplot
  • 9. 折线图 plot
  • 10. 灰度图 meshgrid
  • 11. 热力图
    • 11.1 自定义colormap
  • 12. 箱线图 boxplot

写在前面

终于更新完Matplotlib绘图技巧的全部内容,有需要完整文档的同学欢迎留言~

7. 雷达图

7.1 圆形雷达图

import matplotlib.pyplot as plt
import numpy as np
p1={"编程能力":60,"沟通技能":70,"专业知识":65,"团体协作":75,"工具掌握":80} #创建第一个人的数据
p2={"编程能力":70,"沟通技能":60,"专业知识":75,"团体协作":65,"工具掌握":70} #创建第二个人的数据
# 分别提取两个人的信息和对应的标签
data1=np.array([i for i in
p1.values()]).astype(int) #提取第一个人的信息
data2=np.array([i for i in
p2.values()]).astype(int) #提取第二个人的信息
label=np.array([j for j in p1.keys()]) #提取标签
angle = np.linspace(0, 2*np.pi, len(data1),
endpoint=False) #data里有几个数据,就把整圆360°分成几份
# 闭合的目的是在绘图时能够生成闭合的环
angles = np.concatenate((angle, [angle[0]])) #增加第一个angle到所有angle里,以实现闭合
data1 = np.concatenate((data1, [data1[0]])) #增加第一个人的第一个data到第一个人所有的data里,以实现闭合
data2 = np.concatenate((data2, [data2[0]])) #增加第二个人的第一个data到第二个人所有的data里,以实现闭合
fig = plt.figure()
ax = fig.add_subplot(111, polar=True) # 设置坐标轴为极坐标
# 绘制两个数据样本的闭合环
ax.plot(angles, data1, 'bo-', linewidth=2,
color='green', alpha=0.5)
ax.fill(angles, data1, facecolor='red',
alpha=0.2)
ax.plot(angles, data2, 'bo-', linewidth=2,
color='blue', alpha=0.5) #
ax.fill(angles, data2, facecolor='steelblue',
alpha=0.5)
# 设置圆周每一维上显示的样本
ax.set_thetagrids(angles * 180/np.pi, label,
fontproperties='SimHei', color='gray',
fontsize=13)
# 设置在半径方向上要显示的文本和显示文本的角度
ax.set_rgrids(np.arange(0, 81, 20),angle=45)
ax.set_rlim(0, 100)
ax.set_title('matplotlib 雷达图', va='bottom',
fontproperties='SimHei', color='gold',
fontsize=15)
#help(ax.set_thetagrids)

在这里插入图片描述

7.2 多边形雷达图

import numpy as np
import matplotlib.pyplot as plt
def plot_radar(data):
criterion = [1, 1, 1, 1, 1, 1] # 基准雷达图
angles = np.linspace(0, 2 * np.pi, 5,
endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
#print(criterion)
#print(angles)
fig = plt.figure(facecolor='#87CEEB') # 创建画板
并填充颜色
ax = fig.add_subplot(111, polar=True,) # 设置
坐标为极坐标
# 绘制三个五边形
floor = 0
ceil = 2
labels = np.array(['x1', 'x2', 'x3', 'x4',
'x5'])
# 绘制五边形的循环
for i in np.arange(floor, ceil + 0.5 ,0.5):
ax.plot(angles, [i] * (6), '-', lw= 0.5,
color='black')
for i in range(5):
ax.plot([angles[i], angles[i]], [floor,
ceil], '-',lw=0.5, color='black')
# 绘制雷达图
ax.plot(angles, criterion, 'b-', lw=2,
alpha=0.4)
ax.fill(angles, criterion, facecolor='b',
alpha=0.3) #填充
ax.plot(angles, data, 'b-', lw=2, alpha=0.35)
ax.fill(angles, data, facecolor='b',
alpha=0.25)
ax.set_thetagrids(angles * 180 / np.pi,
labels)
ax.spines['polar'].set_visible(False)#不显示极坐最外的圆形
ax.set_theta_zero_location('N')#设置极坐标的起点(即0度)在正上方向
ax.grid(False)# 不显示分隔线
ax.set_yticks([]) # 不显示坐标间隔
ax.set_title('xxxxxxxxxxxx', va='bottom',
fontproperties='SimHei')
ax.set_facecolor('#87ceeb') # 填充绘图区域的颜色
# 保存文png图片
plt.subplots_adjust(left=0.09, right=1,
wspace=0.25, hspace=0.25, bottom=0.13, top=0.91)
plt.savefig('a_1.png')
plt.show()
data = [0.8, 0.9, 1.2, 1.0, 1.5, 0.8]
plot_radar(data)

在这里插入图片描述

8. 极坐标图 subplot

import matplotlib.pyplot as plt
import numpy as np
N=20
theta=np.linspace(0,2*np.pi,N,endpoint=False)#均分角度
radii=10*np.random.rand(N)#随机角度
width=np.pi/4*np.random.rand(N)#随机宽度
ax=plt.subplot(111,projection='polar')#极坐标图绘制
bars=ax.bar(theta,radii,width=width,bottom=0.0)#哪个角度画,长度,扇形角度,从距离圆心0的地方开始画
for r,bar in zip(radii,bars):
bar.set_facecolor(plt.cm.viridis(r/10.0))
bar.set_alpha(0.5) #添加颜色
plt.title('polar')
plt.show()

在这里插入图片描述

9. 折线图 plot

import matplotlib.pyplot as plt
x = [5, 10, 15, 20, 25, 30, 35, 40]
y = [17, 24, 29, 36, 38, 47, 59, 80]
plt.plot(x, y, 'rs-', markersize=10)

在这里插入图片描述

10. 灰度图 meshgrid

灰度图和热力图的区别其实在于colormap的不同,灰度图采用的灰度map,而热力图一般采用的是多个颜色组成的彩色的map。

import numpy as np
import matplotlib.pyplot as plt
def f(x,y):
return (1-x/2+x *5+y *3)*np.exp(-x *2-y *2)
n = 10
x = np.linspace(-3,3,3.5*n)
y = np.linspace(-3,3,3.0*n)
X,Y = np.meshgrid(x,y)
Z = f(X,Y)
plt.axes([0.025,0.025,0.95,0.95])
plt.imshow(Z, interpolation='bicubic',
cmap='bone', origin='lower')
plt.colorbar(shrink=0.9
plt.xticks([]), plt.yticks([])
# savefig(' ./figures/imshow_ex.png', dpi=48)
plt.show()

在这里插入图片描述

11. 热力图

import matplotlib.pyplot as plt
import matplotlib.colors as col
import matplotlib.cm as cm
import numpy as np
points = np.arange(-5, 5, 0.01)
# print(points)
xs, ys = np.meshgrid(points, points)
z = np.sqrt(xs *2 + ys *2)
# print(z)
# 自定义colormap
start_color = 'red'
end_color = 'blue'
cmap_1 =
col.LinearSegmentedColormap.from_list('cmap1',
[start_color, end_color])
plt.imshow(z, cmap=cmap_1, alpha=0.3)
plt.show()

#

11.1 自定义colormap

import matplotlib.pyplot as plt
points = np.arange(-5, 5, 1)
# print(points)
xs, ys = np.meshgrid(points, points)
z = np.sqrt(xs *2 + ys *2)
# 列表中包含的颜色数目并不固定,可以选多个
color = ['red', 'green', 'blue']
cmap_1 =
col.LinearSegmentedColormap.from_list('cmap1',
[start_color, end_color])
plt.imshow(z, cmap=cmap_1, alpha=1)
plt.colorbar(shrink=0.92)
plt.show()

在这里插入图片描述

12. 箱线图 boxplot

箱线图是一种用作显示一组数据分散情况的统计图
在这里插入图片描述
箱线图有五个参数,分别为:

  • 下边缘(Q1),表示最小值;
  • 下四分位数(Q2),又称“第一四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;
  • 中位数(Q3),又称“第二四分位数”等于该样本中所有数值由小到大排列后第50%的数字;
  • 上四分位数(Q4),又称“第三四分位数”等于该样本中所有
  • 数值由小到大排列后第75%的数字;
  • 上边缘(Q5),表述最大值。

箱线图各参数和正态分布之间的对比如下图:
在这里插入图片描述

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import numpy as np
# 0、导入数据集
df = pd.read_excel('boxplot_data.xlsx', 'Sheet1')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.boxplot(df['Age'])
plt.show()

在这里插入图片描述

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

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

相关文章

如何用Python批量计算Word中的算式

一、问题的提出 到了期末,大家都在忙着写总结、改试卷、算工作量,写总结可以借助于ChatGPT,改试卷可以用星火的自动批阅功能,算工作量就是一项比较棘手的问题,因为它涉及很多算式,有时需要老师用计算器算来…

我在Vscode学OpenCV 图像处理四(轮廓查找 cv2.findContours() cv2.drawContours())-- 待补充

图像处理四(轮廓查找) 一、前言1.1 边缘检测和轮廓查找的区别是什么1.1.1 边缘检测:1.1.2 轮廓查找: 1.2 边缘检测和轮廓查找在图像处理中的关系和流程 二、查找并绘制轮廓2.1 cv2.findContours():2.1.1 详细介绍&…

x-cmd pkg | openssl - 密码学开源工具集

目录 简介首次用户技术特点竞品分析进一步阅读 简介 OpenSSL 是一个开源的密码库和 SSL/TLS 协议实现,它提供了一组密码学工具和加密功能,用于保护数据通信的安全性。项目发展历史可以追溯到 1998 年,源自 Eric A. Young 和 Tim J. Hudson 开…

计算机毕业设计------ssm茶叶溯源系统

项目介绍 茶叶溯源系统,分为前台与后台。普通用户可在前台通过18位的编码查询茶叶的出售历史。 后台分为两种角色,管理员与经销商; 管理员主要功能包括: 主界面; 管理员管理:管理员列表、添加管理员&am…

软件测试/测试开发丨Python 内置装饰器 学习笔记

内置类装饰器 不用实例化、直接调用提升代码的可读性 内置装饰器含义classmethod类方法staticmethod静态方法 普通方法 定义: 第一个参数为self,代表 实例本身 调用: 要有实例化的过程,通过 实例对象.方法名 调用 # 1. 定义 c…

自定义docker镜像,ubuntu安装命令并导出

文章目录 问题现象解决步骤相关命令详细介绍docker save 与 docker loaddocker import 与 docker exportdocker commit 问题现象 我们的通讯服务,需要监测前端设备的在线情况(是否在线、丢包率、延迟等),使用ping命令去实现此功能…

unity学习笔记----游戏练习03

一、修复植物种植的问题 1.当手上存在植物时,再次点击卡片上的植物就会在手上添加新的植物,需要修改成只有手上没有植物时才能再次获取到植物。需要修改AddPlant方法。 public bool AddPlant(PlantType plantType) { //防止手上出现多个植…

Python pandas 操作 excel 详解

文章目录 1 概述1.1 pandas 和 openpyxl 区别1.2 Series 和 DataFrame 2 常用操作2.1 创建 Excel:to_excel()2.2 读取 Excel:read_excel()2.2.1 header:标题的行索引2.2.2 index_col:索引列2.2.3 dtype:数据类型2.2.4 …

Java基础语法(注释,关键字,字面量,变量,数据类型,标识符,键盘录入,IDEA安装,类,模块,项目)

文章目录 day02 - Java基础语法1. 注释使用的技巧注意点 2. 关键字2.1 概念2.2 第一个关键字class 3. 字面量区分技巧 4. 变量4.1 什么是变量?4.2 变量的定义格式4.2.1 格式详解4.2.2 常用的数据类型4.2.3 变量的注意事项 4.3 变量的练习 5. 数据类型5.1 Java语言数…

YOLOv5算法进阶改进(9)— 引入ASPP | 空洞空间金字塔池化

前言:Hello大家好,我是小哥谈。ASPP是空洞空间金字塔池化(Atrous Spatial Pyramid Pooling)的缩写。它是一种用于图像语义分割任务的特征提取方法。ASPP通过在不同尺度上进行空洞卷积操作,从而捕捉到图像中不同尺度的上下文信息。ASPP的主要思想是在输入特征图上应用多个不…

High-Throughput Algae Cell Detection

一、数据集 About Dataset Microalgae, as an important natural resource, find widespread applications in various fields such as marine environments, biomedical research, clean energy, and food engineering. Monitoring the abundance and species composition of…

MFC消息机制详细剖析

易语言程序的破解99%的时候都需要用到FF55FC5F5E这个特征码 新建一个MFC应用程序: 去编辑MFC的.rc资源文件来DIY窗体 静态编译的,把很多静态库的代码都添加进去了 ,所以速度很慢 消息机制针对的是GUI程序(比如窗口程序&#xf…

51单片机项目(24)——基于51单片机的温控风扇protues仿真

1.功能设计 使用传感器测量温度,并将温度显示在LCD1602上。如果温度超过阈值,那么就打开风扇,否则风扇不打开。(仿真的时候,用直流电机模拟风扇)。 仿真截图如下: 此时温度是27度,我…

感染了后缀为.[sqlback@memeware.net].2700勒索病毒如何应对?数据能够恢复吗?

导言: 近期,[sqlbackmemeware.net].2700 勒索病毒成为网络安全的一大威胁。该勒索病毒采用高度复杂的加密算法,将用户文件加密并勒索赎金。了解该病毒的特征对于有效恢复被加密数据以及预防进一步感染至关重要。如果受感染的数据确实有恢复的…

私有部署ELK,搭建自己的日志中心(三)-- Logstash的安装与使用

一、部署ELK 上文把采集端filebeat如何使用介绍完,现在随着数据的链路,继续~~ 同样,使用docker-compose部署: version: "3" services:elasticsearch:container_name: elasticsearchimage: elastic/elasticsearch:7.9…

『精』CSS 小技巧之BEM规范

『精』CSS 小技巧之BEM规范 文章目录 『精』CSS 小技巧之BEM规范一、什么是BEM?二、BEM要怎么用?三、不用BEM会少个胳膊吗?💊四、Sass与BEM的结合🎈五、块与修饰符应放在一块👿参考资料💘推荐博…

Redis经典五大类型源码及底层实现(一)

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…

年度总结|存储随笔2023年度最受欢迎文章榜单TOP15-part1

原创 古猫先生 存储随笔 2023-12-31 08:31 发表于上海 回首2023 2-8月份有近半年时间基本处于断更状态 好在8月份后小编没有松懈 (虽然2023年度总结,更像是近4个月总结) 本年度顺利加V啦! 感谢各位粉丝朋友的一路支持与陪伴 …

Linux之磁盘分区,挂载

Linux分区 分区介绍 对linux来说无论有几个分区,分给哪个目录使用,归根结底只有一个根目录,linux中每个分区都是用来组成整个文件系统的一部分。linux采用“载入"的处理方法,他的整个文件系统中包含一整套的文件和目录&…

osg::DrawElements*系列函数及GL_QUAD_STRIP、GL_QUADS绘制四边形效率对比

目录 1. 前言 2. osg::DrawElements*系列函数用法说明 3. GL_QUADS、GL_QUAD_STRIP用法及不同点 4. 效率对比 5. 总结 6. 参考资料 1. 前言 利用osg绘制图元,如:三角形、四边形等,一般用osg::PrimitiveSet类。其派生出了很多子类&#…