Mathematica: метки и абсолютное позиционирование

Как вы разместите текст вне графика в математике? Быстрый поиск в Google приведет вас к

http://reference.wolfram.com/mathematica/howto/AddTextOutsideThePlotArea.html

Этого недостаточно, поскольку вы хотите добиться этого с помощью кода. Вот простой пример размещения текста в системе mathematica:

    Show[ 
     Plot[x^3, {x, -1, 1},
      Frame -> True, 
      ImageSize -> Medium, 
      FrameLabel -> {"x", "y"},
      PlotRange -> {{-1, 1}, {-1, 1}}
      ],
     Graphics[
      Text[Style["A", Bold, 14, Red], {.5, .5}]]
     ]

Буква A помещается в точку (.5, .5) относительно графика. Есть ли способ разместить текст относительно размера изображения? Насколько мне известно, все сделано в координатах сюжета. У меня есть временное решение: установить для параметра PlotRangeClipping значение False и задать текст, указав правильные координаты.

Show[
    Plot[
        x^3, {x, -1, 1}, 
        Frame -> True, 
        ImageSize -> Medium, 
        FrameLabel -> {"x", "y"}, 
        PlotRange -> {{-1, 1}, {-1, 1}}
    ],
    Graphics[
        Text[
            Style["A", Bold, 14, Red], 
            {-1.2, 1}
        ]
    ],
    PlotRangeClipping -> False
]

currentsolution

Недостатком этого метода является то, что если мы изменим диапазон графика, то нам нужно пересчитать координаты текста, чтобы сохранить его там, где мы хотим (относительно всего изображения).

РЕДАКТИРОВАТЬ:

Попробуйте расположить Текст A за пределами сюжета.

Framed[
    Show[
        Graphics[
            {Orange, Disk[{0, 0}, 3.5]}, 
            Frame -> True, 
            PlotRange -> {{-3, 3}, {-3, 3}}, 
            PlotRangeClipping -> True, 
            FrameLabel -> {"x", "y"}
        ], 
        Graphics[
            Text[
                Style["A", Bold, 14], 
                ImageScaled[{.1, .95}]
            ]
        ]
    ]
]

enter image description here

РЕДАКТИРОВАТЬ:

Чтобы найти другое решение этой проблемы, я начал другой пост, который дал мне идеи для преодолеть проблему, которая была у решения Belisarius: экспорт окончательной фигуры в PDF представлял собой растровую версию фигуры. Найдите решение в моем другом сообщении здесь .

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ?

Поскольку ссылки на изображения исчезли, а ссылка в предыдущем редактировании была изменена, я решил обновить изображения и включить модифицированное решение ответа Саймона .

Идея состоит в том, чтобы создать маску и включить маску перед рисованием меток. Таким образом мы создаем собственный plotRangeClipping .

mask2D = Graphics[{Gray,
    Polygon[{
        ImageScaled[{-0.5, -0.5}],
        ImageScaled[{-0.5, 1.5}],
        ImageScaled[{1.5, 1.5}],
        ImageScaled[{1.5, -0.5}],
        ImageScaled[{-0.5, -0.5}],
        Scaled[{0, 0}],
        Scaled[{1, 0}],
        Scaled[{1, 1}],
        Scaled[{0, 1}],
        Scaled[{0, 0}],
        ImageScaled[{-0.5, -0.5}]
    }]
}];

В некоторых случаях использование ImageScaled из {1,1} недостаточно для обрезки основного изображения. Именно по этой причине Я дал больший охват, используя 1,5 и -0,5 . Теперь мы можем нарисовать изображение с меткой следующим образом:

Framed@Show[
    Graphics[
        {
            Orange,
            Disk[{0, 0}, 3.5]
        },
        Frame -> True,
        PlotRange -> {{-3, 3}, {-3, 3}},
        FrameLabel -> {"x", "y"}
    ],
    mask2D,
    Graphics[
        Text[
            Style["A", Bold, 14],
            ImageScaled[{0, 1}],
            {-1, 1}
        ]
    ],
    Background -> Red
]

Вот желаемое изображение:

enter image description here

Обратите внимание, что я изменил фон изображения на красный. Это можно легко изменить, изменив свойство Фон , а для маски просто измените Серый на любой цвет, который вы предпочитаете (например, белый).

5
задан Community 23 May 2017 в 10:30
поделиться