【数学建模美赛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.mzph.cn/news/586295.shtml

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

相关文章

Vue3-31-路由-RouterView的name属性的作用

作用描述 <router-view> 标签是用来渲染路由对应的组件的位置&#xff1b; 默认情况下&#xff0c;一个路由是只对应一个组件的。 但是&#xff0c;可以通过给 <router-view> 指定 name 属性的方式&#xff0c;实现同时渲染多个组件的效果。 这也叫做 命名视图。 注…

《企业数据资源相关会计处理暂行规定》学习笔记

附&#xff1a;2023年数据资源入表白皮书下载&#xff1a; 关注WX公众号&#xff1a; commindtech77&#xff0c; 获得数据资产相关白皮书下载地址 1. 回复关键字&#xff1a;数据资源入表白皮书 下载 《2023数据资源入表白皮书》 2. 回复关键字&#xff1a;光大银行 下载 光…

云安全是什么?有什么作用

随着云计算的普及和深入应用&#xff0c;云安全已成为企业和组织面临的重要挑战。云安全旨在保护云计算环境中的数据、应用程序和基础设施免受各种威胁和攻击&#xff0c;确保云计算环境的可用性、机密性和完整性。 云安全包括以下几个关键领域&#xff1a; 一、数据保护 数据…

用 Node.js 写一个爬虫

自己设计一个网站&#xff0c;然后去爬取别人家页面的数据来做一个自己的网站。哈哈哈&#xff0c;如果自己写着玩可能没啥事&#xff0c;但如果用这个网站来获利&#xff0c;你可能就要被寄律师函了&#xff0c;毕竟这有点‘刑’。这篇文章呢&#xff0c;就带大家爬取豆瓣TOP2…

C++图论之强连通图

1. 连通性 什么是连通性&#xff1f; 连通&#xff0c;字面而言&#xff0c;类似于自来水管道中的水流&#xff0c;如果水能从某一个地点畅通流到另一个地点&#xff0c;说明两点之间是连通的。也说明水管具有连通性&#xff0c;图中即如此。 无向图和有向图的连通概念稍有差…

LAMP集中式搭建+LNMP分布式搭建(新版)

LAMP搭建LNMP搭建 LAMP搭建LNMP搭建一、LAMP搭建(集中式)1、LAMP简介2、LAMP组件及作用3、编译安装Apache httpd服务4、编译安装mysqld 服务5、编译安装PHP解析环境6、安装论坛7、安装博客 二、LNMP搭建(分布式)1、LNMP工作原理2、安装nginx3、安装mysql4、安装php5、在浏览器测…

《深入理解Java虚拟机(第三版)》读书笔记:虚拟机类加载机制、虚拟机字节码执行引擎、编译与优化

下文是阅读《深入理解Java虚拟机&#xff08;第3版&#xff09;》这本书的读书笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 第6章 类文件结构第7章 虚拟机类加载机制7.2 类加载的时机7.3 类加载的过程7.4 类加载器7.5 Java模块化系统 第8章 虚拟机字节码执…

C++求解数组长度的方法(包含求解vector和字符串求解的方法)

对于一个C的初学者&#xff0c;在如何求解数组长度问题上可能会稍有混乱&#xff0c;因为求解长度的方法有很多&#xff0c;比如size()、length()、sizeof()等函数&#xff0c;今天我就和大家一起学习如何求解数组长度&#xff0c;并探讨size()、length()、sizeof()这三个函数的…

【Linux驱动】设备树简介 | 内核对设备树的处理

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux驱动》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f9f2;设备树简介&#x1f3f9;设备树语法&#x1f3f9;常见节点和属性&#x1f3f9…

LOAM: Lidar Odometry and Mapping in Real-time 论文阅读

论文链接 LOAM: Lidar Odometry and Mapping in Real-time 0. Abstract 提出了一种使用二维激光雷达在6自由度运动中的距离测量进行即时测距和建图的方法 距离测量是在不同的时间接收到的&#xff0c;并且运动估计中的误差可能导致生成的点云的错误配准 本文的方法在不需要高…

