Wolfram mathematica 如何覆盖两个浮雕图或其他图形
在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}]
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
时有效@yodaBaseStyle
是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]