Wolfram mathematica 如何覆盖两个浮雕图或其他图形

Wolfram mathematica 如何覆盖两个浮雕图或其他图形,wolfram-mathematica,Wolfram Mathematica,在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}]

在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]

将两者结合起来,但我无法确定如何在此处的任何位置插入不透明命令,以使两者都可见。文档说明这些函数接受与图形相同的选项(“ReliefPlot具有与图形相同的选项,但有以下添加和更改:”),但我不明白如何控制图形。。。(我可能对图形选项和指令之间的区别感到困惑。)

开悟-减少不透明-非常欢迎


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

您必须向
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*
函数中,可以根据具体情况使用
PlotStyle
ColorFunction
控制不透明度。如果这只是一个
Graphics
原语,您可能会执行类似
Graphics[{Opacity[0.5],object}]

的操作,因为
ReliefPlot
没有
PlotStyle
选项,所以可以使用
BaseStyle->Opacity[0.5]
将透明度引入图形


另一种方法是使用
图像和函数,然后使用
图像合成
将生成的图像合成在一起:

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}
 ]


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

ReliefImage
的默认颜色功能不同:您可以使用
ColorFunction->“LakeColors”
切换到
reliefiplot
的颜色功能


最初我在这里有一个函数,可以从
浮雕图
中提取光栅数据,但后来Brett Champion在下面的评论中指出
光栅图像
,使用透明度的答案将以非常一般的方式工作,但在这个结合两个浮雕图的特定示例中,你可能想考虑绘制这两个的总和:

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]

假设使用V8,您也可以使用
ReliefImage
而不是
reliefiplot
,尽管由于坐标系的不同,您必须反转输入,并且还有一个不同的默认颜色函数。(ReliefImage的默认颜色函数对我来说有点暗,但是
ImageAdd[a,b]
看起来不错。)@Brett我一直在找,但没找到!!(有些Linux界面非常笨拙和令人沮丧…)将更正答案。有时很难选择…:)我认为尤达的更通用,可以更好地控制风格。我想风格只需要指定一次。等等。。。这仅在两个图像具有相同的
BaseStyle
时有效@yoda
BaseStyle
Graphics
的一个选项,因此您可以获得
Show
如何组合多个图形选项的所有常规行为。现在我想了一会儿,您可以在调用
Show
中应用
BaseStyle
选项,而不是将其添加到各个绘图中。请注意,
BaseStyle
将应用于整个图形;不仅仅是
a
b
中的原语。是的,这就是我要指出的。如果你想在第一个图上覆盖0.5不透明度的第二个图,就像我的答案一样,你不能使用
BaseStyle
…谢谢-从某些方面来说,这是一个更好的解决方案!Mathematica的优点之一是它能让你从不同的角度来解决问题。或者,也可以使用
Show[a,{Opacity[0.5],#}&@@@b]
来达到同样的效果。@jibe您使用哪种Mathematica版本?我刚刚检查了Win7 x64上版本为10.2的两个解决方案,结果在视觉上是相同的。请从问题中的代码开始再次检查。@AlexeyPopkov你完全正确。在Mac OS 10.8.5和MMA 10.2上,带有ReliefPlot的OP示例确实有效。但是,我做的测试是用我自己的(等高线)图,它不起作用。你能试着运行这个(没有
,但我无法在注释中缩进…)吗<代码>a=等高线图[Sin[x+y],{x,0,1},{y,0,1}];b=等高线图[Cos[x-y],{x,0,1},{y,0,1}];显示[a,{Opacity[0.5],#}&/@b];显示[a,{不透明度[0.5],#}&@@@b]
@jibe
轮廓图
生成的
图形
表达式的结构与
浮雕图
完全不同。您可以通过应用
InputForm
或使用我特别设计的。我评论中的代码仅用于
ReliefPlot
,并基于
ReliefPlot
当前实现的未记录细节(可在未来版本的Mathematica中更改)。@jibe对于
ContourPlot
s,类似的解决方案是
Show[a,b]/。RGBColor[r\u,g\u,b\u]:>RGBColor[r,g,b,.5]
,但这是一种不涵盖所有情况的技巧,因此简单的解决方案是通过
轮廓着色
颜色函数
选项添加
不透明度
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]