【问题标题】:Setting transparancy of surface plot on Octave在 Octave 上设置曲面图的透明度
【发布时间】:2012-08-22 11:47:32
【问题描述】:

我正在运行 Octave 3.4.0 并想创建一个透明的曲面图。但是,在与facealphaedgealphaalphadataalphadatamapping 混在一起时,我无法这样做。

创建不透明表面的示例代码:

p = peaks(40);
f1 = figure(10);clf
s1 = surface(p)
view(3)
xlabel('x');ylabel('y');
hold on;plot3([0 40],[40 0],[-10 10],'k')
set(s1,'edgecolor','none')
set(s1,'facealpha',0.2)

下图中给出的结果。正如你所看到的,在开始时绘制的线隐藏在表面后面,即使表面是半透明的。这是我的 Octave 版本中的错误,还是我遗漏了什么?

【问题讨论】:

    标签: octave


    【解决方案1】:

    这适用于我在 Octave 3.6.2 上使用 gnuplot 作为图形工具包。所以你最好升级你的 Octave 安装。

    有两点需要注意:

    1. 对角线在表面后面的部分没有用打火机绘制,所以看起来仍然很奇怪;
    2. 使用新的实验性 fltk 图形工具包,它根本不起作用。

    【讨论】:

      【解决方案2】:

      我同意 Vidar 的观点:他的代码不适用于最新的 Octave 3.8.1 (Cygwin 1.7.30(0.272/5/3) setup_x86_64.exe:2.850 xterm 305-1 Gnuplot 4.6.3-3)。 facealpha 只是让 surf 的颜色变浅。然而,一种解决方法是,八度音程中的mesh 命令具有丢弃面部的功能:hidden (manual)。

      所以

      p = peaks(40);
      f1 = figure(10);clf
      s1 = mesh(p)
      view(3)
      xlabel('x');ylabel('y');
      hold on;plot3([0 40],[40 0],[-10 10],'k')
      hidden('off')
      

      产生

      【讨论】:

      【解决方案3】:

      这实际上在 Octave 5.1.0 中对我有用,但命令的顺序很重要。您需要在绘制线之前设置 alpha。只尝试自己的表面并使用 alpha - 它有效:

      >> s1 = surface(p)
      s1 = -2.7876
      >> view(3)
      >> set(s1,'facealpha',0.5)
      >> colormap jet
      >> grid on; % so you can see the grid through the transparent surface:
      

      Surf with transparency

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        • 2011-04-07
        • 1970-01-01
        • 2011-05-26
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多