( версия Mathematica : 8.0.4, в Windows 7)
Не мог бы кто-нибудь напомнить мне, как сказать M не изменять размер изображения в следующем случае:
У меня есть Manipulate, где я создаю сетку, и внутри сетки я либо показываю один график , или 2 участка, в зависимости от выбора контроля.
Чтобы общее отображаемое изображение оставалось неизменным, тогда, если я показываю один график, я использую один размер, а если я показываю 2 графика, я использую половину длины для каждого графика. Пока достаточно просто.
Странно то, что когда я использую мышь для поворота одного варианта графика, а затем переключаюсь обратно на 2 графика, размер графика теперь не использует указанный мной размер изображения.
Похоже, что использование мыши для поворота одного графика повлияло на следующий график, показанный в том же месте на экране.
Использование SphericalRegion -> True
или нет, не имеет никакого эффекта. Использование RotationAction -> «Подогнать»
не имеет никакого эффекта.
Вот небольшой пример того, что я имею в виду, а затем я покажу, как я сейчас решаю эту проблему. Но я решаю это, используя GraphicsGrid вместо 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, чтобы вернуться, и вижу, что размер сюжета не такой, как я ожидал.
Я уверен, что мне нужно использовать этот вариант. Просто еще не нашел.
пс. На самом деле, похоже, происходит то, что ТО ЖЕ график, который был повернут, остается в области содержимого и использовался вместо одного из двух графиков во втором случае. Очень странный. Я, должно быть, где-то делаю что-то глупое, это слишком странно.
Обновление 2:48
Это является ответом на использование 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}
]
Обновление 3:03
Это ниже работает, сохраняя сетку. Добавление рамки вокруг сетки заставляет ее работать.(Благодаря ответу Майка, показавшему, что использование фрейма вместо сетки заставило его работать, я решил, что позволю себе попытаться добавить фрейм вокруг сетки)
Одна из самых странных вещей, которые я видел при использовании 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}
]
Спасибо