gpt4 book ai didi

matlab - 如何为图形的图例添加额外信息?

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:33 25 4
gpt4 key购买 nike

我想在 MATLAB 中向图形添加额外信息,如下所示:

enter image description here

这可能吗? (我当然希望它更漂亮)

最佳答案

我整理了一些合理通用的东西,见下文。

我将对此进行更多概括并将其发布到文件交换,我认为这是一个相当不错的工具:)

我打算

  • 自动调整表格大小以适应其内容
  • 使其适合任意图例放置
  • 在用鼠标移动时将表格和图例耦合在一起
  • 使标题可选
  • 支持多种类型的输入

但现在:

% Example input

plot(1,1,'r.', 1.1,1.1', 'b.', 1.2,1.2, 'k.');
legendHandle = legend('plot 1', 'plot 2 with longer title', 'plot 3');

tableHead = {'\theta_0' '\phi' 'df/dx'};
tableContent = rand(3);




% Extract information
legendPosition = get(legendHandle, 'position');
children = get(legendHandle, 'children');
labels = children(strcmp(get(children, 'type'), 'text'));


% Basic error traps
if size(tableContent,1) ~= numel(labels)
error('LegendTable:dimension_mismatch',...
'Each legend entry must have a corresponding row in the table.')
end

if size(tableHead,2) ~= size(tableContent,2)
error('LegendTable:dimension_mismatch',...
'Table header dimensions are inconsistent with table data.');
end

% Convert header & content to cell-array when necessary
if isnumeric(tableContent)
tableContent = cellfun(@num2str, ...
num2cell(tableContent), 'UniformOutput', false);
end
if isnumeric(tableHead)
tableHead = cellfun(@num2str, ...
num2cell(tableHead), 'UniformOutput', false);
end

% Proper tick locations for the table
xticks = linspace(0, 1, numel(tableHead)+1);
yticks = linspace(0, 1, numel(labels)+2);

% Text positions are in the centers of the table cells
txt_xPositions = xticks(1:end-1) + (xticks(2)-xticks(1))/2;
txt_yPositions = fliplr(yticks(1:end-1) + (yticks(2)-yticks(1))/2);

% Derive correct table position
headerHeight = legendPosition(4)/numel(labels);
tablePosition = legendPosition + [0 -headerHeight 0 headerHeight];

% Shift position of original legend
set(legendHandle, 'position', legendPosition + [-tablePosition(3) -headerHeight 0 0])

% Create table
table = axes(...
'position', tablePosition,...
'xtick', xticks,...
'ytick', yticks,...
'xticklabel', [],...
'yticklabel', [],...
'gridlinestyle', '-',...
'box', 'on',...
'tag', 'LegendTable');
grid on


% Print table header & table entries
kk = 1;
tableTexts = zeros(numel(tableHead)+numel(tableContent),1);
for ii = 1:numel(txt_xPositions)

% Column header
tableTexts(kk) = text(txt_xPositions(ii), txt_yPositions(1), tableHead{ii},...
'parent', table,...
'HorizontalAlignment', 'center');
kk = kk + 1;

% Column content
for jj = 1:numel(txt_yPositions)-1
tableTexts(kk) = text(...
txt_xPositions(ii), txt_yPositions(jj+1), tableContent{jj,ii},...
'parent', table,...
'HorizontalAlignment', 'center');
kk = kk + 1;
end
end

结果:

enter image description here

关于matlab - 如何为图形的图例添加额外信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18716633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com