gpt4 book ai didi

wolfram-mathematica - 使用鼠标旋转图像时如何强制 Plot 在 3D 中使用指定的图像大小

转载 作者:行者123 更新时间:2023-12-04 00:14:18 24 4
gpt4 key购买 nike

(Mathematica 版本:8.0.4,在 Windows 7 上)

有人可以提醒我如何告诉 M 在以下情况下不要更改 ImageSize:

我有一个 Manipulate,在那里我制作了一个网格,在网格内,我要么显示一个图,要么显示 2 个图,这取决于控制选择。

为了保持整体显示的图像相同,如果我显示一个图,我使用一种尺寸,如果我显示 2 个图,我为每个图使用一半的长度。到目前为止很容易。

奇怪的是,当我用鼠标旋转一个绘图案例,然后切换回2个绘图时,绘图大小现在没有使用我指定的ImageSize。

似乎通过使用鼠标旋转一个图,它影响了同一屏幕位置上显示的下一个图。

使用 SphericalRegion -> True与否,没有影响。使用 RotationAction -> "Fit"没有效果。

这是我的意思的一个小例子,然后我展示了我目前如何解决这个问题。但是我通过使用 GraphicsGrid 代替 Grid 来解决它。如果可能的话,我想继续使用 Grid。

Manipulate[
Module[{opt = {Spacings -> {0, 0}, Frame -> All}, p,
size, data = Table[RandomReal[], {10}, {10}], wid = 300, len = 300},

size = If[choice == 1, {wid, len}, {wid, len/2}];
Print[size];
p = ListPlot3D[data,SphericalRegion->True,ImagePadding -> 10,ImageSize ->size];

If[choice == 1,
Grid[{{p}}, Sequence@opt], Grid[{{p}, {p}}, Sequence@opt]
]
],

Row[{SetterBar[Dynamic[choice], {1, 2}]}],
{{choice, 2}, None}
]

重现这个问题很简单:首先我记下大小,这就是我想要保留它的方式。现在我单击选项 1,现在使用鼠标旋转一个图。现在我点击选择 2 返回,然后我看到情节大小不是我预期的那样。

enter image description here

我确定这是我需要使用的选项。只是还没找到。

附:实际上似乎发生的是,旋转的 SAME 情节停留在内容区域上,并被用来代替第二种情况下的两个情节之一。很奇怪。我一定是在某个地方做了一些愚蠢的事情,因为这太奇怪了。

更新 2:48 am
这是对使用 Dynamic 的回应在 Manipulate 表达式中,如下所示由 MrWizard。在 V 8.04 上,它不起作用。这是代码:
Manipulate[
Module[{p, size, data = Table[RandomReal[], {10}, {10}], wid = 300,
len = 300},

size = If[choice == 1, {wid, len}, {wid, len/2}];
p = ListPlot3D[data, SphericalRegion -> True, ImagePadding -> 10,
ImageSize -> size];

If[choice == 1,
Grid[{{p}}],
Dynamic@Grid[{{p}, {p}}]
]
],

Row[{SetterBar[Dynamic[choice], {1, 2}]}],
{{choice, 2}, None}
]

enter image description here

更新 3:03 am

下面通过保持网格来工作。在网格周围添加一个框架使其工作。
(感谢 Mike 的回答表明使用 Frame 而不是 Grid 使它起作用,我想让我尝试在 Grid 周围添加一个 Frame)

我使用 Mathematica 看到的最奇怪的事情之一 :)
Manipulate[
Module[{p, size, data = Table[RandomReal[], {10}, {10}], wid = 300,
len = 300},

size = If[choice == 1, {wid, len}, {wid, len/2}];
p = ListPlot3D[data, SphericalRegion -> True, ImagePadding -> 10,
ImageSize -> size];

If[choice == 1,
Framed@Grid[{{p}}],
Grid[{{p}, {p}}]
]
],

Row[{SetterBar[Dynamic[choice], {1, 2}]}],
{{choice, 2}, None}
]

谢谢

最佳答案

这与另一个难题有关//为什么 Plot3D 记住图像选项 why does Plot3D remember... .在这种情况下,解决方案恰好也是相同的:即添加 PreserveImageOptions -> False作为 Plot3D 的选项.不知何故,像 MrW 和 Mike 建议的那些黑客迫使 Plot3D“忘记”。

关于wolfram-mathematica - 使用鼠标旋转图像时如何强制 Plot 在 3D 中使用指定的图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8642182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com