MATLAB使Excel自动生成图

%% 日期2022-1-9在桌面建立画图文件夹,把Excel放入,运行MATLAB自动生图
clc;clear all;close all;
%% 读取数据
name = getenv('username');%得到用户名
path=fullfile('C:\Users\',name,'\Desktop','画图');
file=dir(fullfile(path,'*'));
for i=1:length(file)
  if (file(i).isdir==0 | file(i).bytes~=0)
     file_name=file(i).name;
  end
end
str1='y';str2='e';str3='f';
str1=input('是否包含第一行Y/N:','s');
str2=input('自变量在哪一列(字母):','s');
str3=input('因变量在哪一列(字母):','s');
str4=input('工作表sheet名称:','s');
picname=input('请输入图名:','s');
legname=input('请输入图例名: ','s');
x_label=input('请输入自变量为:','s');
y_label=input('请输入因变量为:','s');
n=input('请输入拟合多项式的最高次数(最高4次):');
n=fix(n);%向下取整
if strncmpi(str1,'y',1)  %在忽略字符串大小写前提下,比较前n个字符是否相等
    T=readtable([path,'\', file_name],'VariableNamingRule','preserve','sheet',str4);
    %'VariableNamingRule','preserve'使用表格里的标题做变量名
else
    T=readtable([path,'\',file_name],'Format','auto','sheet',str4);
end
%% 读取不同列数据
row2=abs(upper(str2(1)))-64;
row3=abs(upper(str3(1)))-64;

%% 画图
h=figure('name','画图');
x=T{:,row2};y=T{:,row3};
plot(x,y,'o-','linewidth',2)
set(gcf,'color',[256/256, 256/256, 256/256],'position',get(0,'ScreenSize'))
set(gca,'FontSize',12)
axis auto
set(gca,'xminortick','on');%小刻度打开
set(gca,'ticklength',[0.01 0.0025]);%刻度长度(大刻度与小刻度长度)
%set(gca,'xtick',[x(1),x(2),x(3),x(4),x(5)])%选择x轴的要进行标注的位置
set(gca,'tickdir','in'); %决定坐标轴上的刻度线在图形里
% set(gca,'xdir','reverse')/ set(gca,'ydir','reverse');%坐标轴刻度翻转
set(gca, 'Xcolor', [0, 0 , 0]);% 设置坐标轴的颜色
set(gca, 'Ycolor', [0, 0, 0]);

%% 箭头(要自己改或者不要)
hold on;
ax=[max(x),max(x)-max(x)*0.017,max(x)-max(x)*0.017;0,0-max(y)*0.017,-(0-max(y)*0.017)];  %添加箭头,不好控制没写
fill(ax(1,:),ax(2,:),'k');
hold on;
ay=[0,0-max(x).*0.01,-(0-max(x)*0.01);max(y)+1.5,max(y)+1.5-max(y)*0.017,max(y)+1.5-max(y)*0.017];  %添加箭头,不好控制没写
fill(ay(1,:),ay(2,:),'k');
set(gca,'XAxisLocation','origin');%将x轴的位置设置在y=0处。
set(gca,'YAxisLocation','origin');
set(gca,'XLim',[-max(x)/30 ,max(x)]);set(gca,'YLim',[-max(y)*0.017 ,max(y)+1.5]);
leg=legend(legname,'Orientation','horizon','Box','off','FontSize',12,'Location','east ');
%通过将 NumColumns 属性设置为 2 来添加一个具有两列的图例
title(leg,'图例','FontSize',12);
box off%去掉右边和上边的刻度线
title(legname,'color','k');
text(max(x)/30,max(y)+1,x_label);
text(max(x),0,y_label);
hold on;
% annotation('textarrow',[0.6 0.5],[0.4 0.2],'String','y=');
%% 拟合
np=polyfit(x,y,n);
pol=num2str(np(n+1));
for i=1:n
    %负数表示小数点后
    if np(n+1)>0 | np(n+1)==0 
       pol=strcat(num2str(roundn(np(i),-2)),'.*x.^',num2str(n-i+1) ,'+',pol) ;
    else
       pol=strcat(num2str(roundn(np(i),-2)),'.*x.^',num2str(n-i+1) ,pol) ;
    end
end
annotation('textarrow',[0.5 0.5],[0.6 0.55],'String',['y=',pol]);
print(h,'-r300','-djpeg',[path,'/','图片.jpeg']);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值