如何合并两个传说吗?

176(30天)
乔Hajisharifi
乔Hajisharifi 2020年3月7日
评论道: 内森•米勒 2023年5月15日在42
你好每一个人,
我有三个情节,我想只有一个传说的情节p1和p2,例如下面的代码:
x = 0:0.25:2 *π;
y = sin (x);
p1 =情节(x, y);
持有
p2 =情节(x, y,“o”,“MarkerSize”12“MarkerFaceColor”,“b”,“MarkerEdgeColor”,“b”);
p3 =情节(0.02 x + y + 0.02,“o”,“MarkerSize”4“MarkerFaceColor”,' w ',“MarkerEdgeColor”,' w ');
如你所见我有合并两个标记(一个蓝色的圆和一个白色的小圆),我想要两个显示这两个圈在一起一样的传奇人物。有什么方法吗?
3评论
dpb
dpb 2020年3月8日
我试着
霍奇金淋巴瘤(2)=情节(x + dxy y + dxy,”或“,“MarkerSize”4);
也觉得有点可爱……

登录置评。

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2020年3月7日
是的,有 一个方法。
[h,图标]=传奇((p2、p3) {不管这个传说应该说的,“未使用”});
% p2_text =图标(1);
p3_text =图标(2);
p2_line =图标(3);
% p2_marker =图标(4);
p3_line =图标(5);
p3_marker =图标(6);
p2_line。颜色= p1.Color;
p2_line。线型= p1.LineStyle;%是失踪的p1的实线
p3_text。可见=“关闭”;%关掉你不需要什么
p3_line。可见=“关闭”;
p3_marker。XData = p2_marker。XData + 0.02;%将白色的小圆
p3_marker。YData = p2_marker。YData + 0.02;
这是有点笨重。
你必须使用一个向后兼容性的传说()可能会消失,可能不会为uifigures工作。你 必须 有两个或两个以上的传说()调用输出:触发的向后兼容性。如果你只有一个输出的传奇,那么它就是 创建您需要创建的对象。
你不能将一个图形对象作为第一个参数传递给传奇和附加额外的图形在传说,当你不允许添加额外的图形对象在一个传奇。相反,你必须创建尽可能多的图形对象需要开始,然后关掉传说他们,你不需要的部分。但是你可以移动的对象已经在传奇。
2的评论
乔Hajisharifi
乔Hajisharifi 2020年3月8日
由于@Walter罗伯森
这个办法非常好。谢谢你的解决方案。

登录置评。

更多的答案(2)

