图例正在被MATLAB切断

时间:2014-06-07 19:51:13

标签: matlab plot legend

我正在尝试将81个变量绘制到MATLAB中的一个图中,我需要一个带有81个相应标签的图例。我已经设法将这个传说分成几行,这样它可以更好地适应这个数字,但仍然如此,这个传说中的传说被切断了: example 有没有办法解决这个问题,所以图中所有的图例都出现了?

提前谢谢

1 个答案:

答案 0 :(得分:5)

根据我的经验,一旦图表的数量变得如此之大,图例就无法管理。 你可以尝试通过手工制作一个紧凑的传奇来手动移动传说线和文本框 - 但我担心这种方式最终会让你感到不快。如果你愿意,你可以通过写下以下内容来开始玩传奇作品:

hl = legend(uniqueHandles, myNames);
hlc = get(hl, 'children');

这可能是不可能的,MATLAB会拒绝你。相反,考虑到81种不同颜色的图例变得非常难以管理,无论如何你都无法区分颜色。我没有尝试将它们全部整合到一起,而是建议将它们分组为不同的颜色和样式,然后只显示3-7个不同的集合:

Example

这可以通过自定义数据提示进一步改进,这样当您点击一行时,它会为您提供更多详细信息。

我整理了一些基本代码,以说明如何执行此操作。它有一些缺点。无论如何,在这个例子中,我一次绘制所有内容,然后返回并将颜色组合在一起。然后,我从每个分组中挑选出一条代表性的线,并将其用作图例中的示例。您还可以绘制所有内容,正确地对其进行着色,然后使用值nan在现有轴上绘制一条新线,并在图例中使用THOSE。 (编辑)我还注意到你已经为其中一些颜色分组了颜色,所以这应该从你已经完成的工作中自然流出。如果不出意外,您可以从每个第三个条目中获取句柄,然后在您的图例中只有27个项目...但最好还是可以进一步减少它。

创建上述图像的示例如下:

%% Setup the problem:
nd  = 81;
nx = 256;
data = zeros(nx,nd);
t = linspace(0, 2*pi, nx);

%% We divide the data into 3 groups and set a color for each. This calculation then notes what group each line belongs to:
myCategory = ceil((1:nd)/27);
myColor = myColors(myCategory)';

myColors = ['r', 'b', 'g'];
myNames = {'1 to 27', '28 to 54', '55 to 81'};


%% Make a simple set of data:
randn('seed', 1982);
dt = 0;
for ind = 1:nd
    dt = dt+randn/5;
    data(:, ind) = sin(t+dt) + dt*cos(t);
end


%% Plot all at once: 
figure(33);
clf;
h = plot(data);

%% find the unique entries and choose one representative line for the legend.
%% We then use the handles of these lines to create the legend:
lastColor = -1;
uniqueHandles = [];

for ind = 1:nd
    set(h(ind), 'color', myColor(ind));
    if  lastColor ~= myColor(ind)        
        lastColor = myColor(ind);
        uniqueHandles(end+1) = h(ind);
    end
end

% make the legend:
legend(uniqueHandles, myNames);