Как заставить Plot использовать указанный размер изображения в 3D при использовании мыши для поворота изображения

( версия 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, чтобы вернуться, и вижу, что размер сюжета не такой, как я ожидал.

enter image description here

Я уверен, что мне нужно использовать этот вариант. Просто еще не нашел.

пс. На самом деле, похоже, происходит то, что ТО ЖЕ график, который был повернут, остается в области содержимого и использовался вместо одного из двух графиков во втором случае. Очень странный. Я, должно быть, где-то делаю что-то глупое, это слишком странно.

Обновление 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}
 ]

enter image description here

Обновление 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}
 ]

Спасибо

6
задан Arnoud Buzing 31 December 2011 в 21:50
поделиться