【数学建模美赛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.hqwc.cn/news/315703.html

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

相关文章

常见HTTP 500错误发生原因及解决办法剖析

​  对于网站运营者来说&#xff0c;提到500内部服务器错误并不陌生。互联网行业对它的称呼有好几种&#xff0c;如“500内部服务器错误”、“HTTP 500 - 内部服务器错误”、“临时错误 (500)”、“内部服务器错误”。尽管叫法不同&#xff0c;但根本问题是相同的。 目前&…

二维码地址门牌系统技术服务:让您的生活更便捷,一码通行,安全无忧

文章目录 前言一、融合二维码技术与门牌的便捷服务二、手机开门便捷功能三、智能化安全保障四、智能化、便捷化的新型技术 前言 在数字化时代&#xff0c;二维码门牌系统技术应运而生&#xff0c;为了满足人们对安全、便捷生活的需求。这项技术将二维码与门牌结合&#xff0c;…

虚幻UE 材质-进阶边界混合之WAT世界对齐纹理

边界混合前篇&#xff1a;虚幻UE 材质-边界混合之PDO像素深度偏移量 上一篇主要讲材质相似或者不同的两个物体之间的边界混合 这一篇主要讲自建材质且相同的两个物体之间的边界混合 文章目录 一、世界对齐纹理二、世界对齐纹理实验1、制作材质 三、进一步优化 一、世界对齐纹理…

堆排序(C语言版)

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

基于ssm的教师上课系统+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

mxxWechatBot微信机器人主动给机器人发送消息

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 先看这里 前言接口地址一、获取token二、主动发送消息三、获取群、好友以及公众号列表 前言 注意&#xff1a; 免责声明&#xff1a;该工具仅供学习使用&#xff0c;禁止使用该工具从事…

栅极驱动 IC 自举电路的设计与应用

硬件工程师应该都用过buck&#xff0c;一些buck芯片会有类似下面的自举电容&#xff0c;有时还会串联一个电阻。 那么你是否对这个自举电路有深入的了解呢&#xff1f;比如&#xff0c;这个电容的容值大小该怎么选&#xff1f;大了或者小了会影响什么&#xff1f;耐压要求是怎么…

Prometheus+Grafana(详细讲解)

Prometheus(普罗米修斯&#xff09;监控系统 1、Prometheus概述 1.1 任务背景 某公司由于业务快速发展&#xff0c;公司要求对现有机器进行业务监控&#xff0c;责成运维部门来实施这个任务。任务要求如下&#xff1a; 部署监控服务器&#xff0c;实现7x24实时监控 针对公司…

达梦数据库报错 执行失败(语句1) -2111: 第1 行附近出现错误: 无效的列名[system]

[TOC](达梦数据库报错 执行失败(语句1) -2111: 第1 行附近出现错误: 无效的列名[system]) 1、报错现象 执行下列sql语句 UPDATE "TEST"."TEST_1" SET "TEST_1"."SALT"123456 where "TEST_1"."ID""system&…

c++_STL容器总结

STL容器总结 1.STL的基本概念1.2STL的六大组件 2.string类2.1string的基本概念2.2string容器常用操作 3.vector容器3.1vector容器基本概述 4.deque容器4.1deque容器的基本概念4.2deque容器的实现原理4.3deque常用API 5. stack容器5.2stack常用API 6.queue容器6.1 queue 容器基本…

OSCHINA Gitee 联合呈现,《2023 中国开源开发者报告》正式发布,总结分非常帮,可以免费看的报告!

《2023 中国开源开发者报告》 详细地址&#xff1a; https://talk.gitee.com/report/china-open-source-2023-annual-report.pdf 不需要收费下载&#xff01;&#xff01; 其中大模型的部分总结的非常棒 gietee 也支持 AI 模型托管了 如何在 Gitee 上托管 AI 模型 https://…

【LLM+RS】LLM在推荐系统的实践应用(华为诺亚)

note LLM用于推荐主要还是解决推荐系统加入open domain 的知识。可以基于具体推荐场景数据做SFT。学习华为诺亚-技术分享-LLM在推荐系统的实践应用。 文章目录 note一、背景和问题二、推荐系统中哪里使用LLM1. 特征工程2. 特征编码3. 打分排序 三、推荐系统中如何使用LLM四、挑…