如何提高MATLAB图形的可读性

如何提高MATLAB图形的可读性,matlab,graph,charts,Matlab,Graph,Charts,我有下面的图,用标记表示平均值,用误差条表示最小值和最大值。如您所见,很难区分不同数据点之间的差异,因为它们重叠 我删除了这个传说,这样就可以更容易地看到这个情节了 我的想法是把这个图分成两个独立的图,一个是数据从0到.25的图,另一个是数据从.35到.6的图,但我不确定这是否会改善很多或者看起来很糟糕 我希望一些经验丰富的MATLAB用户对如何修改我的绘图有一些想法,例如更改轴限制,使用轴正方形或轴图像,或其他我不知道的东西 我甚至尝试使用setgca、'XScale'、'log'命令切换到日

我有下面的图,用标记表示平均值,用误差条表示最小值和最大值。如您所见,很难区分不同数据点之间的差异,因为它们重叠

我删除了这个传说,这样就可以更容易地看到这个情节了

我的想法是把这个图分成两个独立的图,一个是数据从0到.25的图,另一个是数据从.35到.6的图,但我不确定这是否会改善很多或者看起来很糟糕

我希望一些经验丰富的MATLAB用户对如何修改我的绘图有一些想法,例如更改轴限制,使用轴正方形或轴图像,或其他我不知道的东西

我甚至尝试使用setgca、'XScale'、'log'命令切换到日志图

但我的结果如下:
这与Try-Hard在评论中的建议大致相同。 下面的代码是一个复制/粘贴示例,用于创建一个与您似乎拥有的数据集相似的数据集,对其进行打印,然后在空白区域中添加缩放的打印:

% generate example data-set
% for the sake of simplicity, the x-data will be ascending

X(1:5,1) = sort(rand(5,1)*0.05+0.1);
X(6:7,1) = sort(rand(2,1)*0.1+0.5);

Y(1:5,1) = rand(5,1)*10+50;
Y(6:7,1) = rand(2,1)*10+90;

Yerr = rand(7,2)*25;

% initial errorbar plot

eax = axes('Position', [0.15, 0.15, 0.75, 0.75]);
errorbar(eax,X,Y,Yerr(:,1),Yerr(:,2),'ob')

hold on

% control axis range

XMIN = min(X)-0.05;
XMAX = max(X)+0.05;
YMIN = min(Y-Yerr(:,1))-10.0;
YMAX = max(Y+Yerr(:,2))+10.0;

xlim([XMIN XMAX]);
ylim([YMIN YMAX]);

% determine max distance between the two groups
% and its location (index)

[MD, IMD] = max(X(2:end)-X(1:end-1))

% set up zoomed plot

% based on know axis limits and location
% the position of the zoomed plot can be 
% set up parametrically:

X1 = (X(IMD,1) + MD * 0.1)/(XMAX-XMIN);
Y1 = (YMIN + 10)/(YMAX-YMIN);
DX1 = 0.35;
DX2 = 1.0;

zax = axes('Position', [X1, Y1, DX1, DX1]);
errorbar(zax,X,Y,Yerr(:,1),Yerr(:,2),'ob')
set(zax,'XLim',[XMIN+0.04 X(IMD)+0.01],'Title',text('String','zoomed'))
此代码生成如下图:


这与Try-Hard在一篇评论中提出的建议是一致的。 下面的代码是一个复制/粘贴示例,用于创建一个与您似乎拥有的数据集相似的数据集,对其进行打印,然后在空白区域中添加缩放的打印:

% generate example data-set
% for the sake of simplicity, the x-data will be ascending

X(1:5,1) = sort(rand(5,1)*0.05+0.1);
X(6:7,1) = sort(rand(2,1)*0.1+0.5);

Y(1:5,1) = rand(5,1)*10+50;
Y(6:7,1) = rand(2,1)*10+90;

Yerr = rand(7,2)*25;

% initial errorbar plot

eax = axes('Position', [0.15, 0.15, 0.75, 0.75]);
errorbar(eax,X,Y,Yerr(:,1),Yerr(:,2),'ob')

hold on

% control axis range

XMIN = min(X)-0.05;
XMAX = max(X)+0.05;
YMIN = min(Y-Yerr(:,1))-10.0;
YMAX = max(Y+Yerr(:,2))+10.0;

xlim([XMIN XMAX]);
ylim([YMIN YMAX]);

% determine max distance between the two groups
% and its location (index)

[MD, IMD] = max(X(2:end)-X(1:end-1))

% set up zoomed plot

% based on know axis limits and location
% the position of the zoomed plot can be 
% set up parametrically:

X1 = (X(IMD,1) + MD * 0.1)/(XMAX-XMIN);
Y1 = (YMIN + 10)/(YMAX-YMIN);
DX1 = 0.35;
DX2 = 1.0;

zax = axes('Position', [X1, Y1, DX1, DX1]);
errorbar(zax,X,Y,Yerr(:,1),Yerr(:,2),'ob')
set(zax,'XLim',[XMIN+0.04 X(IMD)+0.01],'Title',text('String','zoomed'))
此代码生成如下图:


MATLAB文件交换中的此解决方案最终可能看起来更好:

基本上我创造了两个独立的数字。 第一个是整个图形的特征。 第二个图显示了不可见点的放大版本。这些要点有一个相似的特点,使它们成为最好的

因此,我将第一个图形标记为“所有选项” 第二个图形选项具有最佳折衷


我最终没有使用面板。我创建了单独的图形,以便可以轻松地调整它们的大小,但Panel也会做类似的事情。

这个来自MATLAB文件交换的解决方案可能会看起来更好:

基本上我创造了两个独立的数字。 第一个是整个图形的特征。 第二个图显示了不可见点的放大版本。这些要点有一个相似的特点,使它们成为最好的

因此,我将第一个图形标记为“所有选项” 第二个图形选项具有最佳折衷


我最终没有使用面板。我创建了单独的图形,以便可以轻松调整它们的大小,但面板也可以做类似的事情。

从FileExchange尝试。a如何?@Schorsch,我尝试使用BreakXAxis,但我一次一个地绘制每个点,因为我必须单独调整它们的标记。我在使用这个函数时遇到问题。有什么建议吗?这里有一些非常大的错误条:哦,我的意思是非常大…我会同意你将绘图分成两个区域,或者生成第二个图形,或者将插图放大到不清楚的区域。从文件交换中尝试。a呢?@Schorsch,我正在尝试使用BreakXAxis,但我一次画一个点,因为我必须单独调整它们的标记。我在使用这个函数时遇到问题。有什么建议吗?这里有一些非常大的错误条:哦,我的意思是非常大…我会同意你将绘图分成两个区域,或者生成第二个图形,或者插入放大到不清楚的区域。谢谢你知道如何轻松制作面板图吗?@starbox我以前没有做过面板图。所以基本上我会从你要开始的地方开始,研究子地块函数的选项并从那里开始。谢谢你知道如何轻松制作面板图吗?@starbox我以前没有做过面板图。所以基本上我会从你要开始的地方开始,研究子地块函数的选项,然后从那里开始。