如何叠加两个ReliefPlots或其他图形

cor*_*ion 13 wolfram-mathematica

如果图形是由ReliefPlot或DensityPlot等函数生成的,使用Opacity来控制外观,是否可以在Mathematica中叠加两个或多个图形?

例如:

a = ReliefPlot[
        Table[i + Sin[i^2 + j^2], {i, -4, 4, .03}, {j, -4, 4, .03}], ImageSize -> 100]
b = ReliefPlot[
        Table[i + Sin[i^3 + j^3], {i, -4, 4, .03}, {j, -4, 4, .03}], ImageSize -> 100]
Show[a,b]
Run Code Online (Sandbox Code Playgroud)

结合这两者,但我无法弄清楚如何在这里任何地方插入一个不透明度命令,以便两者都可见.文档说明这些函数接受与Graphics相同的选项("ReliefPlot具有与Graphics相同的选项,具有以下添加和更改:"),但我不明白如何控制图形......(我可能对图形选项和指令之间的区别感到困惑.)

启蒙 - 不那么透明 - 非常欢迎!

编辑:哇,你们比我的Mathematica版本更快 - 谢谢!

abc*_*bcd 11

您必须发出opacity指令,ColorFunction如下所示:

a = ReliefPlot[
  Table[i + Sin[i^2 + j^2], {i, -4, 4, .03}, {j, -4, 4, .03}], 
  ImageSize -> 100]
b = ReliefPlot[
  Table[i + Sin[i^3 + j^3], {i, -4, 4, .03}, {j, -4, 4, .03}], 
  ImageSize -> 100, 
  ColorFunction -> (Directive[Opacity[0.5], 
      ColorData["Rainbow"][#]] &)]
Show[a, b]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

通常,在所有*Plot*函数中,您可以使用PlotStyleColorFunction根据具体情况控制不透明度.如果这只是一个Graphics原始的,你可能会做类似的事情Graphics[{Opacity[0.5], object}].


Bre*_*ion 10

由于ReliefPlot没有PlotStyle选项,您可以使用BaseStyle -> Opacity[0.5]在图形中引入透明度.

在此输入图像描述

  • 等等......如果两个图像都具有相同的"BaseStyle",则此工作_only_. (2认同)
  • @yoda`BaseStyle`是`Graphics`的一个选项,所以你得到了`Show`如何结合来自多个图形的选项的所有常见行为.现在我想了更多,你可以在调用`Show`时应用`BaseStyle`选项,而不是将它添加到各个图中.请注意,`BaseStyle`将应用于整个图形; 不仅仅是来自"a"或"b"的原语. (2认同)

Sza*_*lcs 10

另一种方法是使用Images和ReliefImage函数,然后使用ImageCompose以下方法将结果图像组合在一起:

ImageCompose[
 ReliefImage[Table[i + Sin[i^2 + j^2], {i, -4, 4, .03}, {j, -4, 4, .03}]],
 {ReliefImage[Table[i + Sin[i^3 + j^3], {i, -4, 4, .03}, {j, -4, 4, .03}]], 
  0.5}
 ]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

由于ReliefPlot也基本上以兼容的格式返回像素数据Graphics,因此Images可能更适合您.

默认的颜色功能ReliefImage是不同的:您可以使用ColorFunction -> "LakeColors"切换到ReliefPlot的一个.

最初我在这里有一个从中提取栅格数据的函数ReliefPlot,但是Brett Champion RasterImage在下面的评论中指出了

  • 假设V8,您也可以使用`ReliefImage`而不是`ReliefPlot`,尽管由于坐标系统的不同,您必须反转输入,并且还有不同的默认颜色功能.(对于我的口味,ReliefImage的默认颜色函数有点暗,但`ImageAdd [a,b]`看起来不错.) (3认同)

Arn*_*ing 7

使用透明度的答案将以非常通用的方式工作,但在这个组合两个ReliefPlot []的特定示例中,您可能需要考虑绘制两者的总和:

f[i_] := i + Sin[i^2 + j^2];
g[i_] := i + Sin[i^3 + j^3];
ReliefPlot[Table[f[i] + g[i], {i, -4, 4, .03}, {j, -4, 4, .03}], ImageSize -> 100]
Run Code Online (Sandbox Code Playgroud)


cel*_*chk 6

Show[a, {Opacity[0.5],#}& /@ b]
Run Code Online (Sandbox Code Playgroud)