我尝试了以下代码:
x = [1 2];
y = [32 38];
x1 = [1 2];
y1 = [23 27];
x2 = [1 2];
y2 = [30 36];
x3 = [1 2];
y3 = [25 29];
p1=plot(x,y,'-rd','LineWidth',2,'MarkerEdgeColor','k',...
'MarkerFaceColor','r','MarkerSize',10);
hold all
p2=plot(x1,y1,'-gp','LineWidth',2,'MarkerEdgeColor','k',...
'MarkerFaceColor','g','MarkerSize',10);
p3=plot(x2,y2,'-cs','LineWidth',2,'MarkerEdgeColor','k',...
'MarkerFaceColor','c','MarkerSize',10);
p4=plot(x3,y3,'-m^','LineWidth',2,'MarkerEdgeColor','k',...
'MarkerFaceColor','m','MarkerSize',10);
xlim([0 3]);
ylim([0 40]);
ax = gca;
c = ax.Color;
ax.YGrid = 'on';
set(gca,'XTick',[0 1 2]);
hYLabel=ylabel('US$');
hXLabel = xlabel('Test');
hTitle=title('Test');
h = get(gca,'Children');
M = {'L1', 'L1 a1 a2', 'L1 b1 b2', 'L1 c1 c2', 'L1 d1 d2'};
hLegend=legend(h,M(2:5),'Location','NorthEast');
set([gca,hTitle,hXLabel,hYLabel,hLegend], 'FontName', 'Helvetica','FontSize', 8);
set(hTitle,'FontSize', 11);
但它并没有给我我想要的结果。这就是我要做的事情:
修改
根据您的建议,我编辑了以上代码:
clear all;clf;
x = [1 2];
y = [32 38];
x1 = [1 2];
y1 = [23 27];
x2 = [1 2];
y2 = [30 36];
x3 = [1 2];
y3 = [25 29];
plot(x,y,'-r','LineWidth',2);
p1=plot(x,y,'-rd','LineWidth',1,'MarkerEdgeColor','k',...
'MarkerFaceColor','r','MarkerSize',10);
hold all
plot(x1,y1,'-gp','LineWidth',2);
p2=plot(x1,y1,'-gp','LineWidth',1,'MarkerEdgeColor','k',...
'MarkerFaceColor','g','MarkerSize',10);
plot(x2,y2,'-cs','LineWidth',2);
p3=plot(x2,y2,'-cs','LineWidth',1,'MarkerEdgeColor','k',...
'MarkerFaceColor','c','MarkerSize',10);
plot(x3,y3,'-m^','LineWidth',2);
p4=plot(x3,y3,'-m^','LineWidth',1,'MarkerEdgeColor','k',...
'MarkerFaceColor','m','MarkerSize',10);
xlim([0 3]);
ylim([0 40]);
ax = gca;
c = ax.Color;
ax.YGrid = 'on';
set(gca,'XTick',[0 1 2]);
hYLabel=ylabel('US$');
hXLabel = xlabel('Test');
hTitle=title('Test');
h = get(gca,'Children');
M = {'L1','L1 a1 a2', 'L1 b1 b2', 'L1 c1 c2', 'L1 d1 d2'};
[hLegend, hObjects] = legend(h, M(2:5), 'Location', 'NorthEast');
pos = get(hLegend, 'Position');
set(hLegend, 'Position', pos+[-0.02 -0.1 0.02 0.1]);
set(hObjects(6:2:12), 'LineWidth', 1);
set(hObjects(1:4), {'Color'}, {'m'; 'c'; 'g'; 'r'});
set([gca,hTitle,hXLabel,hYLabel,hLegend], 'FontName', 'Helvetica','FontSize', 8);
set(hTitle,'FontSize', 11);
但传说搞砸了。代码有什么问题?我绘制了两次,并将第一行的线宽更改为第二行的宽度,将第二行的线宽更改为标记边缘。
答案 0 :(得分:2)
首先,如果要更改绘图中标记边缘的宽度,则必须调整'LineWidth'
property。这会影响标记边缘的厚度以及绘制线条的粗细。如果您希望将这些设置为不同的厚度,则必须将每一行绘制两次:一次没有标记('Marker'
property设置为'none'
,默认值),一次仅使用标记({ {3}}设置为'none'
)。如果您只想更改图例的线宽,但不图,请参见下文。
您可以通过捕获图例中从'LineStyle'
property函数返回的对象的句柄,轻松更改图例的各个方面。您可以将上面创建图例的代码中的行更改为:
[hLegend, hObjects] = legend([p1 p2 p3 p4], M(2:5), 'Location', 'NorthEast');
请注意,我没有传递axis子句柄的向量,而是显式传递了从'plot'
命令返回的句柄的向量。如果图例中还有其他您不想要的绘图对象,并且可以更好地控制图例中对象的顺序,则必须这样做。
现在您拥有图例对象的句柄,您可以更改图例的各个方面。例如,这会使图例变大并更改文本颜色(请注意颜色顺序与传递给legend
的行句柄向量的顺序相匹配):
pos = get(hLegend, 'Position');
set(hLegend, 'Position', pos+[-0.02 -0.1 0.02 0.1]);
set(hObjects(1:4), {'Color'}, {'r'; 'g'; 'c'; 'm'});
此外,如果要更改图例标记的边缘厚度,而不是图形标记,则可以执行以下操作:
set(hObjects(6:2:12), 'LineWidth', 1);
这是您从上面得到的样本图像(分别绘制线条和标记以相应地调整线宽):