Matlab绘图:自定义颜色

7

有没有人知道如何使用不同于预设颜色的自定义颜色进行绘图的命令或方法,比如我想使用自己定义的颜色而不是b、g、r、c、m、y、k?

谢谢。

3个回答

15

使用带有 ColorSpec 三元组的 Color 属性:

plot(x, y, 'Color', [0.5, 1.0, 0.0], 'LineStyle', '--')

这里的向量包含介于0.01.0之间的RGB值。有关此内容的更多信息,请参阅LineseriesColorSpec文档条目。


1
谢谢!我在哪里可以找到颜色映射,以决定在代码中输入0到1之间的数字?我已经搜索了Lineseries、ColorSpec和Colormap,但没有找到我想要的。通常从像素图中选择的方式是多于1个的形式。 - kit
@kit:如果你有一个颜色映射(例如“hot”),我记得你应该使用cmap = colormap('hot'); cmap(k,:)从颜色映射中获取颜色k。如果你的颜色值范围是0到255,只需除以255即可获得正确的范围。 - You

0

从Matlab文档中:

ColorOrder: m-by-3 RGB值矩阵

用于多线图的颜色。定义了plot和plot3函数用于给每条线着色的颜色。如果您没有指定线条颜色,这些函数将通过ColorOrder属性循环获取每条线的颜色。要获取当前的ColorOrder属性值(可能在启动时设置),请使用以下命令:

get(gca,'ColorOrder') 请注意,如果轴的NextPlot属性为replace(默认值),则高级函数如plot会在确定要使用的颜色之前重置ColorOrder属性。如果您想让MATLAB使用与默认值不同的ColorOrder,请将NextPlot设置为replacechildren。您还可以指定自己的默认ColorOrder。

综上所述,这意味着您需要执行以下命令:

figure();
axis();
set(gca, 'colororder', <color matrix>, 'nextplot', 'replacechildren');
plot(x,y);

我明白你在设置颜色顺序方面的意思。我已经尝试了以下命令。 figure set(gca,'colororder',[1,0.5,0.753],'nextplot','replacechildren'); plot(x,y) figure plot(x,z) 我不知道为什么在第二个图中我又得到了默认颜色,似乎我没有正确使用 nextplot 和 replacechildren 的方法。 - kit
在调用 set 之前,您是否使用 axis() 创建了一个轴对象? - Isaac
是的,我现在正在添加,但是第二个图仍然显示默认颜色。这是我的代码:figure(); axis(); set(gca, 'colororder', [1, 0.5, 0.753], 'nextplot', 'replacechildren'); plot(x, y) figure plot(x, z)axis()函数是用来设置坐标轴的。为什么需要使用括号呢?因为在调用函数时,括号是必需的。顺便说一下,在这里粘贴Matlab代码时我也曾经搞砸过。你想知道如何在粘贴代码之前添加命令并使其适应像我这样的灰色框吗?作为一个新用户,你可以在代码周围添加三个反引号(```)来实现这一效果。谢谢! - kit
你需要使用 axis 呼叫来创建一个轴对象,以便你可以调用 set。在 Matlab 中,你不需要使用 '()'。如果要让它适用于你的第二个图形,你需要再次调用 axisset。如果想将代码格式化为代码,请使用反引号(`)括起来。 - Isaac
1
似乎使用set(0,'DefaultAxesColorOrder',[1, 0.5, 0.753;0.5, 0.5, 1;1, 1, 0.753])可以在下面的绘图中永久地设置颜色,而不需要每次在绘图之前使用set命令。 - kit
显示剩余2条评论

0

我曾经遇到过与MATLAB提供的有限预设颜色集相同的问题。因此,我在我的网站上创建了这个页面,您可以从大量非标准颜色调色板中进行选择,并将颜色代码直接粘贴到剪贴板中:

http://www.shirt-ediss.me/matlab-octave-more-colours/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接