matlab 为直方图/条形图中的条形图上色

00jrzges  于 2022-11-15  发布在  Matlab
关注(0)|答案(2)|浏览(374)

我目前正在做一个项目。对于这个项目,我已经根据轨道上发生的事情对数据进行了分类,现在我想将这些数据很好地呈现在直方图中。然而,对于这些数据,已经呈现了多种环境。我想用自己的颜色对每个环境进行颜色编码。我现在的方式(非常粗略地)是:

x = 0:1:10;
y = bins;
color = ['b', 'g', 'g', 'g', 'y', 'y', 'g', 'g', 'g', 'b'];
b = hist(x, y, 'facecolor', 'flat');
b.CData = color

在此数据中,bins包含冻结发生的所有垃圾箱(1-10)。这些数字不是按时间顺序排列的,也不是所有的数字都存在。但是,当我使用代码时,我得到以下错误:

Unable to perform assignment because dot indexing is not supported for variables of this type.

我怎样才能给我的各种条上色?

qzlgjiam

qzlgjiam1#

这几乎是这个问题的翻版:
How to draw a colorful 1D histogram in matlab
但是,您需要根据颜色说明字母来指定颜色,这样会使情况略有不同。
总体概念是相同的;对于hist(无论如何都不推荐使用)或histogram,您没有该级别的控制,因此您必须使用histcountsbar分两步绘制它,因为您确实对bar绘图具有该级别的控制:

x = randn(100,1)*10; % random example data

% Specify the colours as RGB triplets 
b = [0, 141, 201]/255;
g = [0, 179, 9]/255;
y = [247, 227, 40]/255;
% Build the numeric colours array
color = [b; g; g; g; y; y; g; g; g; b];

% Plot using histcounts and bar
[h,edges] = histcounts(x,10); % calculate the histogram data. 10 = size(color,1)
b = bar( (edges(1:end-1)+edges(2:end))/2, h ); % plot the bar chart
b.BarWidth = 1; % make the bars full width to look the same as 'histogram'
b.CData = color; % color is a 10x3 array (columns are RGB, one row per bar)
b.FaceColor = 'flat';   % Make 'bar' use the CData colours

小贴士:你可以在网上使用任意数量的颜色选择器很容易地找到RGB颜色值,但谷歌“颜色选择器”会在搜索的顶部给你一个,你可以从那里复制RGB值。请注意,MatLab需要0到1之间的值,而不是0到255之间的值。

px9o7tmv

px9o7tmv2#

在R2007b中,b = hist()实际上输出一个1x11双数组,即每个bin中的计数。这意味着您不能使用常规语法以这种方式输出地物句柄。引用文档:
n = hist(Y)将向量Y中的元素放入10个等间距的容器中,并将每个容器中的元素数作为行向量返回。(.)

方案一:

调用hist(__); b = get(gcf);,即强制图形句柄。在CData等价属性的位置上检查其属性。(在R2007b上,您需要先做b = get(gcf);,然后做set(b, 'Color', color))

方案二:

使用目前推荐的histogram()。您可以查看其property list,您需要设置

b.FaceColor = color;
b.EdgeColor = color;

然而,正如已经注意到的,in this questionhist()以及histogram()本身并不支持多种颜色的处理。这意味着上面的任何一种技巧都需要在每种颜色的基础上应用。换句话说:首先用histogram( __, 'FaceColor', 'b', 'EdgeColor', 'b')绘制您想要的所有蓝色,然后对绿色图形进行相同的绘制,依此类推。

相关问题