[:zh]
今天帮同学处理数据遇到一个难题如何——如何把多张曲线画在一张图上,首先用cftool进行了尝试,发现power函数拟合良好但是一张图只能华一条曲线,于是尝试用代码实现。首先利用ctool将一条曲线的函数代码导出,然后改写成画三条曲线的代码。
2、改后的代码如下
function [fitresult, gof] = e1(x, y, x1, y1, x2, y2) %将需要绘制图像的数据加入参数中 %CREATEFIT(X,Y) % Create a fit. % % Data for 'untitled fit 1' fit: % X Input : x % Y Output: y % Output: % fitresult : a fit object representing the fit. % gof : structure with goodness-of fit info. % % 另请参阅 FIT, CFIT, SFIT. % 由 MATLAB 于 21-Dec-2015 23:23:33 自动生成 %%三条曲线的原始数据 Fit: 'untitled fit 1'. [xData, yData] = prepareCurveData( x, y ); [xData1, yData1] = prepareCurveData( x1, y1 );%<span style="white-space:pre"> </span>%第二条曲线需要的代码,注意改变参数 [xData2, yData2] = prepareCurveData( x2, y2 );%<span style="white-space:pre"> </span>%第三条曲线需要的代码,注意改变参数 % 选用曲线拟合函数Set up fittype and options. %ft = fittype( 'smoothingspline' );%<span style="white-space:pre"> % </span>%顾名思义,将拟合方式设置为光滑曲线 ft = fittype( 'power2' ); % 进行拟合Fit model to data. [fitresult, gof] = fit( xData, yData, ft ); [fitresult1, gof1] = fit( xData1, yData1, ft );%<span style="white-space:pre"> </span>%第二条曲线需要的代码,注意改变参数 [fitresult2, gof2] = fit( xData2, yData2, ft );%<span style="white-space:pre"> </span>%第三条曲线需要的代码,注意改变参数 % 画出拟合曲线Plot fit with data. figure( 'Name', 'fit 1' ); h = plot( fitresult,'b', xData, yData,'+b' ); %legend( h, 't1', 'A vs. t1' ,h1, 't2', 'B vs. t2', h2, 't3', 'C vs. t3'); hold on; %加入hold on 可以使之后的曲线画在同一张图中 h1 = plot( fitresult1,'y', xData1, yData1, '*y' ); %legend( h1, 't2', 'B vs. t2' ); hold on; h2 = plot( fitresult2, 'g',xData2, yData2, 'og' ); %legend( h2, 't3', 'C vs. t3', 'Location', 'NorthEast' ); legend( 't1', 'A vs. t1', 't2', 'B vs. t2', 't3', 'C vs. t3'); hold on; %设置背景颜色为绿色 backColor = [0.3 0.6 0.4]; set(gca, 'color', backColor) % Label axes xlabel( '龄期/天' ); ylabel( '立方体抗压强度值 MPa' ); set(gca,'FontStyle','Bold')%设置坐标轴加粗 grid on
3 画图结果: