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

时间:2011-11-09 15:38:05

标签: 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]

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

启蒙 - 不透明度 - 非常欢迎!

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

5 个答案:

答案 0 :(得分:11)

您必须像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] 发出不透明度指令:

*Plot*

enter image description here

通常,在所有PlotStyle个函数中,您可以根据具体情况使用ColorFunctionGraphics来控制不透明度。如果这只是Graphics[{Opacity[0.5], object}]原语,您可能会执行{{1}}。

之类的操作

答案 1 :(得分:10)

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

enter image description here

答案 2 :(得分:10)

另一种方法是使用ImageReliefImage函数,然后使用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}
 ]

enter image description here

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

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

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

答案 3 :(得分: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]

答案 4 :(得分:6)

Show[a, {Opacity[0.5],#}& /@ b]