2011-12-14 4 views
4

Не уверен, что это ошибка MMA, или я делаю что-то неправильно. Рассмотрим следующую функцию:PlotMarkers исчезают при построении ровно двух полилиний в Mathematica?

plotTrace[points_] := 
ListPlot[points, 
    Joined -> True, 
    PlotMarkers -> Table[i, {i, [email protected]}]] 

Теперь рассмотрим прохождение дорожит порождена RandomReal. А именно, рассмотрим

RandomReal[1, {nTraces, nPointsPerTrace, 2(*constant = nDimensions*)}]. 

Если nTraces является 1, то PlotMarkers отображаются для всех значений nPointsPerTrace, что я пытался:

Manipulate[ 
plotTrace[RandomReal[1, {1, nPointsPerTrace, 2}]], 
{nPointsPerTrace, 1, 20, 1}] 

plotting random points when nTraces == 1

Если nTraces 3 или больше, то участок маркеры отображаются для всех значений nPointsPerTrace, которые я пробовал

Manipulate[plotTrace[RandomReal[1, {nTraces, nPointsPerTrace, 2}]], 
{nTraces, 3, 20, 1}, {nPointsPerTrace, 1, 20, 1}] 

plotting random points when nTraces >= 3

Но если nTraces именно 2, я не вижу маркеры сюжета, независимо от того, значение nPointsPerTrace:

Manipulate[plotTrace[RandomReal[1, {2, nPointsPerTrace, 2}]], 
{nPointsPerTrace, 1, 20, 1}] 

plotting random points when nTraces == 2

советы, подсказки, советы будут оценены!

+0

Интересно. Я получаю то же самое в Mathematica 8.0.1. –

ответ

5

Это лечение PlotMarkers -> {1,2} в качестве маркеров и размера, а не как два маркера:

In[137]:= ListPlot[{{1, 2, 3}, {4, 5, 6}}, PlotMarkers -> {1, 2}] // InputForm 

Out[137]//InputForm= 
Graphics[GraphicsComplex[{{1., 1.}, {2., 2.}, {3., 3.}, {1., 4.}, {2., 5.}, {3., 6.}, 
    {1., 1.}, {2., 2.}, {3., 3.}, {1., 4.}, {2., 5.}, {3., 6.}}, 
    {{{Hue[0.67, 0.6, 0.6], Inset[Style[1, FontSize -> 2], 7], 
    Inset[Style[1, FontSize -> 2], 8], Inset[Style[1, FontSize -> 2], 9]}, 
    {Hue[0.9060679774997897, 0.6, 0.6], Inset[Style[1, FontSize -> 2], 10], 
    Inset[Style[1, FontSize -> 2], 11], Inset[Style[1, FontSize -> 2], 12]}, {}}}], 
{AspectRatio -> GoldenRatio^(-1), Axes -> True, AxesOrigin -> {0, 0}, 
    PlotRange -> {{0, 3.}, {0, 6.}}, PlotRangeClipping -> True, 
    PlotRangePadding -> {Scaled[0.02], Scaled[0.02]}}] 
+0

Yup, проверено.Исправление - это 'ListPlot [{{1,2,3}, {4,5,6}}, PlotMarkers-> ToString/@ {1,2}]' и, в общем, просто для сопоставления ToString над PlotMarkers рассчитанный в моей общей функции 'PlotTrace'. Спасибо за отличный ответ. –

+0

Просто подтвердил, что он также работает с 'PlotMarkers-> ToString/@ Range [Length @ points]' - это определенно не работало в разных версиях 7, так что это улучшение. –

+0

@Reb 'PlotMarkers-> ToString/@ Range [Length @ points]' работает в версии 7.0.1. –

1

Вещи становятся еще более странными, когда вы пробуете разные вещи для PlotMarkers. Ниже не отображаются маркеры графики, как в приведенных выше примерах.

pts = RandomReal[1, {2, 10, 2}]; 
(* No markers *) 
ListPlot[pts, 
Joined -> True, 
PlotMarkers -> {1, 2} 
] 

Mathematica graphics

Однако, когда вы измените 2 на b, он делает:

pts = RandomReal[1, {2, 10, 2}]; 
(* Has markers *) 
ListPlot[pts, 
Joined -> True, 
PlotMarkers -> {1, b} 
] 

Mathematica graphics

Если вы пытаетесь изменить 1 к чему-то, что Безразлично» т:

pts = RandomReal[1, {2, 10, 2}]; 
(* No markers *) 
ListPlot[pts, 
Joined -> True, 
PlotMarkers -> {a, 2} 
] 

Mathematica graphics

Это делает действительно звучит как ошибка, но я не уверен, если это зависит от версии или некоторые виды поведения, которые не очевидны.

+2

Учитывая, что маркеры участков могут быть {маркер, размер}, кажется, что для списков опций длины 2 Mma не уверен, следует ли рассматривать это как {маркер, маркер} или {маркер, размер}. Если второй элемент является целым числом, он, по-видимому, обрабатывает список как {marker, размер} по умолчанию. Итак, PlotMarkers -> {a, 2} является «невидимым», потому что FontSize-> 2 по существу невидим. Если вы хотите явно иметь целое число 2 в качестве метки, вы можете делать PlotMarkers -> {a, "2"} или просто добавить третий элемент PlotMarkers -> {a, 2, stuff}. –