【问题标题】:change color legend matlab改变颜色图例matlab
【发布时间】:2014-04-15 13:43:25
【问题描述】:

我要修改一个图,但我不想重新创建它,因为我有 .fig。

我想简单地更改图例的颜色以保持顺序。

例如我有

blue marker -> cluster 1

green marker -> cluster 2

red marker -> cluster 3

light blue marker -> cluster 4

magenta marker -> cluster 3

我想反转绿色和浅蓝色

blue marker -> cluster 1

light blue marker -> cluster 2

red marker -> cluster 3

green marker -> cluster 4

magenta marker -> cluster 5

有什么方法可以在不重新创建图形的情况下做到这一点?

ps 这是散点图

您可以在此处下载该图: https://drive.google.com/file/d/0B3vXKJ_zYaCJMS1feHFSaHp4R28/edit?usp=sharing

【问题讨论】:

  • 你有什么格式的图?
  • 我保存了 fig jpeg 和 png

标签: matlab legend figure


【解决方案1】:

如果您更改绘图的Color 设置,它应该会自动更改图例:

h = get(gca,'Children');
c = get(h,'Color');

c 应该是一个颜色元胞数组。假设句柄与图例的顺序相同,这应该可以工作:

set(h(2),'Color',c{4})
set(h(4),'Color',C{2})

不过,句柄顺序可能会根据您创建图形的方式而改变,因此您可能只想仔细检查您首先交换的是哪两个。


您需要更改的值取决于绘图的确切类型。通常只需要深入研究Children 以便轴找到要更改的正确位。

在你的情况下:

a = get(gca, 'Children');

q = get(a,'CData');
% there are six handles here
% I just looked at the CData and decided which to swap
set(a(3),'CData',q{5})
set(a(5),'CData',q{3})

在这里,第一个句柄说明了哪一点是哪一点,因此您还需要交换这些颜色(感谢 Hoki 指出我的错误)。 ismember 不是最优雅但快速的解决方法:

col = q{1};
col2 = col;
n3 = ismember(col, q{3},'rows');
n5 = ismember(col, q{5},'rows');
col2(find(n3),:)=repmat(q{5},[length(find(n3)) 1]);
col2(find(n5),:)=repmat(q{3},[length(find(n5)) 1]);
set(a(1),'CData',col2);

【讨论】:

  • 谢谢,但我收到此错误“使用 specgraph.scattergroup/get 时出错。名称 'Color' 不是类 'scattergroup' 实例的可访问属性。”
  • 在这种情况下,请执行 get(gca)(您可能需要孩子或只需要轴详细信息)并寻找类似 @​​987654332@ 的内容。
  • 对不起,我做不到……我做了 h = get(gca),找到了 ColorOrder,但后来我不知道该怎么做……跨度>
  • 我没有找到CData,我添加了一个下载图的链接...drive.google.com/file/d/0B3vXKJ_zYaCJMS1feHFSaHp4R28/…
  • 您需要进入Children。我会编辑。
猜你喜欢
  • 2012-01-23
  • 2013-11-24
  • 1970-01-01
  • 2018-11-16
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 2019-01-11
相关资源
最近更新 更多