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

Matplotlib绘图技巧(二)

  • 写在前面
  • 2. 函数间区域填充函数fill_between()和fill()
    • 参数:
  • 3. 散点图 scatter
  • 4. 直方图 hist
  • 5. 条形图 bar
    • 5.1 一个数据样本的条形图
      • 参数:
    • 5.2 多个数据样本进行对比的直方图
    • 5.3 水平条形图
      • 参数
    • 5.4 绘制不同数据样本进行对比的水平条形图
    • 5.5 堆叠条形图
  • 6. 等高线图 meshgrid

写在前面

前面我们讲过,好的图表在论文写作中是相当重要的,这里学姐为继续为大家分享一些Matplotlib快速入门内容以及论文绘图的技巧,帮助大家快速学习绘图。这里整理了完整的文档与技巧,有需要的同学看文章最后,另外,如果没有美赛经验想要获奖,欢迎咨询哦~

2. 函数间区域填充函数fill_between()和fill()

plt.fill_between(x, y1, y2, where, color, alpha)

参数:

  • x: x轴坐标值,为一个list
  • y1: 第一条曲线对应的函数值,为x对应的函数值list
  • y2: 第二条曲线对应的函数值,为x对应的函数值list
  • where: 条件表达式,用于判断某个区间内是否进行填充,如果判断为True,则进行填充,否则不填充
  • color: 填充区域的颜色
  • alpha: 填充区域的透明度,1表示不透明,0表示完全透明
    一些实例可以参考基于matplotlib的数据可视化(图形填充函数fill和fill_between)
import numpy as np
import matplotlib.pyplot as plt
n = 256
X = np.linspace(-np.pi,np.pi,n,endpoint=True)
Y = np.sin(2*X)
plt.axes([0.025,0.025,0.95,0.95])
plt.plot (X, Y+1, color='blue', alpha=1.00)
plt.fill_between(X, 1, Y+1, color='blue',
alpha=.25)
plt.plot (X, Y-1, color='blue', alpha=1.00)
plt.fill_between(X, -1, Y-1, (Y-1) > -1,
color='blue', alpha=.25)
plt.fill_between(X, -1, Y-1, (Y-1) < -1,
color='red', alpha=.25)
plt.xlim(-np.pi,np.pi), plt.xticks([])
plt.ylim(-2.5,2.5), plt.yticks([])
# savefig(' ./figures/plot_ex.png',dpi=48)
plt.show()

在这里插入图片描述

3. 散点图 scatter

scatter()
前面已经详细讲过,可以看上一篇文章哦。

import numpy as np
import matplotlib.pyplot as plt
n = 1024
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)
T = np.arctan2(Y,X) # T中包含了数据点的颜色到当前
colormap的映射值
# print(T.shape)
plt.axes([0.025,0.025,0.95,0.95])
plt.scatter(X,Y, s=75, c=T, alpha=.5)
plt.xlim(-1.5,1.5), plt.xticks([])
plt.ylim(-1.5,1.5), plt.yticks([])
# savefig(' ./figures/scatter_ex.png',dpi=48)
plt.show()

在这里插入图片描述

4. 直方图 hist

直方图和条形图外观上看上去差不多,但概念和实现上完全不同,需要加以区分:

  • 条形图: 每个条形表示一个类别,条形的高度表示类别的频数。
  • 直方图: 用长条形的面积表示频数,宽度表示数据范围,高度为频数宽度\frac{频数}{宽度} 宽度频数
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
# 设置matplotlib正常显示中文和负号
matplotlib.rcParams['font.sans-serif']=['SimHei']
# 用黑体显示中文
matplotlib.rcParams['axes.unicode_minus']=False
# 正常显示负号
# 随机生成(10000,)服从正态分布的数据
data = np.random.randn(10000)
"""
绘制直方图
data:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
normed:是否将得到的直方图向量归一化,可选项,默认为0,代表
不归一化,显示频数。normed=1,表示归一化,显示频率。
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
"""
plt.hist(data, bins=40, normed=0,
facecolor="blue", edgecolor="black", alpha=0.7)
# 显示横轴标签
plt.xlabel("区间")
# 显示纵轴标签
plt.ylabel("频数/频率")
# 显示图标题
plt.title("频数/频率分布直方图")
plt.show()

在这里插入图片描述

5. 条形图 bar

5.1 一个数据样本的条形图

bar()

参数:

  • x: 长条形中的横坐标点list
  • left: 长条形左边沿x轴坐标list
  • height: 长条形对应每个横坐标的高度值
  • width: 长条形的宽度,默认值为0.8
  • label: 每个数据样本对应的label,后面调用legend()函数可以显示图例
  • alpha: 透明度
