Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用matlab绘制图形_Matlab_Plot - Fatal编程技术网

用matlab绘制图形

用matlab绘制图形,matlab,plot,Matlab,Plot,我在使用.dat文件的数据绘制图形时遇到问题。有人能帮我吗 该文件另存为/My Documents/filename.dat,有三列数字表示变量X、Y和Z X为45到90,变化为.5 Z为0.4至0.95,变化为0.05 Y是这两个变量的结果 示例:.dat文件中的一部分数据 48.000000 -0.000010 0.400000 48.500000 -0.000004 0.400000 49.000000 0.000003 0.400000 49.500000 0.000010 0.4000

我在使用.dat文件的数据绘制图形时遇到问题。有人能帮我吗

该文件另存为/My Documents/filename.dat,有三列数字表示变量X、Y和Z

X为45到90,变化为.5 Z为0.4至0.95,变化为0.05 Y是这两个变量的结果

示例:.dat文件中的一部分数据

48.000000 -0.000010 0.400000
48.500000 -0.000004 0.400000
49.000000 0.000003 0.400000
49.500000 0.000010 0.400000
50.000000 0.000016 0.400000
我想绘制X和Y的二维图形,颜色应根据Z变量而变化。

用于读取数据:

fid = fopen('/My Documents/filename.dat');
data = textscan(fid, '%f %f %f');
fclose(fid);
X=data{1};
Y=data{2};
Z=data{3};
绘图方法1 那么如果你用

plot(X,Y)
你会得到一个由线组成的普通图。然而,这些都有相同的颜色。除非将它们拆分为单独的行,否则无法更改它们

幸运的是,还有一个功能允许您执行此操作:

scatter(X,Y,[],Z)
这将使用基于Z的颜色打印点

绘图方法2 如果希望点与颜色不同的线连接,则必须将其绘制为单独的线,并分别为每条线提供颜色:

plot([X(1:end-1)' ; X(2:end)'], [Y(1:end-1)' ; Y(2:end)']);
这些线条现在有了默认的颜色,要获得正确的颜色有点麻烦,不过,下面是一个例子。不幸的是,我现在没有任何方法可以在这样的一行中输入颜色,所以我们必须循环

Ncolors=10;
zmin=min(Z);zmax=max(Z);
dz=max((zmax-zmin)/Ncolors,eps);
clr_map=jet(Ncolors);
clr_ids=min(floor((Z(1:end-1)-zmin)/dz)+1,Ncolors);

figure;hold on;
for ii=1:numel(X)-1
    plot([X(ii) X(ii+1)], [Y(ii) Y(ii+1)],'color',clr_map(clr_ids(ii),:))
end
所有线条现在都有基于其端点之一的颜色

要添加颜色,请使用颜色条,是吗?但当然,那个酒吧的标签是指。幸运的是,我们可以改变它们:

colormap(clr_map);
h_cb=colorbar;
set(h_cb,'yticklabel',arrayfun(@num2str,linspace(zmin,zmax,numel(get(h_cb,'ytick'))),'uni',false));
更改Ncolors以在为线条着色时使用更多/更少的分辨率。 可能过度:您还可以更改颜色栏上的标签数量,以下操作将其更改为10:

colormap(clr_map);
h_cb=colorbar;
set(h_cb,'ytick',linspace(1,Ncolors,10));
set(h_cb,'yticklabel',arrayfun(@num2str,linspace(zmin,zmax,10),'uni',false));
或者现在标签只有两个小数:

set(h_cb,'yticklabel',arrayfun(@(yi) sprintf('%.2g',yi),linspace(zmin,zmax,10),'uni',false));
绘图方法3 最后一种方法是使用速度较慢的修补程序,这在3d案例中有说明,因此如果需要,您可以从那里开始。

用于读取数据:

fid = fopen('/My Documents/filename.dat');
data = textscan(fid, '%f %f %f');
fclose(fid);
X=data{1};
Y=data{2};
Z=data{3};
绘图方法1 那么如果你用

plot(X,Y)
你会得到一个由线组成的普通图。然而,这些都有相同的颜色。除非将它们拆分为单独的行,否则无法更改它们

幸运的是,还有一个功能允许您执行此操作:

scatter(X,Y,[],Z)
这将使用基于Z的颜色打印点

绘图方法2 如果希望点与颜色不同的线连接,则必须将其绘制为单独的线,并分别为每条线提供颜色:

plot([X(1:end-1)' ; X(2:end)'], [Y(1:end-1)' ; Y(2:end)']);
这些线条现在有了默认的颜色,要获得正确的颜色有点麻烦,不过,下面是一个例子。不幸的是,我现在没有任何方法可以在这样的一行中输入颜色,所以我们必须循环

Ncolors=10;
zmin=min(Z);zmax=max(Z);
dz=max((zmax-zmin)/Ncolors,eps);
clr_map=jet(Ncolors);
clr_ids=min(floor((Z(1:end-1)-zmin)/dz)+1,Ncolors);

figure;hold on;
for ii=1:numel(X)-1
    plot([X(ii) X(ii+1)], [Y(ii) Y(ii+1)],'color',clr_map(clr_ids(ii),:))
end
所有线条现在都有基于其端点之一的颜色

要添加颜色,请使用颜色条,是吗?但当然,那个酒吧的标签是指。幸运的是,我们可以改变它们:

colormap(clr_map);
h_cb=colorbar;
set(h_cb,'yticklabel',arrayfun(@num2str,linspace(zmin,zmax,numel(get(h_cb,'ytick'))),'uni',false));
更改Ncolors以在为线条着色时使用更多/更少的分辨率。 可能过度:您还可以更改颜色栏上的标签数量,以下操作将其更改为10:

colormap(clr_map);
h_cb=colorbar;
set(h_cb,'ytick',linspace(1,Ncolors,10));
set(h_cb,'yticklabel',arrayfun(@num2str,linspace(zmin,zmax,10),'uni',false));
或者现在标签只有两个小数:

set(h_cb,'yticklabel',arrayfun(@(yi) sprintf('%.2g',yi),linspace(zmin,zmax,10),'uni',false));
绘图方法3
最后一种方法是使用速度较慢的修补程序,这在3d案例中有说明,因此,如果需要,您可以从那里开始。

您只是想知道如何进行打印,还是不知道如何打开和读取文件?请查阅surf和meshgrid@Dan我最初也是这么想的,但他实际上要求一个XY图,其中包含一条线,其颜色沿X轴变化,并包含在值Z中。@Dan,这不是3d图,它是一个具有不同颜色副本的2d图。你只想知道如何绘制吗,或者你也不知道如何打开和读取文件?查找冲浪和meshgrid@Dan这也是我最初的想法,但他实际上要求一个XY图,其中包含一条线,其颜色沿X轴变化,并包含在值Z中。@Dan,它不是3d图,这是一个具有不同颜色副本的2d绘图。在方法2中,我可以有一个表示z变量特定值的颜色的条吗?在方法2中,我可以有一个表示z变量特定值的颜色的条吗?