内森•米勒
内森•米勒 2021年10月19日
编辑:沃尔特·罗伯森 2023年5月13日
如果你在足够深挖你绝对可以定制传奇图标语法上任何你想要的,但它是相当混乱,“无证”。
我想出了解决方案在透过Yair以下 https://undocumentedmatlab.com/blog_old/plot-legend-customization 和思考与同事有点外框。关键在做 复制 节点的对象来创建一个新的标记原始然后更新 属性加载到传奇处理。
%的阴谋OP的代码
图;持有所有;%新的图,使持有/添加
x = 0:0.25:2 *π;
y = sin (x);
霍奇金淋巴瘤(1)=情节(x, y,“啊——”,“MarkerSize”12“MarkerFaceColor”,“b”,“MarkerEdgeColor”,“b”);
霍奇金淋巴瘤(2)=情节(0.02 x + y + 0.02,“o”,“MarkerSize”4“MarkerFaceColor”,' w ',“MarkerEdgeColor”,' w ');
%添加传奇第一/主要情节处理
hLegend =传奇(霍奇金淋巴瘤(1),“位置”,“最佳”);
drawnow ();%之前呈现的内部节点访问它们
%提取传奇节点/原语
hLegendEntry = hLegend.EntryContainer.NodeChildren (1);%第一/底行神迹
iconSet = hLegendEntry.Icon.Transform.Children.Children;%第一/底行数组的图标(标记+线)
%创建一个新的图标标记添加到图标集
newLegendIcon =复制(iconSet (1));%复制对象(或调查做出matlab.graphics.primitive.world.Marker)
newLegendIcon.get%所有属性列表
newLegendIcon。父= iconSet(1).Parent;%设置父,增加了传奇的图标画
%惹新图标的属性来显示你想要的
newLegendIcon。FaceColorData = uint8 ((255; 255; 255; 255));% rgba uint8
newLegendIcon.VertexData (1) = 0.53;%(0 - 1)在图标的边界(不是+ 0.02)
newLegendIcon.VertexData (2) = 0.65;%(0 - 1)在图标的边界(不是+ 0.02)
newLegendIcon。大小= 4;%从MarkerSize似乎有点不同
输出图像的自动运行从上面的代码不正确生成图:
额外奖金,图/示例显示如何独立的图标标记来显示多个他们在同一行:
2的评论
内森•米勒
内森•米勒 2023年5月15日在42
在这里,这种效应:
%的阴谋OP的代码
图;持有所有;%新的图,使持有/添加
x = 1:5;
y = x;
霍奇金淋巴瘤(1)=情节(x, y,“ob”);
霍奇金淋巴瘤(2)=情节(x, y + 1,“r”);
%添加传奇第一/主要情节处理
hLegend =传奇(霍奇金淋巴瘤,“位置”,“最佳”);
drawnow ();%之前呈现的内部节点访问它们
% % %更新上面一行legened(蓝圈)
%提取传奇节点/原语
hLegendEntryTop = hLegend.EntryContainer.NodeChildren(结束);%上面一行的传奇
iconSet = hLegendEntryTop.Icon.Transform.Children.Children;%第一/底行数组的图标(标记+线)
%主要标记移动到边缘
iconSet (1) .VertexData (1) = 0.90;
%创建一个新的图标标记添加到图标集
newLegendIcon1 =复制(iconSet (1));%复制对象(或调查做出matlab.graphics.primitive.world.Marker)
newLegendIcon1。父= iconSet(1).Parent;%设置父,增加了传奇的图标画
newLegendIcon1。风格=“+”;
newLegendIcon1.VertexData (1) = 0.10;
%创建一个新的图标标记添加到图标集
newLegendIcon2 =复制(iconSet (1));%复制对象(或调查做出matlab.graphics.primitive.world.Marker)
newLegendIcon2。父= iconSet(1).Parent;%设置父,增加了传奇的图标画
newLegendIcon2。风格=“星号”;
newLegendIcon2.VertexData (1) = 0.50;
% % %更新底下一行传说(红场+线)
%提取传奇节点/原语
hLegendEntryBtm = hLegend.EntryContainer.NodeChildren (1);%底下一行的传奇
iconSet = hLegendEntryBtm.Icon.Transform.Children.Children;%第一/底行数组的图标(标记+线)
%移动的主要标志
iconSet (1) .VertexData (1) = 0.25;
%创建一个新的图标标记添加到图标集
newLegendIcon =复制(iconSet (1));%复制对象(或调查做出matlab.graphics.primitive.world.Marker)
newLegendIcon。父= iconSet(1).Parent;%设置父,增加了传奇的图标画
newLegendIcon。风格=五角星形的;
newLegendIcon.VertexData (1) = 0.75;
newLegendIcon。大小= 8;

登录置评。


哈坎Caldag
哈坎Caldag 2023年3月28日
对于那些乐于保持轴外的传说在某个地方,我最终与另一个解决方案,对我看起来更简单:轴对象复制到一个新的正确的基础上,为每个和设置顶部有两个传说传奇颜色'没有'所以变得透明和两个图标变得可见:
x = 0:0.25:2 *π;
y = sin (x);
次要情节(121);
p1 =情节(x, y);
持有
p2 =情节(x, y,“o”,“MarkerSize”12“MarkerFaceColor”,“b”,“MarkerEdgeColor”,“b”);
p3 =情节(0.02 x + y + 0.02,“o”,“MarkerSize”4“MarkerFaceColor”,' w ',“MarkerEdgeColor”,' w ');
传奇(,“任何东西”,“位置”(0.6 - 0.6 0.1 - 0.1))
甘氨胆酸axhand =;%轴处理
duplicateplot = copyobj (axhand, 1);%的复制
轴(duplicateplot);
%去除额外的标签/蜱虫的第二轴对象
xticks ([]); yticks([]);包含();ylabel ();
传奇(,,' ',“位置”(0.52 - 0.6036 0.135 - 0.1),“颜色”,“没有”,“EdgeColor”,“没有”)
%设置颜色没有的图标重叠
%调整位置任何方式你会喜欢在这里,我试图匹配
%形状的阴谋。
%注意情节的“标签设置对象与白色的图标

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!