from pylab import *
n = 12
X = np.arange(n)
Y1 = (1-X/float(n)) *
np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n)) *
np.random.uniform(0.5,1.0,n)
bar(X, +Y1, facecolor='#9999ff',
edgecolor='white')
bar(X, -Y2, facecolor='#ff9999',
edgecolor='white')
#xticks(X)
for x,y in zip(X,Y1):
text(x, y+0.05, '%.2f' % y, ha='center', va=
'bottom')
for x, y in zip(X, -Y2)
text(x, y-0.15, '%.2f'% y, ha='center',
va='bottom')
ylim(-1.25,+1.25)
show()
12345678910111213141516171819

在这里插入图片描述

5.2 多个数据样本进行对比的直方图

import matplotlib.pyplot as plt
import matplotlib
"""
多个数据样本进行对比时,要注意每个数据样本对应的颜色,对每
个条形的注释文本设置和横纵坐标的设置
"""
# 设置中文字体和负号正常显示
matplotlib.rcParams['font.sans-serif'] =
['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
label_list = ['2014', '2015', '2016', '2017'] #
横坐标刻度显示值
num_list1 = [20, 30, 15, 35] # 纵坐标值1
num_list2 = [15, 30, 40, 20] # 纵坐标值2
x = range(len(num_list1))
# 绘制条形图
rects1 = plt.bar(x, height=num_list1, width=0.4,
alpha=0.5, color='red', label='部门一')
rects2 = plt.bar([i+0.4 for i in x],
height=num_list2, width=0.4, color='green',
label='部门二')
# 设置y轴属性
plt.ylim(0, 50)
plt.ylabel('数量')
# 设置x轴属性
plt.xticks([index+0.2 for index in x],
label_list)
plt.xlabel("年份")
plt.title('某某公司')
plt.legend()
# 显示文本
for rect in rects1:
height = rect.get_height()
plt.text(rect.get_x() + rect.get_width() / 2,
height + 1, str(height), ha='center',
va='bottom')
for rect in rects2:
height = rect.get_height()
plt.text(rect.get_x() + rect.get_width() / 2,
height + 1, str(height), ha='center',
va='bottom')
plt.show()

在这里插入图片描述

5.3 水平条形图

bar(y, width, height, left, *, align=‘center’, *kwargs)

参数

  • y: y轴坐标值list
  • left: 条形的左边沿对应的横坐标,即从这个点开始计算条形的宽度
  • width: 每个y轴坐标值对应的条形的宽度list
  • height: 条形的高度,在水平条形图中,条形的高度都是固定的。
  • align: center或者edge,如果是center,则坐标点在条形的中间,如果是edge,则坐标点对应条形的底部
  • color: 填充色
  • edgecolor: 条形的边缘线条颜色
  • linewidth: 条形的边缘线条线宽
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] =
['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
price = [39.5, 39.9, 45.4, 38.9, 33.34]
# 绘制水平条形图
plt.barh(range(5), price, height=0.7,
color='steelblue', alpha=0.5)
plt.yticks(range(5), ['亚马逊', '当当网', '中国图书
网', '京东', '天猫'])
plt.xlim(30, 47)
plt.xlabel('价格')
plt.title('不同平台图书价格')
for x, y in enumerate(price):
plt.text(y+0.2, x-0.1, '%s'%y)
plt.show()

在这里插入图片描述

5.4 绘制不同数据样本进行对比的水平条形图

import matplotlib.pyplot as plt
import matplotlib
# 设置中文字体和负号正常显示
matplotlib.rcParams['font.sans-serif'] =
['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
label_list = ['2014', '2015', '2016', '2017']
num_list1 = [20, 30, 15, 35]
num_list2 = [15, 33, 40, 20]
y = range(1, len(num_list1)+1)
y = [index*1.5 for index in y]
plt.barh(y, num_list1, height=0.4,
color='steelblue', alpha=0.5)
plt.barh([index-0.4 for index in y], num_list2,
height=0.4, color='red', alpha=0.5)
plt.yticks([index-0.2 for index in y],
label_list)
plt.ylabel('年份')
plt.xlim(0, 45)
plt.xlabel('数量')
for x, y1 in zip(num_list1, y):
plt.text(x+0.8, y1-0.1, str(x), ha='center',
va='bottom')
for x, y2 in zip(num_list2, y):
plt.text(x+0.8, y2-0.5, str(x), ha='center',
va='bottom')
plt.show()

在这里插入图片描述

5.5 堆叠条形图

import matplotlib.pyplot as plt
x = [52, 69, 58, 12, 39, 75]
y = [56, 15, 84, 65, 45, 48]
index = np.arange(len(x))
width = 0.3
plt.bar(index, height=x, width=width,
color='blue', label=u'x', alpha=0.5)
plt.bar(index, height=y, width=width,
color='gold', label=u'y') # 第二个图不能设置alpha
值,不然透明的两个条形会出现重叠
plt.xlabel('index')
plt.ylabel('x/y')
plt.title('barplot stack', fontsize=20,
color='gray')
plt.legend(loc='best')
plt.show()

在这里插入图片描述

6. 等高线图 meshgrid

X, Y = np.meshgrid(X, Y)
假设X为m维向量,Y为n维向量:

  • 将X作为一行,对这一行复制n次,得到m*n维的矩阵
  • 先将Y转秩,再将转秩后的Y作为一列,对这一列复制m次,得到m*n维的矩阵

这样做可以使得X和Y中的每两个值互相都可以组成一个坐标点(xi ,y j ) (x{i}, y{j}) (xi,yj),在将这些坐标点作为输入,通过一个映射函数 f ( x ) f(x) f(x)求值,就可以得到一个三维图形。

例如: X = [ 1 , 2 , 3 ] , Y = [ 4 , 5 , 6 , 7 ] X = [1,2,3], Y=[4, 5, 6, 7] X=[1,2,3],Y=[4,5,6,7], 则 X , Y = n p . m e s h g r i d ( X , Y ) X,Y=np.meshgrid(X, Y) X,Y=np.meshgrid(X,Y)得到的结果为:

X = [ [ 1 , 2 , 3 ] , [ 1 , 2 , 3 ] , [ 1 , 2 , 3 ] , [ 1 , 2 , 3 ] ] X = [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]] X=[[1,2,3],[1,2,3], [1,2,3],[1,2,3]]

Y = [ [ 4 , 4 , 4 ] , [ 5 , 5 , 5 ] , [ 6 , 6 , 6 ] , [ 7 , 7 , 7 ] ] Y = [[4, 4, 4], [5, 5, 5], [6, 6, 6], [7, 7, 7]] Y=[[4,4,4], [5,5,5],[6,6,6],[7,7,7]]

plt.contour()

这个函数用于绘制等高线图

import matplotlib.pyplot as plt
def f(x,y): return (1-x/2+x *5+y *3)*np.exp(-
x *2-y *2)
n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)
#print(X,'----', Y)
plt.contourf(X, Y, f(X,Y), 8, alpha=.75,
cmap='jet')
C = plt.contour(X, Y, f(X,Y), 8, colors='black')
show()

在这里插入图片描述

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

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

相关文章

堆排序(C语言版)

一.堆排序 堆排序即利用堆的思想来进行排序&#xff0c;总共分为两个步骤&#xff1a; 1. 建堆 升序&#xff1a;建大堆 降序&#xff1a;建小堆 2. 利用堆删除思想来进行排序 1.1.利用上下调整法实现堆排序 第一步&#xff1a;建堆 好了&#xff0c;每次建堆都要问自己…

ArkTS基本概念装饰器

目录 ArkTS基本概念 装饰器汇总 ArkTS基本概念 ArkTS是HarmonyOS的主力应用开发语言。 它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨…

cocos creator + vscode debug

安装插件 安装插件&#xff1a;JavaScript Debugger 配置 7456 为本地cocos creator的启动端口 启动debug调试 选择对应的启动方式

低成本TB级数据库技术选型之思考两三点

一、背景 前段时间在搞毕业论文的选题&#xff0c;最头疼的就是大量的文献检索和阅读&#xff0c;从研究的角度上我们可以将文献分为四类&#xff1a; 理论文献&#xff1a;为研究提供理论的框架和基础的文献。这些文献可能并不会和所做的研究直接相关&#xff0c;甚至由于理…

叫板GPT-4的Gemini,我做了一个聊天网页,可图片输入,附教程

先看效果&#xff1a; 简介 Gemini 是谷歌研发的最新一代大语言模型&#xff0c;目前有三个版本&#xff0c;被称为中杯、大杯、超大杯&#xff0c;Gemini Ultra 号称可与GPT-4一较高低&#xff1a; Gemini Nano(预览访问) 为设备端体验而构建的最高效模型,支持离线使用场景。…

基于PI控制的PMSM永磁同步电机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PMSM数学模型 4.2 矢量控制策略 4.3 PI控制器设计 4.4 控制系统实现 5.完整工程文件 1.课题概述 基于PI控制的PMSM永磁同步电机控制系统simulink建模与仿真。其中&#xff0c;基于PI&#xff08;…

查看ios app运行日志

摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和奔溃日志。同时还提供了奔溃日志分析查看模块&#xff0c;可以对苹果奔溃日志进行符号化、格式化和分析&#xff0c;极大地简化了开发者的调试…

极值和平均值-第11届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第22讲。 极值和平均值&…

java设计模式实战【策略模式+观察者模式+命令模式+组合模式,混合模式在支付系统中的应用】

引言 在代码开发的世界里&#xff0c;理论知识的重要性毋庸置疑&#xff0c;但实战经验往往才是知识的真正试金石。正所谓&#xff0c;“读万卷书不如行万里路”&#xff0c;理论的学习需要通过实践来验证和深化。设计模式作为软件开发中的重要理论&#xff0c;其真正的价值在…

【心得】PHP反序列化高级利用(phar|session)个人笔记

目录 ①phar反序列化 ②session反序列化 ①phar反序列化 phar 认为是java的jar包 calc.exe phar能干什么 多个php合并为独立压缩包&#xff0c;不解压就能执行里面的php文件&#xff0c;支持web服务器和命令行 phar协议 phar://xxx.phar $phar->setmetadata($h); m…

计算机视觉与自然语言处理(Open AI)

1.语音识别技术 语音识别是将语音转换为文本的技术&#xff0c; 是自然语言处理的一个分支。通过特征的提取、模式的匹配将语音信号变为文本或命令&#xff0c;以实现机器识别和理解语音。 按照应用场景的不同&#xff0c;可以大致分为三类&#xff1b; • 电信级系统应用&…

动画墙纸:将视频、网页、游戏、模拟器变成windows墙纸——Lively Wallpaper

文章目录 前言下载github地址&#xff1a;网盘 关于VideoWebpagesYoutube和流媒体ShadersGIFs游戏和应用程序& more:Performance:多监视器支持&#xff1a;完结 前言 Lively Wallpaper是一款开源的视频壁纸桌面软件&#xff0c;类似 Wallpaper Engine&#xff0c;兼容 Wal…

echarts手动触发气泡的显示和隐藏

点击echarts图表后将点击的那个进行突出显示 <template><div id"demo"> </div><el-button type"primary" click"set">设置</el-button><el-button type"primary" click"cancel">取消&…

ubuntu20部署Bringing-Old-Photos-Back-to-Life

环境准备&#xff1a; ubuntu20.04 Python 3.8.10 首先将微软的「Bringing-Old-Photos-Back-to-Life」库 clone 到本地&#xff1a; git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git cd Face_Enhancement/models/networks/ git clone https:/…

API 开放平台项目(已整理,已废弃)

项目大纲 前端 React 18Ant Design Pro 5.x 脚手架Ant Design & Procomponents 组件库Umi 4 前端框架OpenAPI 前端代码生成 后端 Java Spring BootMySQL 数据库MyBatis-Plus 及 MyBatis X 自动生成API 签名认证&#xff08;Http 调用&#xff09;Spring Boot Starter&#…

Langchain访问OpenAI ChatGPT API Account deactivated的另类方法,访问跳板机API

笔者曾经写过 ChatGPT OpenAI API请求限制 尝试解决 Account deactivated. Please contact us through our help center at help.openai.com if you need assistance. 结果如何&#xff1f; 没有啥用。目前发现一条曲线救国的方案。 1. 在官方 openai 库中使用 此处为最新Op…

Jupyter Notebook的10个常用扩展介绍

Jupyter Notebook&#xff08;前身为IPython Notebook&#xff09;是一种开源的交互式计算和数据可视化的工具&#xff0c;广泛用于数据科学、机器学习、科学研究和教育等领域。它提供了一个基于Web的界面&#xff0c;允许用户创建和共享文档&#xff0c;这些文档包含实时代码、…

『番外篇九』SwiftUI 实战:打造一款“五脏俱全”的网络图片显示 App(上)

概览 俗话说得好:“读书破万卷,下笔如有神”。不过如果把这句话放到编程的学习上可就不那么贴切了。 要想熟练掌握一门编程语言,光看书是绝对不够的。我们还需尽可能的多撸码、早撸码,撸到无路可退、海枯石烂才有可能一窥门径。 在本篇和续篇博文中,我们将和小伙伴们一起…

Linux 内核学习笔记: hlist 的理解

前言 最近阅读 Linux 内核时&#xff0c;遇到了 hlist&#xff0c;这个 hlist 用起来像是普通的链表&#xff0c;但是为何使用 hlist&#xff0c;hlist 是怎么工作的&#xff1f; 相关代码 hlist_add_head(&clk->clks_node, &core->clks); /*** clk_core_link_…

华为鸿蒙运行Hello World

前言&#xff1a; 从11月中旬开始通过B站帝心接触鸿蒙&#xff0c;至今一个半月左右不到&#xff0c;从小白到入坑&#xff0c;再到看官网案例&#xff0c;分析案例&#xff0c;了解技术点&#xff0c;还需要理清思路&#xff0c;再写博客&#xff0c;在决定写 &#xff1c;Har…