f = Sin[t];
plot = Plot[f, {t, 0, 10}]
Один из способов получения очков заключается в следующем:
points = Cases[
Cases[InputForm[plot], Line[___],
Infinity], {_?NumericQ, _?NumericQ}, Infinity];
ListPlot для «взгляда»
ListPlot[points]
с указанием следующего:
РЕДАКТИРОВАТЬ Бретт Чампион указал, что InputForm
является излишним.
ListPlot@Cases[
Cases[plot, Line[___], Infinity], {_?NumericQ, _?NumericQ},
Infinity]
будет работать.
Также возможно вставить изображение графика, что иногда полезно.Если, скажем, я создаю ListPlot внешних данных, а затем теряю файл данных (чтобы у меня был только доступ к сгенерированному графику), я могу восстановить данные, выбрав скобку графической ячейки, скопировав и вставив:
ListPlot@Transpose[{Range[10], 4 Range[10]}]
points = Cases[
Cases[** Paste_Grphic _Here **, Point[___],
Infinity], {_?NumericQ, _?NumericQ}, Infinity]
Редактировать 2 .
Я должен был также дать перекрестные ссылки и признать этот очень хороший ответ Ярослава Булатова.
Редактировать 3
Бретт Чемпион не только указал, что FullForm
является излишним, но что в случаях, когда генерируется GraphicsComplex
, применяется Normal
превратит комплекс в примитивы.Это может быть очень полезно.
Например:
lp = ListPlot[Transpose[{Range[10], Range[10]}],
Filling -> Bottom]; Cases[
Cases[Normal@lp, Point[___],
Infinity], {_?NumericQ, _?NumericQ}, Infinity]
дает (правильно)
{{1., 1.}, {2., 2.}, {3., 3.}, {4., 4.}, {5., 5.}, {6., 6.}, {7., 7.}, {8., 8.}, {9.,9.}, {10., 10.}}
Благодаря Бретту Чэмпиону.
Наконец, более аккуратный способ использования общего подхода, приведенного в этом ответе, который я нашел здесь
Проблема ОП в терминах ListPlot может быть получена следующим образом:
ListPlot@Cases[g, x_Line :> First@x, Infinity]
Редактировать 4
Еще проще
ListPlot@Cases[plot, Line[{x__}] -> x, Infinity]
или
ListPlot@Cases[** Paste_Grphic _Here **, Line[{x__}] -> x, Infinity]
или
ListPlot@plot[[1, 1, 3, 2, 1]]
Это оценивается как True
plot[[1, 1, 3, 2, 1]] == Cases[plot, Line[{x__}] -> x, Infinity]