matplotlib---插值画二维、三维图
一、画二维图
1.原始数据(x,y)
import matplotlib.pyplot as plt
import numpy as np #数据
X = np.array(list(i for i in range(6)))
Y = np.array([10,30,20,50,100,120])
2.先对横坐标x进行扩充数据量,采用linspace
#插值
from scipy.interpolate import spline
X_new = np.linspace(X.min(),X.max(),300) #300 represents number of points to make between X.min and X.max
3.采用scipy.interpolate中的spline来对纵坐标数据y进行插值
由6个扩充到300个
smooth = spline(X,Y,X_new)
print(X_new.shape) #(300,)
print(smooth.shape) #(300,)
4.画图
#画图
plt.plot(X_new,smooth)
plt.show()
| 插值前 | 插值后 |
|
![]() |
二、画三维图
1.载入数据
# 载入模块
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import pandas as pd
import seaborn as sns
from scipy import interpolate df_epsilon_alpha = pd.read_excel('实验记录_超参数.xlsx',sheet_name='epsilon_alpha')
#生成数据
epsilon = np.array(df_epsilon_alpha['epsilon'].values)
alpha = np.array(df_epsilon_alpha['alpha'].values)
Precision = np.array(df_epsilon_alpha['Precision'].values)
2.将x和y扩充到想要的大小
【两种方法:np.arange和np.linspace】
xnew = np.arange(0.1, 1, 0.09) #左闭右闭每0.09间隔生成一个数
ynew = np.arange(0.1, 1, 0.09)
或者
x = np.linspace(0.1,0.9,9)#0.1到0.9生成9个数
y = np.linspace(0.1,0.9,9)
3.对z插值
x,y原数据:
x = np.linspace(0.1,0.9,9)
y = np.linspace(0.1,0.9,9)
z = Precision
采用 scipy.interpolate.interp2d函数进行插值
f = interpolate.interp2d(x, y, z, kind='cubic')
x,y扩充数据:
xnew = np.arange(0.1, 1, 0.03)#(31,)
ynew = np.arange(0.1, 1, 0.03)#(31,)
znew = f(xnew, ynew)#(31,31)
znew为插值后的z
4.画图
采用 from mpl_toolkits.mplot3d import Axes3D进行画三维图
Axes3D简单用法:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
比如采用plot_trisurf画三维图:
plot_trisurf(x,y,z)
plot_trisurf对数据要求是:x.shape = y.shape = z.shape,所以x和y的shape需要修改,采用np.meshgrid,且都为一维数据
修改x,y,z输入画图函数前的shape
xx1, yy1 = np.meshgrid(xnew, ynew)#执行之后,xx1.shape=(31,31),yy1.shape=(31,31)
newshape = (xx1.shape[0])*(xx1.shape[0])
y_input = xx1.reshape(newshape)
x_input = yy1.reshape(newshape)
z_input = znew.reshape(newshape)
x_input.shape,y_input.shape,z_input.shape=((961,), (961,), (961,))
画图代码
#画图
sns.set(style='ticks')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(x_input,y_input,z_input,cmap=cm.coolwarm) plt.xlim((0.1,0.9))
plt.xticks([0.1,0.3,0.5,0.7,0.9])
plt.yticks([0.1,0.3,0.5,0.7,0.9])
ax.set_xlabel(r'$\alpha$',fontdict={'color': 'black',
'family': 'Times New Roman',
'weight': 'normal',
'size': 18})
ax.set_ylabel(r'$\epsilon$',fontdict={'color': 'black',
'family': 'Times New Roman',
'weight': 'normal',
'size': 18})
ax.set_zlabel('precision',fontdict={'color': 'black',
'family': 'Times New Roman',
'weight': 'normal',
'size': 18}) plt.tight_layout()
# plt.savefig('loc_svg/alpha_epsilon2.svg',dpi=600) #指定分辨率保存
plt.show()
| 插值前 | 插值后 |
|
|
matplotlib---插值画二维、三维图的更多相关文章
- 使用C语言实现二维,三维绘图算法(1)-透视投影
使用C语言实现二维,三维绘图算法(1)-透视投影 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其实想想 ...
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- matlab画二维直方图以及双y轴坐标如何修改另一边y轴的颜色
1.首先讲一下如何用hist画二维直方图 x=[- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...
- ARCGIS二维三维导航
在使用代码前需要先安装arcgis10.0 或者10.1都可以 不过本人建议初学者安装10.0比较容易安装.. 安装方式和二维三维地图的加载网上都有,就不在此一一赘述了. 先从基本的功能开 ...
- 用matplotlib.pyplot画简单的折线图,直方图,散点图
#coding=utf-8 """ 用matplotlib.pyplot画简单的折线图,直方图,散点图 """ import matplot ...
- node 无脑生成小程序二维码图
RT 新建createwxaqrcode.js: const request = require('request') const fs = require('fs') // eg:生成购物车列表圆形 ...
- vue 画二维码
首先安装一下相关的插件 qrcode2 npm install --save qrcode2 然后在需要画二维码的页面引入一下 import QRCode from 'qrcode2' 最后在meth ...
- matlab 画二维图与三维图
二维图 ezplot('sin(x)');%默认范围 ezplot('sin(x)',[-4 4]);%自己设定范围 三维图 ezmesh('x*x+y*y');%默认范围
随机推荐
- oracle拼接sql语句
示例: select 'select a.xh,a.dj,a.xzb from xsjbxxb a where a.xzb=' || chr(39) || a.xzb || chr(39) ...
- 01.普通抖音新手如何从0开始入门3个月做到粉丝100w+
普通抖音新手如何从0开始入门3个月做到粉丝100w+ 今年以来,明显感觉抖音很火,大有干掉微信,取代淘宝,京东的感觉,如今年轻人,一周7天有7天要玩抖音,所以说未来不可估量. 如是,2019春节以后, ...
- Linux 常用文件描述
Linux 常用文件描述 /etc/issue 本地登陆显示的信息,本地登录前 /etc/issue.net 网络登陆显示的信息,登录后显示,需要由sshd配置 /etc/motd 常用于通告信息,如 ...
- 离线方式快速安装python模块以及相关依赖模块
一般公司的服务器都是和外网隔离的,这个如果没有内部pip源的话,想要安装python的模块就需要去python官网一个一个下载依赖模块的包,然后逐个安装,这样做非常耗时间. 我们今天用的办法就是现在我 ...
- 【题解】Palindrome pairs [Codeforces159D]
[题解]Palindrome pairs [Codeforces159D] 传送门:\(Palindrome\) \(pairs\) \([CF159D]\) [题目描述] 给定一个长度为 \(N\) ...
- DispatcherServlet 是 spring 网络模块的核心
https://cn.bing.com/images/search?q=DispatcherServlet+&FORM=HDRSC2
- python第五章程序练习题
5.2 def isOdd(a): if a%2!=0: return True else: a=eval(input()) print(isOdd(a)) 5.3 def isNum(x): try ...
- MVC中使用SignalR打造酷炫实用的即时通讯功能(轉載)
資料來源:http://www.fangsi.net/1144.html 前言,现在这世道写篇帖子没个前言真不好意思发出来.本贴的主要内容来自于本人在之前项目中所开发的一个小功能,用于OA中的即时通讯 ...
- 记录一次使用NPOI遇到的问题
在.net 下一般使用NPOI操作Excel相信大家都不陌生,但是本人在操作过程中遇到一个比较奇怪的问题,特写此博客记录与大家分享. 例子是使用Winform,点击按钮时弹出打开文件对话框,然后选择文 ...
- c#---Socean.RPC框架实测[并发量13w][响应时间0.04ms]
目录1.高性能RPC框架:Socean.RPC 前言 经过一段时间的优化,Socean.RPC的性能又提高了一些,不过这差不多是socketAPM模型的极限了.本框架仅仅2000多行代码,无第三方框架 ...
