Сохранение сюжетных аннотаций

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

Я радостно комментировал свои графики (вручную), когда думал, что некоторые метки оси будут хорошими. Проблема в том, что восстановление графиков с установленными метками осей уничтожит ваши ручные аннотации.

Похоже, вы можете найти пользовательские дополнения на графике с именем pic здесь: Rest[pic[[1, 1]]], так что если вы восстановите график как pic2, вы можете получить свои аннотации обратно, если вы используете:

Insert[pic2, Rest[pic[[1, 1]]], {1, 1}]

Я помню, как Дэвид Парк (автор пакета "Презентации") был категорически против ручных аннотаций. Я сам сделал несколько программных меток, но иногда поставить метки под контроль программы слишком сложно, как здесь (обратите внимание, что мне не нравится PlotLegends много, особенно потому, что некоторые цвета близки друг к другу):

топ-отвечающими

Было уже слишком поздно для моего клуджа, выбросившего оригиналы сюжета, но мне интересно, каково текущее состояние мышления по этому вопросу.

  • Есть ли лучшие способы сделать это?
  • Насколько общий этот метод? Работает ли он на всех типах графиков и диаграмм?
  • Это работает во всех версиях? (выше 5.2)
  • Какие-либо WRI планируют улучшить обработку пользовательских дополнений на графиках?

Кстати, уловка в моей публикации в математической группе немного отличалась от показанной выше и использовалась в топ-10 сюжета. Принцип тот же, хотя.


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

Я поместил код для создания графиков данных SO, подобных приведенному выше, в Mathematica Toolbag.

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

Теперь код переместился на более подходящий вопрос Бретта Чемпиона: как мне получить доступ к API Stackru из Mathematica

2 ответа

Решение

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

После добавления аннотаций через Drawings toolsдополнительная информация хранится вместе с графикой и может быть проверена, например, путем выбора графической скобки и использования Show Expression (Shift-Command-E на Mac). Дополнительная информация обычно может быть выбрана путем вырезания и вставки или использования Cases, а затем может быть добавлен к новому измененному графику, используя Epilog,

Например

Plot[Sin[x], {x, 0, 6 \[Pi]}]

Добавление нескольких аннотаций дает следующее:

Назначение имени plotgraphic на изображении выше, новый модифицированный график с добавленными аннотациями может быть сгенерирован следующим образом (например)

Labeled[Plot[Sin[x], {x, 0, 8 \[Pi]}, 
  Epilog -> Rest[Cases[plotgraphic, _List][[1]]]], "Sine Plot"]

дающий

Это может быть неудобно, если не сказать больше, и этот метод, без сомнения, может быть улучшен. Это также, вероятно, соответствует тому, что уже делают другие. Тем не менее, это дает график, где аннотации присутствуют "программно", и, как никто не упомянул EpilogЯ решил, что это может стоить публикации.

Лично я согласен с Дэвидом Парком, что программное добавление аннотации лучше. Он также может быть более надежным и работать с будущими выпусками Mathematica. Мне бы очень хотелось, чтобы палитра инструментов рисования немного улучшилась, и я хотел бы, чтобы в результате появилось несколько аннотаций, добавленных вручную. Graphics объект более четко. Если бы был инертный Head лайк AddedAnnotation или что-то подобное, то вы можете найти все эти правки программно через

Cases[editedPic, _AddedAnnotation, Infinity]

Как это, я копаюсь в InputForm изображения, и я не уверен, что ваш Rest[pic[[1, 1]]] всегда будет работать, особенно в будущих версиях.

Другие вопросы по тегам