精华内容
下载资源
问答
  • 由于至少包含在 R12 和 R13 中,函数 XLIM、YLIM 和 ZLIM 将无法正确编译。 该文件包含这些文件的修改版本,编译时不会产生错误。 将此文件的内容解压缩到您的 $MATLABroot\toolbox\matlab\graph3d\ 目录。
  • Matlab xlim ylim zlim函数

    千次阅读 2019-11-28 11:03:10
    xlim([xl xr]); 用于限定x轴上下限,其中, ...zlim([yl yr])同理。 例子 x = [1:0.1:10]; y = 3*sin(x); subplot(2,1,1); plot(x,y) subplot(2,1,2); plot(x,y); ylim([-1,1]); 想了解更多参考【 MATLA...

    xlim([xl xr]); 
    用于限定x轴上下限,其中, 
    xl:x轴下限 
    xr:x轴上限 
    ylim([yl yr]);zlim([yl yr])同理。

    例子

    x = [1:0.1:10];
    y = 3*sin(x);
    subplot(2,1,1);
    plot(x,y)
    subplot(2,1,2);
    plot(x,y);
    ylim([-1,1]);

    想了解更多参考【 MATLAB 】xlim 、 ylim 、zlim简介

    展开全文
  • 【 MATLAB 】xlim 、 ylim 、zlim简介

    万次阅读 2018-10-18 21:24:51
    zlim也一样,就不说了。 xlim Set or query  x -axis limits collapse all in page Syntax xlim(limits) xl = xlim xlim auto xlim manual m = xlim('mode') ___ = xlim(target,___...

    ylim

    设置或查询 y 轴限制


    Syntax

    ylim(limits)

    yl = ylim

    ylim auto

    ylim manual

    m = ylim('mode')

    ___ = ylim(target,___)

     



    Description

    ylim(limits) 设置当前坐标轴或图表的 y 轴限制。将限制指定为窗体的两个元素向量 [ymin ymax], 其中 ymax 大于 ymin。

    例子:

    Plot a line and set the y-axis limits to range from -2 to 2.

    x = linspace(0,10);
    y = sin(x);
    plot(x,y)
    ylim([-2 2])

     


    yl = ylim  将当前限制返回为两个元素向量。

    例子:

    创建随机数据的散点图。返回 y 轴限制的值。

    x = randn(50,1);
    y = randn(50,1);
    scatter(x,y)

     


    ylim auto 设置自动模式, 使轴能够确定 y 轴限制。限制跨越绘制数据的范围。如果更改限制, 然后希望将其设置回默认值, 请使用此选项。此命令将轴的 YLimMode 属性设置为 "auto"。

    ylim manual 设置手动模式, 冻结当前值的限制。如果要在使用 thehold 命令将新数据添加到坐标轴时保留当前限制, 请使用此选项。此命令将轴的 YLimMode 属性设置为 "手动"。

    例子:Maintain Current y-Axis Limits

    First, plot a line.

    x = linspace(0,10);
    y = sin(x);
    plot(x,y)

    Set the y-axis limits mode to manual so that the limits to not change. Use hold on to add a second plot to the axes.

    ylim manual
    hold on
    y2 = 2*sin(x);
    plot(x,y2)
    hold off

    The y-axis limits do not update to incorporate the new plot.

    Switch back to automatically updated limits by resetting the mode to automatic.

    ylim auto


    m = ylim ("mode") 返回当前的 y 轴限制模式, 即 "auto" 或 "manual"。默认情况下, 除非您指定限制或将模式设置为manual, 否则模式是auto。


    ___ = ylim(target,___) 使用由目标指定的轴或图表, 而不是当前坐标轴。将目标指定为以前任何语法的第一个输入参数。如果原始语法支持输出参数, 则可以包括输出参数。在模式输入周围使用单引号, 例如, ylim (target , "auto")。

    例子:

    Create a figure with two subplots and assign the Axes objects to the variables ax1 and ax2. Plot the same data in each subplot. Set the y-axis limits for the bottom subplot by specifying ax2 as the first input to ylim.

    创建一副拥有两个子图的图像,并把 Axes对象赋值给两个变量 ax1和ax2。在两幅子图中画同样的数据。通过将 ax2 指定为 ylim 的第一个输入, 为底部子图设置 y 轴限制。

    clc
    clear
    close all
    
    x = linspace(0,10,1000);
    y = sin(10*x).*exp(.5*x);
    ax1 = subplot(2,1,1);
    plot(x,y)
    
    ax2 = subplot(2,1,2);
    plot(x,y)
    ylim(ax2,[-10 10])

     


    再送几个案例:

    Use Semiautomatic y-Axis Limits

    Create a surface plot and show only y values greater than 0. Specify the minimum y-axis limit as 0 and let MATLAB choose the maximum limit.

    意思是画一个surface图,仅仅显示y大于0的部分:

    [X,Y,Z] = peaks;
    surf(X,Y,Z)
    ylim([0 inf])

    如果不加限制,也就是全都是auto模式:

    clc
    clear
    close all
    
    [X,Y,Z] = peaks;
    
    surf(X,Y,Z)
    

    只关注y轴就可以看出区别了。


    Set Limits for y-Axis with Dates

    Create a horizontal bar chart with dates along the y-axis. Set the y-axis limits to range from June 1, 2014 to June 10, 2014.

    意思是创建一个水平条形图,日期位于y轴,设置y轴的限制为从 June 1, 2014 to June 10, 2014.

    t = datetime(2014,06,1) + caldays(0:20);
    y = rand(21,1);
    barh(t,y)
    
    tstart = datetime(2014,06,1);
    tend = datetime(2014,06,10);
    ylim([tstart tend])

    如果不设限制:

    clc
    clear
    close all
    
    t = datetime(2014,06,1) + caldays(0:20);
    y = rand(21,1);
    barh(t,y)
    



    xlim的用法和ylim几乎一模一样,这里仅仅给出英文版介绍,就不详述了。zlim也一样,就不说了。

    xlim

    Set or query x-axis limits

    collapse all in page

    Syntax

    xlim(limits)

    xl = xlim

    xlim auto

    xlim manual

    m = xlim('mode')

    ___ = xlim(target,___)

    Description

    example

    xlim(limits) sets the x-axis limits for the current axes or chart. Specify limits as a two-element vector of the form [xmin xmax], where xmax is greater than xmin.

    example

    xl = xlim returns the current limits as a two-element vector.

    xlim auto sets an automatic mode, enabling the axes to determine the x-axis limits. The limits span the range of the plotted data. Use this option if you change the limits and then want to set them back to the default values. This command sets the XLimMode property for the axes to 'auto'.

    example

    xlim manual sets a manual mode, freezing the limits at the current values. Use this option if you want to retain the current limits when adding new data to the axes using thehold on command. This command sets the XLimMode property for the axes to 'manual'.

    m = xlim('mode') returns the current x-axis limits mode, which is either 'auto' or 'manual'. By default, the mode is automatic unless you specify limits or set the mode to manual.

    example

    ___ = xlim(target,___) uses the axes or chart specified by target instead of the current axes. Specify target as the first input argument for any of the previous syntaxes. You can include an output argument if the original syntax supports an output argument. Use single quotes around the mode inputs, for example, xlim(target,'auto').

     

     

     

     

     

     

     

    展开全文
  • //训练使用高斯过程与贝叶斯先验 let variogram=kriging.train(positions.map(pos=>pos[2]),positions.map(pos=>pos[0]),positions.map(pos=>pos[1]),params.krigingModel,params.krigingSigma2,params....

    .html中的方法调用

    	//训练使用高斯过程与贝叶斯先验
        let variogram=kriging.train(positions.map(pos=>pos[2]),positions.map(pos=>pos[0]),positions.map(pos=>pos[1]),params.krigingModel,params.krigingSigma2,params.krigingAlpha);
        //网格矩阵或轮廓路径
    	let grid=kriging.grid(polygons,variogram,(extent[2]-extent[0])/1000);
        //在DOM上绘图.
    	//Canvas是HTML5提供的一个标签,我们可以在这个盒子区域绘画
    	kriging.plot(canvas,grid,[extent[0],extent[2]],[extent[1],extent[3]],colors);
    

    kriging-original.js文件中的部分代码解释

    // Extend the Array class
    // Array.prototype.max重写数组原型链
    //表示取得最大值
    Array.prototype.max = function() {
    	//apply()方法接受的是一个参数数组
    	//返回一个最大值的数组
    	return Math.max.apply(null, this);
    	
    };
    //这里表示取得最小值
    Array.prototype.min = function() {
    	//返回一个最小值
    	return Math.min.apply(null, this);
    };
    //这里表示算平均数
    Array.prototype.mean = function() {
    	var i, sum;
    	for(i = 0, sum = 0; i < this.length; i++)
    		sum += this[i];
    	return sum / this.length;
    };
    
    Array.prototype.rep = function(n) {
    	//返回一个长度为n的数组,且每一个元素都被赋值成undefined
    	return Array.apply(null, new Array(n))
    		.map(Number.prototype.valueOf, this[0]);
    		//Number.prototype.valueOf()方法返回数值对象的原始值
    };
    Array.prototype.pip = function(x, y) {
    	var i, j, c = false;
    	for(i = 0, j = this.length - 1; i < this.length; j = i++) {
    		if(((this[i][1] > y) != (this[j][1] > y)) &&
    			(x < (this[j][0] - this[i][0]) * (y - this[i][1]) / (this[j][1] - this[i][1]) + this[i][0])) {
    			c = !c;
    		}
    	}
    	return c;
    }
    
    var kriging = function() {
    	var kriging = {};
    
    	// Matrix algebra矩阵代数
    	kriging_matrix_diag = function(c, n) {
    		//新建一个n*n的矩阵
    		var i, Z = [0].rep(n * n);
    		//循环赋值c给Z矩阵的每一元素
    		for(i = 0; i < n; i++) Z[i * n + i] = c;
    		return Z;
    	};
    	//将这个矩阵变为转置阵,也就是将元素颠倒顺序
    	kriging_matrix_transpose = function(X, n, m) {
    		var i, j, Z = Array(m * n);
    		for(i = 0; i < n; i++)
    			for(j = 0; j < m; j++)
    				Z[j * n + i] = X[i * m + j];
    		return Z;
    	};
    	//再次改变数值,把c给每一个二维元素赋值
    	kriging_matrix_scale = function(X, c, n, m) {
    		var i, j;
    		for(i = 0; i < n; i++)
    			for(j = 0; j < m; j++)
    				X[i * m + j] *= c;
    	};
    	//添加的方法
    	kriging_matrix_add = function(X, Y, n, m) {
    		//新建一个m*n的矩阵Z
    		var i, j, Z = Array(n * m);
    		for(i = 0; i < n; i++)
    			for(j = 0; j < m; j++)
    			//将X和Y矩阵相加合并成一个矩阵
    				Z[i * m + j] = X[i * m + j] + Y[i * m + j];
    				//返回一个Z矩阵
    		return Z;
    	};
    	// Naive matrix multiplication
    	//简单的矩阵乘法,矩阵和矩阵的乘法
    	//也就是前一个矩阵中的行乘以后一个矩阵中的列
    	kriging_matrix_multiply = function(X, Y, n, m, p) {
    		var i, j, k, Z = Array(n * p);
    		for(i = 0; i < n; i++) {
    			for(j = 0; j < p; j++) {
    				Z[i * p + j] = 0;
    				for(k = 0; k < m; k++)
    					Z[i * p + j] += X[i * m + k] * Y[k * p + j];
    			}
    		}
    		return Z;
    	};
    	// Cholesky decomposition
    	//柯列斯基分解,这是一种将正定矩阵分解为上三角矩阵和下三角矩阵的方法,
    	//在优化矩阵计算的时候会用到的一种技巧
    	//也就是,下面左边为下三角,右边为上三角
    	//100000 123456
    	//120000 023456
    	//123000 003456
    	//123400 000456
    	//123450 000056
    	//123456 000006
    	kriging_matrix_chol = function(X, n) {
    		var i, j, k, sum, p = Array(n);
    		for(i = 0; i < n; i++) p[i] = X[i * n + i];
    		for(i = 0; i < n; i++) {
    			for(j = 0; j < i; j++)
    				p[i] -= X[i * n + j] * X[i * n + j];
    			if(p[i] <= 0) return false;
    			p[i] = Math.sqrt(p[i]);
    			for(j = i + 1; j < n; j++) {
    				for(k = 0; k < i; k++)
    					X[j * n + i] -= X[j * n + k] * X[i * n + k];
    				X[j * n + i] /= p[i];
    			}
    		}
    		for(i = 0; i < n; i++) X[i * n + i] = p[i];
    		return true;
    	};
    	// Inversion of cholesky decomposition
    	//用斯基分解求矩阵的逆
    
    	kriging_matrix_chol2inv = function(X, n) {
    		var i, j, k, sum;
    		for(i = 0; i < n; i++) {
    			X[i * n + i] = 1 / X[i * n + i];
    			for(j = i + 1; j < n; j++) {
    				sum = 0;
    				for(k = i; k < j; k++)
    					sum -= X[j * n + k] * X[k * n + i];
    				X[j * n + i] = sum / X[j * n + j];
    			}
    		}
    		for(i = 0; i < n; i++)
    			for(j = i + 1; j < n; j++)
    				X[i * n + j] = 0;
    		for(i = 0; i < n; i++) {
    			X[i * n + i] *= X[i * n + i];
    			for(k = i + 1; k < n; k++)
    				X[i * n + i] += X[k * n + i] * X[k * n + i];
    			for(j = i + 1; j < n; j++)
    				for(k = j; k < n; k++)
    					X[i * n + j] += X[k * n + i] * X[k * n + j];
    		}
    		for(i = 0; i < n; i++)
    			for(j = 0; j < i; j++)
    				X[i * n + j] = X[j * n + i];
    
    	};
    	// Inversion via gauss-jordan elimination
    	//用高斯-约当消去法求逆,它的速度不是最快的,但是它非常稳定
    	//如果A是求解矩阵,那么求A的逆矩阵则为
    	//用A矩阵右边乘以单位矩阵I(与A同行同列值为1的单位矩阵)
    	//公式为A*I=I*B,(等号右边要同时变化),也就是一个矩阵右边乘以单位矩阵化为,
    	//左边单位矩阵乘以B,则B就是A矩阵的逆
    	kriging_matrix_solve = function(X, n) {
    		var m = n;
    		var b = Array(n * n);
    		var indxc = Array(n);
    		var indxr = Array(n);
    		var ipiv = Array(n);
    		var i, icol, irow, j, k, l, ll;
    		var big, dum, pivinv, temp;
    
    		for(i = 0; i < n; i++)
    			for(j = 0; j < n; j++) {
    				if(i == j) b[i * n + j] = 1;
    				else b[i * n + j] = 0;
    			}
    		for(j = 0; j < n; j++) ipiv[j] = 0;
    		for(i = 0; i < n; i++) {
    			big = 0;
    			for(j = 0; j < n; j++) {
    				if(ipiv[j] != 1) {
    					for(k = 0; k < n; k++) {
    						if(ipiv[k] == 0) {
    							if(Math.abs(X[j * n + k]) >= big) {
    								big = Math.abs(X[j * n + k]);
    								irow = j;
    								icol = k;
    							}
    						}
    					}
    				}
    			}
    			++(ipiv[icol]);
    
    			if(irow != icol) {
    				for(l = 0; l < n; l++) {
    					temp = X[irow * n + l];
    					X[irow * n + l] = X[icol * n + l];
    					X[icol * n + l] = temp;
    				}
    				for(l = 0; l < m; l++) {
    					temp = b[irow * n + l];
    					b[irow * n + l] = b[icol * n + l];
    					b[icol * n + l] = temp;
    				}
    			}
    			indxr[i] = irow;
    			indxc[i] = icol;
    
    			if(X[icol * n + icol] == 0) return false; // Singular
    
    			pivinv = 1 / X[icol * n + icol];
    			X[icol * n + icol] = 1;
    			for(l = 0; l < n; l++) X[icol * n + l] *= pivinv;
    			for(l = 0; l < m; l++) b[icol * n + l] *= pivinv;
    
    			for(ll = 0; ll < n; ll++) {
    				if(ll != icol) {
    					dum = X[ll * n + icol];
    					X[ll * n + icol] = 0;
    					for(l = 0; l < n; l++) X[ll * n + l] -= X[icol * n + l] * dum;
    					for(l = 0; l < m; l++) b[ll * n + l] -= b[icol * n + l] * dum;
    				}
    			}
    		}
    		for(l = (n - 1); l >= 0; l--)
    			if(indxr[l] != indxc[l]) {
    				for(k = 0; k < n; k++) {
    					temp = X[k * n + indxr[l]];
    					X[k * n + indxr[l]] = X[k * n + indxc[l]];
    					X[k * n + indxc[l]] = temp;
    				}
    			}
    
    		return true;
    	}
    
    	// Variogram models
    	//变差函数模型
    	//变差函数高斯
    	kriging_variogram_gaussian = function(h, nugget, range, sill, A) {
    		return nugget + ((sill - nugget) / range) *
    			(1.0 - Math.exp(-(1.0 / A) * Math.pow(h / range, 2)));
    	};
    	//变差函数指数
    	kriging_variogram_exponential = function(h, nugget, range, sill, A) {
    		return nugget + ((sill - nugget) / range) *
    			(1.0 - Math.exp(-(1.0 / A) * (h / range)));
    	};
    	//变差函数的球形
    	kriging_variogram_spherical = function(h, nugget, range, sill, A) {
    		if(h > range) return nugget + (sill - nugget) / range;
    		return nugget + ((sill - nugget) / range) *
    			(1.5 * (h / range) - 0.5 * Math.pow(h / range, 3));
    	};
    
    	// Train using gaussian processes with bayesian priors
    	//训练使用高斯过程与贝叶斯先验
    	//kriging.train(t, x, y, model, sigma2, alpha):
    	//使用gaussian、exponential或spherical模型对数据集进行训练,返回的是一个variogram对象;
    	kriging.train = function(t, x, y, model, sigma2, alpha) {
    		var variogram = {
    			t: t,
    			x: x,
    			y: y,
    			nugget: 0.0,
    			range: 0.0,
    			sill: 0.0,
    			A: 1 / 3,
    			n: 0
    		};
    		switch(model) {
    			case "gaussian":
    				variogram.model = kriging_variogram_gaussian;
    				break;
    			case "exponential":
    				variogram.model = kriging_variogram_exponential;
    				break;
    			case "spherical":
    				variogram.model = kriging_variogram_spherical;
    				break;
    		};
    
    		// Lag distance/semivariance
    		// 滞后距离/半方差
    		var i, j, k, l, n = t.length;
    		var distance = Array((n * n - n) / 2);
    		for(i = 0, k = 0; i < n; i++)
    			for(j = 0; j < i; j++, k++) {
    				distance[k] = Array(2);
    				distance[k][0] = Math.pow(
    					Math.pow(x[i] - x[j], 2) +
    					Math.pow(y[i] - y[j], 2), 0.5);
    				distance[k][1] = Math.abs(t[i] - t[j]);
    			}
    		distance.sort(function(a, b) { return a[0] - b[0]; });
    		variogram.range = distance[(n * n - n) / 2 - 1][0];
    
    		// Bin lag distance
    		//本滞后距离
    		var lags = ((n * n - n) / 2) > 30 ? 30 : (n * n - n) / 2;
    		var tolerance = variogram.range / lags;
    		var lag = [0].rep(lags);
    		var semi = [0].rep(lags);
    		if(lags < 30) {
    			for(l = 0; l < lags; l++) {
    				lag[l] = distance[l][0];
    				semi[l] = distance[l][1];
    			}
    		} else {
    			for(i = 0, j = 0, k = 0, l = 0; i < lags && j < ((n * n - n) / 2); i++, k = 0) {
    				while(distance[j][0] <= ((i + 1) * tolerance)) {
    					lag[l] += distance[j][0];
    					semi[l] += distance[j][1];
    					j++;
    					k++;
    					if(j >= ((n * n - n) / 2)) break;
    				}
    				if(k > 0) {
    					lag[l] /= k;
    					semi[l] /= k;
    					l++;
    				}
    			}
    			if(l < 2) return variogram; // Error: Not enough points错误:分数不够
    		}
    
    		// Feature transformation功能转换
    		n = l;
    		variogram.range = lag[n - 1] - lag[0];
    		var X = [1].rep(2 * n);
    		var Y = Array(n);
    		var A = variogram.A;
    		for(i = 0; i < n; i++) {
    			switch(model) {
    				case "gaussian":
    					X[i * 2 + 1] = 1.0 - Math.exp(-(1.0 / A) * Math.pow(lag[i] / variogram.range, 2));
    					break;
    				case "exponential":
    					X[i * 2 + 1] = 1.0 - Math.exp(-(1.0 / A) * lag[i] / variogram.range);
    					break;
    				case "spherical":
    					X[i * 2 + 1] = 1.5 * (lag[i] / variogram.range) -
    						0.5 * Math.pow(lag[i] / variogram.range, 3);
    					break;
    			};
    			Y[i] = semi[i];
    		}
    
    		// Least squares最小平方
    		var Xt = kriging_matrix_transpose(X, n, 2);
    		var Z = kriging_matrix_multiply(Xt, X, 2, n, 2);
    		Z = kriging_matrix_add(Z, kriging_matrix_diag(1 / alpha, 2), 2, 2);
    		var cloneZ = Z.slice(0);
    		if(kriging_matrix_chol(Z, 2))
    			kriging_matrix_chol2inv(Z, 2);
    		else {
    			kriging_matrix_solve(cloneZ, 2);
    			Z = cloneZ;
    		}
    		var W = kriging_matrix_multiply(kriging_matrix_multiply(Z, Xt, 2, 2, n), Y, 2, n, 1);
    
    		// Variogram parameters变差函数参数
    		variogram.nugget = W[0];
    		variogram.sill = W[1] * variogram.range + variogram.nugget;
    		variogram.n = x.length;
    
    		// Gram matrix with prior有先验Gram矩阵
    		n = x.length;
    		var K = Array(n * n);
    		for(i = 0; i < n; i++) {
    			for(j = 0; j < i; j++) {
    				K[i * n + j] = variogram.model(Math.pow(Math.pow(x[i] - x[j], 2) +
    						Math.pow(y[i] - y[j], 2), 0.5),
    					variogram.nugget,
    					variogram.range,
    					variogram.sill,
    					variogram.A);
    				K[j * n + i] = K[i * n + j];
    			}
    			K[i * n + i] = variogram.model(0, variogram.nugget,
    				variogram.range,
    				variogram.sill,
    				variogram.A);
    		}
    
    		// Inverse penalized Gram matrix projected to target vector
    		//反向,,克矩阵投影到目标向量
    		var C = kriging_matrix_add(K, kriging_matrix_diag(sigma2, n), n, n);
    		var cloneC = C.slice(0);
    		if(kriging_matrix_chol(C, n))
    			kriging_matrix_chol2inv(C, n);
    		else {
    			kriging_matrix_solve(cloneC, n);
    			C = cloneC;
    		}
    
    		// Copy unprojected inverted matrix as K
    		//复制未投影的逆矩阵为K
    		var K = C.slice(0);
    		var M = kriging_matrix_multiply(C, t, n, n, 1);
    		variogram.K = K;
    		variogram.M = M;
    
    		return variogram;
    	};
    
    	// Model prediction
    	//模型预测,预测新的坐标点p=(xnew,ynew)的新的值(如高度,温度等)
    	kriging.predict = function(x, y, variogram) {
    		var i, k = Array(variogram.n);
    		for(i = 0; i < variogram.n; i++)
    			k[i] = variogram.model(Math.pow(Math.pow(x - variogram.x[i], 2) +
    					Math.pow(y - variogram.y[i], 2), 0.5),
    				variogram.nugget, variogram.range,
    				variogram.sill, variogram.A);
    		return kriging_matrix_multiply(k, variogram.M, 1, variogram.n, 1)[0];
    	};
    	//模型方差
    	kriging.variance = function(x, y, variogram) {
    		var i, k = Array(variogram.n);
    		for(i = 0; i < variogram.n; i++)
    			k[i] = variogram.model(Math.pow(Math.pow(x - variogram.x[i], 2) +
    					Math.pow(y - variogram.y[i], 2), 0.5),
    				variogram.nugget, variogram.range,
    				variogram.sill, variogram.A);
    		return variogram.model(0, variogram.nugget, variogram.range,
    				variogram.sill, variogram.A) +
    			kriging_matrix_multiply(kriging_matrix_multiply(k, variogram.K,
    					1, variogram.n, variogram.n),
    				k, 1, variogram.n, 1)[0];
    	};
    
    	// Gridded matrices or contour paths
    	//网格矩阵或轮廓路径
    	//kriging.grid(polygons,variogram,width);
    	//使用刚才的variogram对象使polygons描述的地理位置内的格网元素具备不一样的预测值;
    	//使用一个边界区域按间距生成grid格网数据数组
    	//polygons为区域的坐标数组,可以为多个polygon,variogram为第一步train产生的结果,width为生成grid格网的间距
    	kriging.grid = function(polygons, variogram, width) {
    		var i, j, k, n = polygons.length;
    		if(n == 0) return;
    		// Boundaries of polygons space
    		//多边形空间的边界
    		var xlim = [polygons[0][0][0], polygons[0][0][0]];
    		var ylim = [polygons[0][0][1], polygons[0][0][1]];
    		for(i = 0; i < n; i++) // Polygons多边形
    			for(j = 0; j < polygons[i].length; j++) { // Vertices
    				if(polygons[i][j][0] < xlim[0])
    					xlim[0] = polygons[i][j][0];
    				if(polygons[i][j][0] > xlim[1])
    					xlim[1] = polygons[i][j][0];
    				if(polygons[i][j][1] < ylim[0])
    					ylim[0] = polygons[i][j][1];
    				if(polygons[i][j][1] > ylim[1])
    					ylim[1] = polygons[i][j][1];
    			}
    
    		// Alloc for O(n^2) space
    		var xtarget, ytarget;
    		var a = Array(2),
    			b = Array(2);
    		var lxlim = Array(2); // Local dimensions
    		var lylim = Array(2); // Local dimensions
    		var x = Math.ceil((xlim[1] - xlim[0]) / width);
    		var y = Math.ceil((ylim[1] - ylim[0]) / width);
    
    		var A = Array(x + 1);
    		for(i = 0; i <= x; i++) A[i] = Array(y + 1);
    		for(i = 0; i < n; i++) {
    			// Range for polygons[i]
    			lxlim[0] = polygons[i][0][0];
    			lxlim[1] = lxlim[0];
    			lylim[0] = polygons[i][0][1];
    			lylim[1] = lylim[0];
    			for(j = 1; j < polygons[i].length; j++) { // Vertices
    				if(polygons[i][j][0] < lxlim[0])
    					lxlim[0] = polygons[i][j][0];
    				if(polygons[i][j][0] > lxlim[1])
    					lxlim[1] = polygons[i][j][0];
    				if(polygons[i][j][1] < lylim[0])
    					lylim[0] = polygons[i][j][1];
    				if(polygons[i][j][1] > lylim[1])
    					lylim[1] = polygons[i][j][1];
    			}
    
    			// Loop through polygon subspace
    			a[0] = Math.floor(((lxlim[0] - ((lxlim[0] - xlim[0]) % width)) - xlim[0]) / width);
    			a[1] = Math.ceil(((lxlim[1] - ((lxlim[1] - xlim[1]) % width)) - xlim[0]) / width);
    			b[0] = Math.floor(((lylim[0] - ((lylim[0] - ylim[0]) % width)) - ylim[0]) / width);
    			b[1] = Math.ceil(((lylim[1] - ((lylim[1] - ylim[1]) % width)) - ylim[0]) / width);
    			for(j = a[0]; j <= a[1]; j++)
    				for(k = b[0]; k <= b[1]; k++) {
    					xtarget = xlim[0] + j * width;
    					ytarget = ylim[0] + k * width;
    					if(polygons[i].pip(xtarget, ytarget))
    						A[j][k] = kriging.predict(xtarget,
    							ytarget,
    							variogram);
    				}
    		}
    		A.xlim = xlim;
    		A.ylim = ylim;
    		A.zlim = [variogram.t.min(), variogram.t.max()];
    		A.width = width;
    		return A;
    	};
    	kriging.contour = function(value, polygons, variogram) {
    
    	};
    
    	// Plotting on the DOM
    	//在DOM上绘图
    	//kriging.plot(canvas,grid,xlim,ylim,colors);将得到的格网grid渲染至canvas上
    	kriging.plot = function(canvas, grid, xlim, ylim, colors) {
    		// Clear screen 
    		var ctx = canvas.getContext("2d");
    		ctx.clearRect(0, 0, canvas.width, canvas.height);
    
    		// Starting boundaries
    		var range = [xlim[1] - xlim[0], ylim[1] - ylim[0], grid.zlim[1] - grid.zlim[0]];
    		var i, j, x, y, z;
    		var n = grid.length;
    		var m = grid[0].length;
    		var wx = Math.ceil(grid.width * canvas.width / (xlim[1] - xlim[0]));
    		var wy = Math.ceil(grid.width * canvas.height / (ylim[1] - ylim[0]));
    		for(i = 0; i < n; i++)
    			for(j = 0; j < m; j++) {
    				if(grid[i][j] == undefined) continue;
    				x = canvas.width * (i * grid.width + grid.xlim[0] - xlim[0]) / range[0];
    				y = canvas.height * (1 - (j * grid.width + grid.ylim[0] - ylim[0]) / range[1]);
    				z = (grid[i][j] - grid.zlim[0]) / range[2];
    				if(z < 0.0) z = 0.0;
    				if(z > 1.0) z = 1.0;
    
    				ctx.fillStyle = colors[Math.floor((colors.length - 1) * z)];
    				ctx.fillRect(Math.round(x - wx / 2), Math.round(y - wy / 2), wx, wy);
    			}
    
    	};
    
    	return kriging;
    }();
    
    展开全文
  • ylim(-7, 7) ax2.set_zlabel('Z') ax2.set_zlim(-1.5, 1.5) plt.show() contour方法图形(等高线不填充): contourf方法图形(等高线填充): (八)3d图中绘制条形图 1、 在3d坐标轴对象下使用bar方法。...

    摘要

    本文通过学习matplotlib绘制3d图形的官方文档,总结了常用的3d图形,以及针对每类图形,通过一个小案例进行可视化。
    官方文档

    (一)添加matplotlib 3D模块

    从工具箱中导入绘制3D图所需要的坐标轴模块

    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    

    绘制子图添加坐标轴时先申明绘制的类型为:3D (使用projection = "3d"进行申明)

    # 绘制子图添加坐标轴时先申明绘制的类型为:3D  (使用projection = "3d"进行申明)
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1,projection = "3d")
    

    在这里插入图片描述

    (二)3d图中绘制曲线

    1、在3d坐标轴对象下使用plot方法
    2、其余参数同2d图。

    # ************* 3d图中绘制曲线 *************
    # 在3d坐标轴对象下使用plot方法
    import numpy as np
    fig = plt.figure()
    ax1 = fig.add_subplot(1,1,1,projection = "3d")
    x = np.linspace(-10,10,100)
    y = np.linspace(-10,10,100)
    z = x**10 + y**3
    ax1.plot(x,y,z,label = "3d curve") #  其余参数同2d图
    ax1.legend()
    plt.show()
    

    在这里插入图片描述

    (三)3d图中绘制散点图

    1、在3d坐标轴对象下使用scatter方法
    2、zdir为指定z轴方向,其余参数同2d绘图。

    # ****************** 3d图中绘制散点图 ******************
    # 在3d坐标轴对象下使用scatter方法
    from mpl_toolkits.mplot3d import Axes3D
    import  matplotlib.pyplot as plt
    fig = plt.figure()
    ax1 = fig.add_subplot(1,1,1,projection = "3d")
    from sklearn.datasets import make_blobs
    data = make_blobs(n_samples = 100,n_features = 3,cluster_std = 2)
    x = data[0][:,0]
    z = data[0][:,1]
    y = data[0][:,2]
    label = data[1]
    colors = ""
    for i in range(100):
        if label[i] == 0:
            colors += "r"
        elif label[i] == 1:
            colors += "g"
        else:
            colors += "b"
    ax1.scatter(x,y,z,zdir = "z",c = colors) # zdir为指定z轴方向,其余参数同2d绘图
    ax1.set_xlabel("x")
    ax1.set_xlabel("y")
    ax1.set_xlabel("z")
    

    在这里插入图片描述

    (四)3d图中绘制线框图

    1、在3d坐标轴对象下使用plot_wireframe方法。
    2、Axes3D写作axes3d也可以
    3、X和Y需要是二维数组
    4、rcount:为沿行方向绘制网格的数目,
    ccount:为沿列方向绘制网格的数目。

    # ****************** 3d图中绘制线框图 ******************
    # 在3d坐标轴对象下使用plot_wireframe方法
    from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以
    import matplotlib.pyplot as plt
    import numpy as np
    fig = plt.figure(figsize=(16,8))
    ax1 = fig.add_subplot(1,1,1,projection = "3d")
    x = np.linspace(-5,5,1000)
    y = np.linspace(-5,5,1000)
    X,Y = np.meshgrid(x,y) # XY需要是二维数组
    Z = np.sin(np.sqrt(X**2+Y**2))
    ax1.plot_wireframe(X,Y,Z,rcount = 15,ccount = 15) # rcount:为沿行方向绘制网格的数目,ccount:为沿列方向绘制网格的数目,
    plt.show()
    

    在这里插入图片描述

    (五)3d图中绘制曲面图

    1、在3d坐标轴对象下使用plot_surface方法。
    2、rcount:为沿行方向绘制网格的数目
    ccount:为沿列方向绘制网格的数目
    cmap:设定配色板(可直接调用matplotlib.cm中的配色板,如autumn,autumn_r,coolwarm等等)
    color:设定颜色

    # ****************** 3d图中绘制曲面图 ******************
    # 在3d坐标轴对象下使用plot_surface方法
    from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以
    import matplotlib.pyplot as plt
    from matplotlib import cm
    import numpy as np
    fig = plt.figure(figsize=(16,8))
    ax1 = fig.add_subplot(1,1,1,projection = "3d")
    x = np.linspace(-5,5,1000)
    y = np.linspace(-5,5,1000)
    X,Y = np.meshgrid(x,y) # XY需要是二维数组
    Z = np.sin(np.sqrt(X**2+Y**2))
    
    surf = ax1.plot_surface(X, Y, Z, cmap=cm.autumn)
    """
    其余参数:
    rcount:为沿行方向绘制网格的数目
    ccount:为沿列方向绘制网格的数目
    cmap:设定配色板(可直接调用matplotlib.cm中的配色板,如autumn,autumn_r,coolwarm等等)
    color:设定颜色
    
    """
    
    fig.colorbar(surf, shrink=0.5, aspect=5)
    plt.show()
    

    在这里插入图片描述

    (六)3d图中绘制三角表面图

    1、 在3d坐标轴对象下使用plot_trisurf方法。
    2、以绘制莫比乌斯带为列。

    # ****************** 3d图中绘制三角表面图 ******************
    # 在3d坐标轴对象下使用plot_trisurf方法
    from mpl_toolkits.mplot3d import axes3d
    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib import cm
    import matplotlib.tri as mtri
    # 以绘制莫比乌斯带为列
    
    fig = plt.figure()
    ax1 = fig.add_subplot(1, 1, 1, projection='3d')
    
    x = np.linspace(0, 2*np.pi,100)
    y = np.linspace(-0.5, 0.5,20)
    x,y = np.meshgrid(x,y)
    # 将二维数组准换为一维数组
    x = x.flatten()
    y = y.flatten()
    
    # 通过莫比乌斯映射,把x,y转化为X,Y,Z
    X = (1 + 0.5 * y * np.cos(x / 2.0)) * np.cos(x)
    Y = (1 + 0.5 * y * np.cos(x / 2.0)) * np.sin(x)
    Z = 0.5 * y * np.sin(x / 2.0)
    
    tri = mtri.Triangulation(x, y)
    
    ax1.plot_trisurf(X, Y, Z, triangles=tri.triangles, cmap=cm.coolwarm)
    ax1.set_zlim(-0.5, 0.5)
    
    plt.show()
    

    在这里插入图片描述

    (七)3d图中绘制等高线

    1、 在3d坐标轴对象下使用contour方法
    2、绘制填充的等高线,使用contourf方法
    3、zdir:选定投影方向。
    offset:选定投影方向的投影位置。

    # ****************** 3d图中绘制等高线 ******************
    # 在3d坐标轴对象下使用contour方法
    # 绘制填充的等高线,使用contourf方法
    
    from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以
    import matplotlib.pyplot as plt
    from matplotlib import cm
    import numpy as np
    fig = plt.figure(figsize=(16,16))
    
    # contour方法
    
    ax1 = fig.add_subplot(2,1,1,projection = "3d")
    x = np.linspace(-5,5,1000)
    y = np.linspace(-5,5,1000)
    X,Y = np.meshgrid(x,y) # XY需要是二维数组
    Z = np.sin(np.sqrt(X**2+Y**2))
    
    surf = ax1.plot_surface(X, Y, Z,alpha = 0.3)
    ax1.contour(X, Y, Z, zdir='z', offset=-1.5, cmap=cm.coolwarm)
    ax1.contour(X, Y, Z, zdir='x', offset=-7, cmap=cm.coolwarm)
    ax1.contour(X, Y, Z, zdir='y', offset=7, cmap=cm.coolwarm)
    """
    zdir:选定投影方向
    offset:选定投影方向的投影位置
    
    """
    ax1.set_xlabel('X')
    ax1.set_xlim(-7, 7)
    ax1.set_ylabel('Y')
    ax1.set_ylim(-7, 7)
    ax1.set_zlabel('Z')
    ax1.set_zlim(-1.5, 1.5)
    
    # contourf方法
    ax2 = fig.add_subplot(2,1,2,projection = "3d")
    
    surf = ax2.plot_surface(X, Y, Z,alpha = 0.3)
    ax2.contourf(X, Y, Z, zdir='z', offset=-1.5, cmap=cm.coolwarm)
    ax2.contourf(X, Y, Z, zdir='x', offset=-7, cmap=cm.coolwarm)
    ax2.contourf(X, Y, Z, zdir='y', offset=7, cmap=cm.coolwarm)
    """
    zdir:选定投影方向
    offset:选定投影方向的投影位置
    
    """
    ax2.set_xlabel('X')
    ax2.set_xlim(-7, 7)
    ax2.set_ylabel('Y')
    ax2.set_ylim(-7, 7)
    ax2.set_zlabel('Z')
    ax2.set_zlim(-1.5, 1.5)
    
    plt.show()
    
    

    contour方法图形(等高线不填充):
    在这里插入图片描述
    contourf方法图形(等高线填充):
    在这里插入图片描述

    (八)3d图中绘制条形图

    1、 在3d坐标轴对象下使用bar方法
    2、 left:表示条形图的横轴
    height:表示条形图的纵轴
    zdir:多组条形图的排列方向,即哪个轴
    zs:多组条形图在排列方向上的位置

    # ****************** 3d图中绘制条形图 ******************
    # 在3d坐标轴对象下使用bar方法
    from mpl_toolkits.mplot3d import axes3d
    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.figure(figsize=(16,16))
    ax1 = fig.add_subplot(2,1,1,projection = "3d")
    np.random.seed(10)
    for color,z in zip(["r","g","b","k","y"],[0,10,20,30,40]):
        x = np.arange(10)
        y = np.abs(np.random.randn(10))
        ax1.bar(left = x,height = y,zs = z,zdir = "z",color = color)
        """
        left:表示条形图的横轴
        height:表示条形图的纵轴
        zdir:多组条形图的排列方向,即哪个轴
        zs:多组条形图在排列方向上的位置
        """
    # 由此可知沿y轴排列会较为美观
    ax2 = fig.add_subplot(2,1,2,projection = "3d")
    for color,z in zip(["r","g","b","k","y"],[0,10,20,30,40]):
        x = np.arange(10)
        y = np.abs(np.random.randn(10))
        ax2.bar(left = x,height = y,zs = z,zdir = "y",color = color)
        """
        left:表示条形图的横轴
        height:表示条形图的纵轴
        zdir:多组条形图的排列方向,即哪个轴
        zs:多组条形图在排列方向上的位置
        """
    ax1.set_xlabel("x",size = 20)
    ax2.set_xlabel("x",size = 20)
    ax1.set_ylabel("y",size = 20)
    ax2.set_ylabel("y",size = 20)
    ax1.set_zlabel("z",size = 20)
    ax2.set_zlabel("z",size = 20)
    
    plt.show()
    

    沿z轴排列图形:
    在这里插入图片描述
    沿y轴排列图形:(更为美观)
    在这里插入图片描述
    by CyrusMay 2020 05 07

    你是一种感觉
    写在夏夜晚风里面
    ——————五月天(疯狂世界)——————

    展开全文
  • 今天浏览了Matlab官网,看了一下官网提供的Matlab的绘图工具箱,因为很多之前没有注意到,部分虽然自己可以实现,但是功能不够完善,因此,今天做一下工具箱的总结,以用来记录自己的学习过程,详情请移步MathWorks...
  • 第9讲 回归问题 机器学习:数据中学习,拟合模型 步骤:建立模型——学习模型——预测识别
  • matlab设定坐标轴范围和坐标轴显示

    万次阅读 多人点赞 2018-12-03 11:22:33
    设定坐标轴范围: 最简单的办法 axis([xmin,xmax,ymin,ymax]); 分坐标轴设定:  ...zlim([zmin,zmax]);%对Z轴设定显示范围  设定坐标轴显示: 最简单的办法: set(gca,'YTick',[0:0.1:1]);%设...
  • ax.set_zlim(z_min - margin, z_max + margin) ax.set_xlabel( 'x' ) ax.set_ylabel( 'y' ) ax.set_zlabel( 'z' ) ax.legend( loc = 'lower right' ) ax.set_title( 'Plot of class0 vs. class1' ) ax.view_init...
  • #9、mat基础2

    2019-06-28 13:54:39
    ax.set_zlim(-2,2) #让图显示中文 #coding:utf-8 #有中文出现的情况,需要u'内容' plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示...
  • I = imread(‘rice.png’);%读取米粒图像 figure(1); subplot(221) imshow(I);%显示原图像 ...zlim([0 255]);%显示背景变化情况 set(gca,‘ydir’,‘reverse’); I2 = imsubtract(I,background);%减
  • matlab学习(4)

    2021-03-16 10:17:18
    %% 偏导数的计算 % 计算一阶偏导数 syms x y; z = (x^2 - 2*x)exp(-x2-y2-xy); zx = simplify(diff(z, x)) zy = diff(z,y) % 绘制三维曲面 ...surf(x0, y0, z0), zlim([-0.7 1.5]); hold off % 引力线 figur
  • 文章作者:Tyan 博客: ... |  CSDN |  简书 本文主要使用matplotlib进行3D图像的绘制。...ax.set_zlim(-2, 2) plt.show() 结果 参考资料 https://www.youtube.com/user/MorvanZhou
  • matplotlib模块数据可视化-3D图

    万次阅读 多人点赞 2017-08-18 10:35:18
    ax.set_zlim(-2,2) plt.show() 2.2 效果图 3 绘制散点图 3.1 源码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = ...
  • matplotlib学习(二)

    2018-01-13 15:23:06
    ax.set_zlim(- 2 , 2 ) plt.show() #subplot创建小图 plt.figure() plt.subplot( 2 , 2 , 1 ) plt.plot([ 0 , 1 ],[ 0 , 1 ]) #no 2 plt.subplot( 2 , 2 , 2 ) plt.plot([ 0 , 1 ],[ 0 , 1 ]) #no 3 ...
  • 使用Python的matplotlib包绘制三维图像

    千次阅读 2018-09-10 20:16:05
    #plt.zlim((-3, 3)) ax.set_zlabel('Z') # 坐标轴 ax.set_ylabel('Y') ax.set_xlabel('X') plt.show() csv文件内容如下: 效果如下:    将csv文件中前n行用红色标记点,后m行用蓝色标记点 ...
  • MATLAB Robotic Toolbox 机器人工具箱示例

    千次阅读 2020-02-06 22:57:14
    zlim ( [ 0 , 60 ] ) % 绘制第 1 段轨迹线 for i = 1 : 1 : length ( t ) atj = Rbt . fkine ( sqtraj1 ( i , : ) ) ; JTA ( i , : ) = transl ( atj ) ; % 提取位姿矩阵的平移分量( 3 元素列向量)...
  • ax.contour(X, Y, Z, zdim = 'z', offset = -2, cmap = 'rainbow') # 设置z轴的维度 ax.set_zlim(-3, 3) ax.set_xlabel('x axis') ax.set_ylabel('y axis') ax.set_zlabel('z axis') plt.show() 运行结果
  • 因本人刚开始写博客,学识经验有限,如有不正之处望读者指正,不胜感激;也望借此平台留下学习笔记以温故而知新。这是关于tensorflow 中slim(TF-Slim)用法的详解。 ...
  • I test with Matlab R2016b 1- install wmname sudo install wmname 2- Now you should change the window manager name to LG3D.... "wmname LG3D". ...bash "/usr/local/MATLAB/R2016b/bin/matlab". ...
  • matplotlib 绘制三维图

    千次阅读 2016-07-08 13:49:03
    ax.set_zlim(-1.01, 1.01)   ax.zaxis.set_major_locator(LinearLocator(10)) ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))   fig.colorbar(surf, shrink=0.5, aspect=5)   plt...
  • 使用matplotlib绘制3D图

    2018-03-19 17:26:49
    本文主要使用matplotlib进行3D图像的绘制。 Demo import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D # 定义figure ...ax.set_zlim(- 2 , 2 ) plt.show() 结果
  • python之set语法

    2019-07-06 23:34:34
    未完待续
  • import numpy as np import matplotlib as plt x = np.array([1,2,3,4,5,6,7,8]) y = np.random.randint(5,size = 8) plt.plot(x,y,'r') plt.show() 出现错误 plt.plot(x,y,'r') AttributeError: module '...
  • plt.plot([y_pred_lin.min(), y_pred_lin.max()], [y_pred_lin.min(), y_pred_lin.max()], 'k--', lw=4) # 中线 plt.set_xlabel('Measured') plt.set_ylabel('Predicted') plt.show() 改成: ...
  • matlab机械臂运动仿真

    千次阅读 多人点赞 2019-11-28 15:33:59
    zlim ( [ 0,60 ] ) for i = 1:1:51 atj = Rbt.fkine ( sqtraj1 ( i,: )) ; JTA ( i,: ) = transl ( atj ) ; jta = JTA ; plot3 ( jta ( i,1 ) ,jta ( i,2 ) ,jta ( i,3 ) , 'r.' ) Rbt.plot ( sqtraj1 ...
  • matlab流场可视化后处理

    万次阅读 多人点赞 2019-03-12 13:41:37
    zlim([4.9,5.1]); streamparticles(iverts, 200, 'Animate',15,'FrameRate',40, ... 'MarkerSize',10,'MarkerFaceColor',[0 .5 0]) 输出粒子在某一时刻的截图如下: 2.8 Volume Viewer APP 最近看到了一个App,在...
  • surface(X, Y, R, rstride=1, cstride=1, cmap='rainbow') #投影 offset把图形压缩到xoy里面,z=0的位置 ax.contourf(X,Y,R,zdir='z',offset=0,cmap='rainbow') ax.set_zlim(0,4) plt.show() from mpl_toolkits.mplot...
  • 神经网络rbf

    2016-12-05 21:43:00
    zlim([0,60]) %plot the original function interval=0.1; [x1, x2]=meshgrid(-1.5:interval:1.5); F = 20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2); subplot(1,3,1) mesh(x1,x2,F); zlim([0,60]) %plot the ...
  • # 标位子 ax.set_xlim(X.min(), X.max()) ax.set_ylim(Y.min(), Y.max()) ax.set_zlim(Z.min(), Z.max()) plt.show() 6.完整代码演示 import torch import torch.nn as nn import torch.utils.data as Data import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,885
精华内容 754
关键字:

zlim