Я не уверен, что то, что вам нужно, похоже на следующее, но тем не менее:
Если я использую ListPlot
следующим образом:
lp1 = Labeled[
ListPlot[Diagonal@Table[{x, y}, {x, 0, 5}, {y, 5}],
PlotStyle -> {Directive[Red, PointSize[Large]]}], "lp1"];
Двойным щелчком мыши на одномиз красных точек дважды, чтобы получить выделение на уровне точек, я могу затем переместить отдельные точки, например, чтобы точки лежали на кривой (а не на прямой линии).Теперь я хочу извлечь эти точки (и, скажем, использовать их в новом ListPlot
) [см. Графики ниже]
Если я нажму на скобку графического изображения и использую «Показать выражение» (Command Shift Eна Mac) я могу «видеть» координаты измененных точек, которые затем могут быть извлечены.Например:
expr = Cell[
BoxData[GraphicsBox[{RGBColor[1, 0, 0], PointSize[Large],
PointBox[{{0., 1.}, {0.8254488458250212,
2.886651181634783}, {1.9301795383300084`,
3.925201233010209}, {3.046546974446661,
4.597525796319094}, {4., 5.}}]},
AspectRatio -> NCache[GoldenRatio^(-1), 0.6180339887498948],
Axes -> True, PlotRange -> Automatic,
PlotRangeClipping -> True]], "Input",
CellChangeTimes -> {{3.504427833788156*^9, 3.50442786823486*^9}}];
Изменение очень полезного подхода, первоначально предложенного Ярославом Булатовым, который можно найти здесь
modpoints = Flatten[Cases[expr, PointBox[___], Infinity][[All, 1]], {{2, 1}}]
РЕДАКТИРОВАТЬ
Как указал Велизарий, желательно иметь возможность извлекать «добавленные вручную точки» (которые можно добавить к сгенерированному графику, используя «точку» из палитры «Инструменты рисования»).Лучший способ извлечения (после «Показать выражение» ...), вероятно, следующий:
modpoints = Cases[Cases[expr, PointBox[___],
Infinity], {_?NumericQ, _?NumericQ}, Infinity]
Конечно, «Показать выражение» - не единственный подход.
InputForm
- другойвозможность.Например,
expr2 = InputForm[ListPlotGraphic]
modpoints = Cases[Cases[expr, Point[___],
Infinity], {_?NumericQ, _?NumericQ}, Infinity]
, где «ListPlotGraphic» - это измененный рисунок (вставленный «копировать и вставить»), также будет работать.
Примеры графиков
Приложение
Вышеизложенное можно автоматизировать с помощью небольшого программирования на ноутбуке:
lp1 = Labeled[
ListPlot[Diagonal@Table[{x, y}, {x, 0, 5}, {y, 5}],
PlotStyle -> {Directive[Red, PointSize[Large]]}],
Button["Print points",
With[{nb = ButtonNotebook[]},
SelectionMove[nb, All, CellContents];
Print[Cases[NotebookRead[nb],
PointBox[{{_?NumericQ, _?NumericQ} ..}] |
PointBox[{_?NumericQ, _?NumericQ}], Infinity]]]]]
Выполнение вышеуказанного, перемещение двух последних оригинальных (красных) точек и добавлениепара дополнительных точек синего цвета с помощью инструментов рисования, а затем нажатие кнопки дает
Вы можете видеть, что для исходных данных есть один PointBox
и новый PointBox
за каждый из добавленных баллов.Конечно, изменяя приведенный выше код, вы можете сделать больше, чем просто распечатать исходные координаты точки.