我试图根据reverse ordering of legend colors in matlab bar plot反转图例条目的顺序,但在我的情况下似乎不起作用。
基本上我有一个指南图,它画了很多图,并能够保存到.png文件。效果如下所示:
我已经通过上下翻转图例成功更改了文本顺序,但无法更改图例颜色顺序。这是我得到的
[a b] = legend(legenda);
map = colormap; % current colormap
n = size(b,1);
z = linspace(size(map,1),1,n/3); % there is 1 text and 2 line elements for every data series, so I divide by 3
z = round(z); %otherwise matlab gets angry that indices must be real integers or logicals
MAP = map(z(:),:); % gets elements specified by linspace from colormap
到目前为止一切正常。
两个序列的B向量看起来像这样(从2.0开始,因为它是反向的):
Text (P+C 200 2.0.dpt)
Text (P+C 200 1.0.dpt)
Line (P+C 200 2.0.dpt)
Line (P+C 200 2.0.dpt)
Line (P+C 200 1.0.dpt)
Line (P+C 200 1.0.dpt)
所以我想出来了(基于链接的代码),我必须为每一行条目更改颜色变量。
for k = (n/3 + 1):n
a1 = get(b(k),'Children');
set(a1,'FaceColor',MAP(ceil((k - n/3)/2), :));
end
单元格和除以2得到相同的索引两次。
然而,这段代码什么也不做。
我已经检查了翻转图例向量是否可能是问题的根源,但颜色顺序保持不变。我也试过Map矢量-没有运气。
当我在a1 =..在for循环中,我得到:
a1 =
0x0 empty GraphicsPlaceholder array.
我怎么才能让它工作?
还有,有没有什么好的方法可以让图例在保存后不覆盖图(见上面链接的图片)?
我保存它的方法是通过创建一个临时的数字与'可见' '关闭'和做一个copyobj的轴和图例,然后保存。否则,它会保存整个图形。
2条答案
按热度按时间qgzx9mmu1#
在reverse ordering of legend colors in matlab bar plot的答案中提供的代码在您的情况下不起作用的原因是因为在这种情况下(
bar
图表的图)图例中的对象是patches
,而在您的图中它们是lines
。FaceColor
仅适用于修补程序,而不适用于lines
。解决问题的最简单方法应该是颠倒“从一开始”绘制线条的顺序,这样做,直接使用从
colormap
中提取的颜色集。然而,如果你想在绘制图形后使用
legend
,除了修改legend
中的项目外,如果你想使用从colormap
中提取的颜色集,你还必须改变图中线条的颜色(目前在你的图片中,有些线条共享相同的颜色)。可以通过两个步骤来解决这个问题:
这两个步骤是必需的,因为当您更改图中线条的颜色时,图例中的项目将自动更新。
关于你发布的代码:你可以通过数组
b
访问图例的字符串和线条的颜色。您可以访问绘制的线的句柄,如下所示:
由于您已经绘制了10条线,因此数组
b
构建如下:string
的句柄lines
的句柄markers
的句柄要更改图例位置,可以设置其
location
属性:要将其放在axes
之外,您可以将其设置为:在下面的代码中,您可以找到实现上述建议的代码。
原创剧情
更新的图
希望这对你有帮助。
gxwragnw2#
从R2023b开始,图例有一个“方向”属性,允许您反转图例的条目。还有一个额外的功能,默认情况下将反转某些图表的图例,如面积图和堆叠条形图: