Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

After reading the PlotMarkers documentation it seems to be all or nothing. For example if you wanted markers on some of you lines the code below seems possible/probable given the documentation:

ListPlot[Table[n^(1/p), {p, 4}, {n, 10}],
 Joined -> True,
 PlotMarkers -> {{"\[FilledSquare]", 10.9`}, None, 
   None, {"\[EmptyCircle]", 9}}]

But this doesn't work.

enter image description here

It seems that an empty string is the only way to get no markers for some of the lines if you choose markers on others. Is this correct or am I misusing PlotMarkers?

When using an empty circle marker the background is transparent so the line can be seen underneath. If I want filled white circle with an EdgeForm colour that obscures the plot line I can make one and use it as a marker as per instructions in the documentation but then I run into the headache of wanting to parse the default (or other) colours to the EdgeForm directive. This can be developed but what a headache. Has anyone got any easy work arounds?

ListPlot[Table[n^(1/p), {p, 4}, {n, 10}],
 Joined -> True,
 PlotMarkers -> {{Graphics[{EdgeForm[Directive[ColoursGoHere,Thick, Thick]], White, 
      Disk[{0, 0}, 1]}], 0.05}}]

enter image description here

share|improve this question
    
Sticking with \[EmptyCircle], maybe Style[\[EmptyCircle] , Background -> White] ? –  TomD May 10 '12 at 10:05
    
@TomD the background is not confined to the inside of the circle. For a small font size and no other lines nearby this is not really a problem. However it is possible that the backgrounded "square" could overlap other lines. This is best seen in this example with background red and a larger font. –  Mike Honeychurch May 10 '12 at 21:57
    
You are right, of course. That is good to know. –  TomD May 11 '12 at 11:57

3 Answers 3

up vote 14 down vote accepted

The answer to your first question is that PlotMarkers doesn't really use a graphics primitive, but uses font based markers as a proxy for it. This can lead to errors in positioning on some OSes.

I'm guessing that PlotStyle has something of the form ToString@HoldForm[...] when the input is a list, which is why None and False or anything else get converted to strings. This might well be a bug/undesired behaviour, because AxesLabel -> None and AxesLabel -> {"x", None} don't behave the same way. It does seem to work for Null though, although I wouldn't have guessed it at first.

For the second question, you can adapt Yu-Sung's answer and use CurrentValue["Color"] to colour your markers. Here's your example modified to do this:

ListPlot[Table[n^(1/p), {p, 4}, {n, 10}], Joined -> True, PlotMarkers :> 
    {{Graphics[{Dynamic@EdgeForm[{CurrentValue["Color"], Thick}], 
        FaceForm[White], Disk[{0, 0}, 1]}], 0.05}}
]

enter image description here

share|improve this answer
    
CurrentValue["Color"] is indeed a good, and concise, solution to this. Anyone know why it isn't documented? –  Mike Honeychurch May 10 '12 at 8:48
    
@MikeHoneychurch CurrentValue is poorly documented indeed. See mathematica.stackexchange.com/questions/1379/… –  belisarius May 10 '12 at 12:30

The None option is the default, and is only for use when applied to all datasets as one:

ListPlot[Table[n^(1/p), {p, 4}, {n, 10}],
 Joined -> True, PlotMarkers -> None]

You can use "", Null or Spacer[0] for the result you require.

share|improve this answer
3  
Just for completeness: you could also use Graphics[{}] in place of "". –  Jens May 10 '12 at 7:23
1  
In other words, the workaround is to use anything that formats as "empty" or invisible. –  Szabolcs May 10 '12 at 8:19
    
I was using "" but wanted to clarify that None was inappropriate. thanks –  Mike Honeychurch May 10 '12 at 8:46

Addressing only the second part of the question it may be solved using:

ListLinePlot[Table[n^(1/p), {p, 4}, {n, 10}],
  PlotMarkers -> {Graphics[{{White, Disk[]}, {Thick, Circle[]}}], 0.05}
]

enter image description here

When the first argument of Graphics is a list the style directives are prefixed.

Related:

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.