( Mathematica версия: 8.0.4, в Windows 7)
Может кто-нибудь напомнить, как сказать M не изменять ImageSize в следующем случае:
У меня есть Манипуляция, где я делаю сетку, и внутри сетки я либо показываю один график, либо 2 графика, в зависимости от выбора элемента управления.
Чтобы сохранить общее отображаемое изображение таким же, затемесли я отображаю один график, я использую один размер, а если я отображаю 2 графика, я использую половину длины для каждого графика.Пока все достаточно просто.
Странно то, что когда я использую мышь, чтобы повернуть случай с одним графиком, а затем переключиться обратно на 2 графика, размер графика теперь не использует указанный мной размер изображения.
Кажется, с помощью мыши, чтобы повернуть один график, это повлияло на следующий график, показанный в том же месте экрана.
Использование 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, чтобы вернуться, и я вижу, что размер графика не соответствует ожидаемому.
Я уверен, что это вариант, который мне нужениспользовать.Просто еще не нашел.
пс.На самом деле, похоже, происходит то же самое, что тот же график, который был повернут, остается в области содержимого и использовался вместо одного из 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
Это ниже работает, сохраняя сетку.Добавление рамки вокруг сетки делает это работает.(Благодаря ответу Майка, показывающему, что использование Frame вместо Grid заставило его работать, я решил, что попытаюсь добавить Frame вокруг Grid)
Одна из самых странных вещей, которые я видел при использовании 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}
]
Спасибо