Educational cf 160的B题

Problem - B - Codeforces 找到最小操作次数&#xff0c;使得子串对应位与原来字符串对应位不相同。 交换是没有代价的&#xff0c;但是删除有代价。 首先复制两个一模一样的串&#xff0c;我们把下面作为固定串&#xff0c;然后对串中0和1的个数进行计数&#xff0c;由于我…

私有部署ELK,搭建自己的日志中心(六)-- 引入kafka对采集日志进行削峰填谷

一、背景 首先&#xff0c;要说明一点&#xff0c;elk日志中心&#xff0c;是可以缺少kafka组件的。 其次&#xff0c;如果是研发环境下&#xff0c;机器资源紧张的情况下&#xff0c;也是可不部署kafka。 最后&#xff0c;因为kafka的部署是可以独立的&#xff0c;所以本文将…

介绍一款PDF在线工具

PDF是我们日常工作中的一种常见格式&#xff0c;其处理也是我们工作的重要基础性环节&#xff0c;一款可靠的处理工具显得十分重要。 完全免费、易于使用、丰富的PDF处理工具&#xff0c;包括&#xff1a;合并、拆分、压缩、转换、旋转和解锁PDF文件&#xff0c;以及给PDF文件…

IntelliJ IDEA常用快捷键

【1】创建内容&#xff08;新建&#xff09;&#xff1a;altinsert 【2】main方法&#xff1a;psvm 【3】输出语句&#xff1a;sout 【4】复制行&#xff1a;ctrld 【5】删除行&#xff1a;ctrly&#xff08;很多编辑器ctrly是前进操作&#xff0c;如果选择 Delete Line&…

05-C++ 类和对象-继承

类与对象-03 继承与派生 1. 继承的概念 c最重要的特征是代码重用&#xff0c;通过继承机制可以利用已有的数据类型&#xff0c;来定义新的数据类型&#xff0c;新的类不仅拥有旧类的成员&#xff0c;还拥有新定义的成员。 一个 B 类继承于 A 类&#xff0c;或称从类 A 派生…

数字人私人定制

数字人是什么&#xff1f; 在回答这个问题之前&#xff0c;我们先回答另一个问题&#xff0c;人如何与人工智能交流&#xff1f;目前可以通过文字、语音、电脑屏幕、手机屏幕、平板、虚拟现实设备等和人工智能交流&#xff0c;为了得到更好的交流体验&#xff0c;人工智能必然…

php 8.4 xdebug扩展编译安装方法

最新版php8.4 xdebug扩展只能通过编译方式安装, pecl是安装不了的, 编译方法如下 下载最新版xdebug git clone https://github.com/xdebug/xdebug.git 却换入xdebug目录执行编译安装xdebug cd xdebug phpize./configure --enable-xdebugmakemake install3. 配置启用xdebug 这…

使用element中el-cascader级联选择器实现省市区街道筛选(非动态加载)

<template><el-form ref"form" :model"form" label-width"80px"><el-form-item label"地址:" prop"addressList"><el-cascaderv-model"form.addressList":props"props":options&q…

Pandas教程(一)—— 数据结构

前言 Pandas是贯穿数据分析的主要工具之一&#xff0c;它经常和其他数值计算工具一起使用&#xff08;例如&#xff1a;Numpy、SciPy和matplotlib&#xff09;。尽管pandas采用了很多NumPy的代码风格&#xff0c;但二者最大的区别是&#xff1a;pandas主要用于处理表格型或异质…

GBASE南大通用-GBase 8s数据库日志模式及切换

一、 GBase 8s数据库共有以下 4 种日志模式&#xff1a;无日志模式、缓冲日志模式、无缓冲日志模式、ANSI 模式。详细介绍如下&#xff1a; 1、无日志模式&#xff08;Non logging&#xff09;&#xff1a; 采用无日志模式时&#xff0c;所有 DML 操作都不会被记录到日志中&…