我目前正在做一个项目。对于这个项目,我已经根据轨道上发生的事情对数据进行了分类,现在我想将这些数据很好地呈现在直方图中。然而,对于这些数据,已经呈现了多种环境。我想用自己的颜色对每个环境进行颜色编码。我现在的方式(非常粗略地)是:
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.
我怎样才能给我的各种条上色?
2条答案
按热度按时间qzlgjiam1#
这几乎是这个问题的翻版:
How to draw a colorful 1D histogram in matlab
但是,您需要根据颜色说明字母来指定颜色,这样会使情况略有不同。
总体概念是相同的;对于
hist
(无论如何都不推荐使用)或histogram
,您没有该级别的控制,因此您必须使用histcounts
和bar
分两步绘制它,因为您确实对bar
绘图具有该级别的控制:小贴士:你可以在网上使用任意数量的颜色选择器很容易地找到RGB颜色值,但谷歌“颜色选择器”会在搜索的顶部给你一个,你可以从那里复制RGB值。请注意,MatLab需要0到1之间的值,而不是0到255之间的值。
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,您需要设置然而,正如已经注意到的,in this question、
hist()
以及histogram()
本身并不支持多种颜色的处理。这意味着上面的任何一种技巧都需要在每种颜色的基础上应用。换句话说:首先用histogram( __, 'FaceColor', 'b', 'EdgeColor', 'b')
绘制您想要的所有蓝色,然后对绿色图形进行相同的绘制,依此类推。