我的图像如下。
在这个图像中你可以看到3行,这些实际上是6行,一行是隐形的,只是用于显示标记而另一行是原始数据点的平滑版本。现在的问题是如何在图例中获取标记。在这种情况下,您可以看到图形图例仅包含线条,而不是标记。我的代码如下。
clc; clear all ;
colour_green = [12 195 82] ./ 255;
colour_lightgreen = [94 250 81] ./ 255;
colour_lightblue = [8 180 238] ./ 255;
colour_darkblue = [1 17 181] ./ 255;
colour_peach = [251 111 66] ./ 255;
figure('DefaultAxesFontSize',30);
set(0,'DefaultAxesFontName',' Times ');
hold on
time_window = xlsread('pattern_data.xlsx', 'effect_of_count', 'A2:A12');
count1plus = xlsread('pattern_data.xlsx', 'effect_of_count', 'B2:B12');
count10plus = xlsread('pattern_data.xlsx', 'effect_of_count', 'C2:C12');
count1to5 = xlsread('pattern_data.xlsx', 'effect_of_count', 'D2:D12');
x1 = 50:1:99;
% x1 = .01:.01:.5;
x2 = interp1(time_window,count1plus,x1, 'pchip') ;
x3 = interp1(time_window,count10plus,x1, 'pchip') ;
x4 = interp1(time_window,count1to5,x1, 'pchip') ;
% count 1+
plot(x1,x2,'b--','DisplayName', 'Count_{A} = 1: and Count_{B} = 1:','LineWidth',3)
plot(time_window,count1plus,'bs', 'HandleVisibility','off','LineWidth',5)
% count 1:5
plot(x1,x4,'-','DisplayName', 'Count_{A} = 1: and Count_{B} = 5:','LineWidth',3 , 'Color', colour_green)
plot(time_window,count1to5,'^', 'HandleVisibility','off','LineWidth',5 , 'Color', colour_green)
% count 10+
plot(x1,x3,'r--','DisplayName', 'Count_{A} = 1: and Count_{B} = 10:','LineWidth',3)
plot(time_window,count10plus,'ro', 'HandleVisibility','off','LineWidth',5)
hold off
xlabel('Th_{B} ')
ylabel('L (milliseconds)')
legend('Location','north')
legend show
set(gcf, 'PaperUnits', 'normalized');
set(gcf, 'PaperPosition', [0 0 1 1]);
set(gcf,'PaperOrientation','l');
print -dpng graphs/p1_effect_of_count_and_selB;
请帮忙。我想要的是在相应的图例中有一个标记(圆形,方形等)。
提供的解决方案here没有解决我的问题,因为它没有说明如何添加标记。动画显示了如何自定义标记的位置,但在这里我想添加一个新标记,而不是重新定位原始标记。
答案 0 :(得分:2)
如this answer to a very similar question中所述,自R2014b开始,图例对象变得不透明,无法轻易更改。但是,该答案还表明the legend
function有一个带有四个输出参数的语法,它以不同的方式创建图例,以便可以修改它。答案还说明了如何修改图例。我们将跟随他们的领导。
文档说明了这种语法:
不建议使用此语法。它会创建一个不支持某些功能的图例,例如添加图例标题。此外,当您从轴添加或删除数据系列时,图例不会自动更新。
但在这种情况下,这些问题不会给我们带来麻烦,所以我们会继续这样做。
如果是问题中的图表,我们将替换
legend('Location','north')
与
[lgd,icons,plots,txt] = legend('Location','north');
现在,icons
包含构成图例的对象的句柄:
>> icons
icons =
9×1 graphics array:
Text (Count_{A} = 1: and Count_{B} = 1:)
Text (Count_{A} = 1: and Count_{B} = 5:)
Text (Count_{A} = 1: and Count_{B} = 10:)
Line (Count_{A} = 1: and Count_{B} = 1:)
Line (Count_{A} = 1: and Count_{B} = 1:)
Line (Count_{A} = 1: and Count_{B} = 5:)
Line (Count_{A} = 1: and Count_{B} = 5:)
Line (Count_{A} = 1: and Count_{B} = 10:)
Line (Count_{A} = 1: and Count_{B} = 10:)
显示甚至可以帮助显示哪些元素属于哪个项目。前三个是文本对象,后六个是行对象。这些行对象是我们需要修改的。
为什么图例中显示的每个项目都有两个线对象?那是因为有一个线对象(第一个)是渲染线(它有两个数据点):
>> icons(4)
ans =
Line (Count_{A} = 1: and Count_{B} = 1:) with properties:
Color: [0 0 1]
LineStyle: '--'
LineWidth: 3
Marker: 'none'
MarkerSize: 6
MarkerFaceColor: 'none'
XData: [0.0108 0.0919]
YData: [0.8246 0.8246]
ZData: [1×0 double]
和另一个是标记(当前不可见,它有一个数据点):
>> icons(5)
ans =
Line (Count_{A} = 1: and Count_{B} = 1:) with properties:
Color: [0 0 1]
LineStyle: 'none'
LineWidth: 3
Marker: 'o'
MarkerSize: 6
MarkerFaceColor: 'none'
XData: 0.0514
YData: 0.8246
ZData: [1×0 double]
所以,我们需要做的是设置这些标记对象:
icons(5).Marker = 's';
icons(7).Marker = '^';
icons(9).Marker = 'o';
现在情节看起来像你想要的。
我希望上面的描述足够清晰,您现在也可以通过其他方式更改图例。