【问题标题】:Octave: Creating Two Histograms with Color BlendingOctave:使用颜色混合创建两个直方图
【发布时间】:2013-01-25 21:52:25
【问题描述】:

我正在 Octave 中在另一个之上创建一个直方图。

    hold on;
    hist(normalData(:, column), 10, 1, "facecolor", "g");
    hist(anomalousData(:, column), 10, 1, "facecolor", "r");
    hold off;

如您所见,存在重叠,红色数据掩盖了一些绿色数据。有没有解决的办法?也许通过在重叠部分混合颜色?

【问题讨论】:

  • 我能想到的唯一建议是在其上绘制另一个直方图,并对其进行着色,使其看起来像透明。理想情况下,应该设置FaceAlpha,但这还没有实现。顺便说一句,每个数据集的 bin 大小似乎都不同。
  • 您应该考虑 octave 帮助邮件列表。

标签: plot octave histogram


【解决方案1】:

解决您的问题还有很长的路要走。不幸的是,透明度“facealpha”的绘图属性不适用于 hist() 函数。

下面的代码显示了我的工作。 默认的图形工具包可能是fltk,所以改成gnuplot吧。

clear all

graphics_toolkit("gnuplot")

A = randn(1000,1);
B = randn(1000,1)+2;

仍然使用 hist 来计算分布

[y1 x1] = hist(A,10);
[y2 x2] = hist(B,10);

现在我们要将历史数据转换为允许透明的绘图格式。

[ys1 xs1] = stairs(y1, x1);
[ys2 xs2] = stairs(y2, x2);

xs1 = [xs1(1); xs1; xs1(end)];  xs2 = [xs2(1); xs2; xs2(end)];
ys1 = [0; ys1; 0];  ys2 = [0; ys2; 0];

使用填充函数绘制数据

clf
hold on; 
h1=fill(xs1,ys1,"red");
h2=fill(xs2,ys2,"green");

将透明度更改为所需的级别。

set(h1,'facealpha',0.5);
set(h2,'facealpha',0.5);
hold off;

如果我有更多的声誉,我会发布一张图片。

【讨论】:

    【解决方案2】:

    这仍然是搜索透明直方图时的第一个结果,所以我想我会澄清一下。 Osvaldo 的回答是正确的,尽管他没有显示正确的设置 (facealpha)。以前it was necessary to use gnuplot 是为了获得透明度,但我觉得这没有必要(Octave 6.2.0 x86_64-w64-mingw32),事实上我发现 gnuplot 需要很长时间才能加载绘图。

    要更改直方图的透明度,您只需访问补丁对象并将其facealpha 属性设置为 0.5 之类的值。

    % Plot data
    hist(data1,20,'facecolor',[0.9,0.9,0.9]);
    hold on;
    hist(data2,20,'facecolor',[0.9,0.7,0.7]);
    
    % Get patch objects for each histogram
    h = findobj(gca,'Type','patch');
    
    % Set facealpha
    set(h(1),'facealpha',0.5);
    set(h(2),'facealpha',0.5);
    

    【讨论】:

      【解决方案3】:

      我在网上找到了一个非常简单的方法来做到这一点(这不是我的,我真的不知道这是否允许),网页是这样的

      https://chi3x10.wordpress.com/2008/03/10/histograms-of-two-set-of-data-with-different-color-in-matlab/

      代码是这样的

       hist(data1);
       hold on;
       hist(data2);
       hist(data3);
      h = findobj(gca,’Type’,’patch’);
      display(h)
      
      set(h(1),’FaceColor’,’r’,’EdgeColor’,’k’);
      set(h(2),’FaceColor’,’g’,’EdgeColor’,’k’);
      set(h(2),’FaceColor’,’b’,’EdgeColor’,’k’);
      

      【讨论】:

        猜你喜欢
        • 2016-05-30
        • 1970-01-01
        • 1970-01-01
        • 2012-09-23
        • 1970-01-01
        • 2012-10-20
        • 1970-01-01
        • 2017-04-09
        • 1970-01-01
        相关资源
        最近更新 更多