Как наложить два ReliefPlots или другую графику - PullRequest
13 голосов
/ 09 ноября 2011

Возможно ли наложение двух или более графических объектов в Mathematica, если графические объекты генерируются такими функциями, как ReliefPlot или DensityPlot, с использованием непрозрачности для управления внешним видом?

Например:

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]

объединяет два, но я не могу понять, как вставить команду непрозрачности где-нибудь здесь, чтобы обавидимый.В документации говорится, что эти функции принимают те же параметры, что и Graphics («ReliefPlot имеет те же параметры, что и Graphics, со следующими добавлениями и изменениями:»), но я не понимаю, как управлять графикой ... (И я могубыть сбитым с толку насчет различий между графическими параметрами и директивами.)

Просветление - и меньшая непрозрачность - очень приветствуется!

Редактировать: Вау, вы, ребята, быстрее, чем моя версия Mathematica -спасибо!

Ответы [ 5 ]

11 голосов
/ 09 ноября 2011

Вам нужно будет выдать директиву opacity для 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]

enter image description here

В целом, во всех *Plot* функциях вы управляете непрозрачностью либо с PlotStyle, либо с ColorFunction, в зависимости от ситуации. Если бы это был просто Graphics примитив, вы бы, вероятно, сделали что-то вроде Graphics[{Opacity[0.5], object}].

10 голосов
/ 09 ноября 2011

Альтернативой является работа с Image s и функцией ReliefImage, а затем составление результирующих изображений вместе, используя ImageCompose:

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}
 ]

enter image description here

Поскольку ReliefPlot также по существу возвращает данные пикселей в Graphics -совместимом формате, возможно, Image s подойдет вам лучше.

Функция цвета по умолчаниюиз ReliefImage отличается: вы можете использовать ColorFunction -> "LakeColors" для переключения на ReliefPlot.

Первоначально у меня была функция для извлечения растровых данных из ReliefPlot, но затемБретт Чемпион указал на RasterImage в комментарии ниже

10 голосов
/ 09 ноября 2011

Поскольку ReliefPlot не имеет опции PlotStyle, вы можете использовать BaseStyle -> Opacity[0.5] для обеспечения прозрачности графики.

enter image description here

7 голосов
/ 09 ноября 2011

Ответы, использующие прозрачность, будут работать в очень общем виде, но в этом конкретном примере объединения двух ReliefPlot [] вы можете рассмотреть вопрос о построении суммы двух:

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]
6 голосов
/ 09 ноября 2011
Show[a, {Opacity[0.5],#}& /@ b]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...