1. 功能:以算术坐标和对数坐标的方式显示数据曲线,适用于X轴和Y轴。
2. 实现:
2.1 平台: WinCE6.0 + VS2005
2.2 实现方法:如果是算术坐标显示,则数据值的差值与屏幕上像素点的间距成线性比例;如果是对数坐标显示,则数据值的差值与屏幕上像素点的间距不成线性比例,而是非线性的,计算公式为:
Matlab代码:
clc;%% 几种对数显示方式的比较clc;clear all;close all;x=1:0.1:10;y=10*x.^2;%y=x;figure(1);subplot(221);plot(x,y);%x,y都是线性坐标title('plot(x,y)');grid on;subplot(222);semilogx(x,y);%x是对数坐标,即将x取10的对数title('semilogx(x,y)');grid on;subplot(223);semilogy(x,y);%y是对数坐标,即将y取10的对数title('semilogy(x,y)');grid on;subplot(224);loglog(x,y);%x和y都是对数坐标,即将x和y取10的对数title('loglog(x,y)');grid on;%%-------------------End-------------------------------
Y轴原始数据为各个横轴x值的指数值。
运行效果为:
2.2.1 横轴算术坐标显示,纵轴算术坐标显示
这种方法按照数据值的差值与屏幕上像素点的间距成线性比例依次求出各个数据点的坐标即可。
2.2.2 横轴对数坐标显示,纵轴算术坐标显示
Matlab代码如下:
% X轴对数坐标显示,Y轴算术坐标显示 clc; clear all; close all; x0Pixel = 0; x2Pixel = 10; %像素点间距 x0 = 1; x2 = 10; % 实际的X轴值,x2Pixel表示离X轴原点的像素点距离 x1=2; xPos = zeros(1,10); yPos = zeros(1,10); for x1=1:1:10 k=(log(x1)-log(x0))/(log(x2)-log(x0)); x1Pixel=(x2Pixel+(1-k)*x0Pixel)*k; xPos(x1)=x1Pixel; y=10*x1.^2; yPos(x1) = y; end figure(1); plot(xPos,yPos);
%----------------------End---------------------------
运行效果为:
使用LabVIEW软件显示这条曲线,如下图:
2.2.3 横轴算术坐标显示,纵轴对数坐标显示
Matlab代码如下:
% X轴算术坐标显示,Y轴对数坐标显示
clc; clear all; close all; y0Pixel = 0; y2Pixel = 20; %像素点个数最大值 y2Pixel表示离X轴原点的像素点距离 y0 = 10; % 对应于x1 =1; y2 = 1000; % 实际的X轴值,对应于x1=10 xPos = zeros(1,10); yPos = zeros(1,10); for x1=1:1:10 xPos(x1)=x1; y1=10*x1.^2; k=(log(y1)-log(y0))/(log(y2)-log(y0)); y1Pixel=(y2Pixel+(k-1)*y0Pixel)*k; yPos(x1)=y1Pixel; end figure(1); plot(xPos,yPos);
%------------------------End----------------------------
运行结果如下:
用LabVIEW软件显示的曲线效果如下:
2.2.4 横轴对数坐标显示,纵轴对数坐标显示
Matlab代码如下:
% X轴对数坐标显示,Y轴对数坐标显示
clc; clear all; close all; x0Pixel = 0; x2Pixel = 10; %像素点间距 xPos = zeros(1,10); x0 = 1; x2 = 10; % 实际的X轴值,x2Pixel表示离X轴原点的像素点距离 yPos = zeros(1,10); for x1=2:1:9 k=(log10(x2)-log10(x0))/(log10(x1)-log10(x0)); x1Pixel=(x2Pixel+(k-1)*x0Pixel)/k; xPos(x1)=x1Pixel; end
y0Pixel = 0; y2Pixel = 20; %像素点个数最大值 y2Pixel表示离X轴原点的像素点距离 y0 = 10; % 对应于x1 =1; y2 = 1000; % 实际的X轴值,对应于x1=10
for x1=2:1:9 y1=10*x1.^2; k=(log10(y2)-log10(y0))/(log10(y1)-log10(y0)); y1Pixel=(y2Pixel+(k-1)*y0Pixel)/k; yPos(x1)=y1Pixel; end figure(1); plot(xPos,yPos);
%---------------------End---------------------------
运行效果如下:
用LabVIEW软件显示的曲线效果图如下:
3. 总结:绘制算术坐标或者对数坐标的重点在于根据线性比列或者对数比例确定每个数据点在屏幕上对应的坐标。
转载于:https://www.cnblogs.com/zaishuiyifang006/archive/2012/09/10/2678547.html