13
$\begingroup$

I'm running Mathematica version 9. I am using ListPlot to plot two sets of data. For each data set, I am using different PlotMarkers: for the first data set, I use red disks, while for the second data set, I use red rectangles. To do this, I define Graphics objects redDisk and redRectangle as shown below. (I have found that it is necessary to define nonzero ImagePadding to prevent the edges of the Graphics from being cut off.)

Next, I want to display a plot legend describing the two different PlotMarkers. To do this, I want to use the PlotLegends option that is newly implemented in Mathematica version 9. I define a PointLegend called legend. Within PointLegend, I use pass in the objects redDisk and redRectangle to the LegendMarkers option. Then I give legend to the PlotLegends option of ListPlot and use the Placed function to position the legend in the plot.

The code to do all of this is the following:

(* Define PlotMarkers *)
pm = 8; (* size of PlotMarkers *)
redDisk = 
  Graphics[{Red, Disk[]}, ImageSize -> (pm + 2), 
   ImagePadding -> {{1, 1}, {1, 1}}];
redRectangle = 
  Graphics[{Red, Rectangle[]}, ImageSize -> (pm + 1), 
   ImagePadding -> {{1, 1}, {1, 1}}];

(* Define a PointLegend using the PlotMarkers defined above *)
legend = PointLegend[{Red, Red}, {"red disk", "red rectangle"}, 
   LabelStyle -> {18, FontFamily -> "Arial"}, 
   LegendFunction -> "Frame", 
   LegendMarkers -> {redDisk, redRectangle}];

(* Create some data to plot *)
myRange = Range[0, 2 Pi, 0.175];
diskData = Transpose[{myRange, Sin[myRange]}];
rectangleData = Transpose[{myRange, Cos[myRange]}];

(* Plot the data *)
myPlot = ListPlot[
  {diskData, rectangleData}, PlotRange -> All, Frame -> True, 
  FrameLabel -> {"x", "y"}, BaseStyle -> {18, FontFamily -> "Arial"}, 
  PlotStyle -> Red, PlotMarkers -> {redDisk, redRectangle}, 
  ImageSize -> 500,
  PlotLegends -> Placed[legend, Scaled[{0.65, 0.85}]]
  ]

which gives this output:

SmallGraphic

However, when I zoom in on this graphical output, I see that the markers inside the PointLegend do not appear exactly the same as the PlotMarkers of ListPlot. Specifically, the markers inside the PointLegend appear to have a strange gray edge or border:

ZoomGraphic

where I used the Mathematica front end's magnification feature to zoom in on the myPlot graphical output.

The strange gray edges/borders persist even when I export myPlot to, for example, a pdf file:

(* Export the data as a pdf file *)
Export["example.pdf", myPlot]

When I open example.pdf in a pdf viewer and zoom in, I see the following. The strange gray edges/borders are still apparent in the LegendMarkers within the legend:

PDFGraphic

So, my question is, how can I remove the gray edges/borders of the LegendMarkers so that the LegendMarkers and PlotMarkers look the same?

Thanks for your time.

$\endgroup$

3 Answers 3

17
$\begingroup$

Instead of simply using Red as the directive, set the face and edge colors explicitly so that there is no ambiguity. If you use FaceForm@Red and EdgeForm@Red (or None) in your definitions for redDisk and redRectangle, you get legend markers without black borders.

$\endgroup$
3
  • $\begingroup$ Thanks so much! This may justify or require a separate question, but is there any way to force the LegendMarkers to be the same size as the PlotMarkers? In the plot, it looks like the redDisk PlotMarkers are somewhat larger than the redDisk LegendMarkers. $\endgroup$
    – Andrew
    Commented Oct 19, 2013 at 17:09
  • 1
    $\begingroup$ Yes, it should be possible. Off the top of my head, the solution is to use {redDisk, size} in the plot marker and legend marker option. However, the value of size is typically a fraction of the size of the parent figure (e.g. 0.04). Since your legend and plot figures are of different sizes, the value you choose for size in each must be so that the disks look the same for both plots. I don't have the time right now to work on it and write up an automated solution, but this is probably sufficient info for you to manually tweak them for now. Also, I suppose there might be a question here... $\endgroup$
    – rm -rf
    Commented Oct 19, 2013 at 17:36
  • $\begingroup$ Thanks. This helps a lot! Yes, it seems that there might be a question here, too. Thanks again. $\endgroup$
    – Andrew
    Commented Oct 19, 2013 at 17:49
4
$\begingroup$

Grayish (actually black with Opacity[.3] marker edges are the result of default setting for marker style:

Legending`LegendDump`$DefaultMarkerStyle

EdgeForm[Directive[Opacity[0.3], GrayLevel[0]]]

You can reset this to EdgeForm[]:

Legending`LegendDump`$DefaultMarkerStyle = EdgeForm[];

PointLegend[{Red, Red}, {"red disk", "red rectangle"}, 
 LabelStyle -> {18, FontFamily -> "Arial"}, LegendFunction -> "Frame",
 LegendMarkers -> {redDisk, redRectangle}]  // Magnify[#, 5] &

enter image description here

$\endgroup$
1
  • $\begingroup$ This is what actually worked for me, especially when trying to get "unfilled" markers. E.g. LegendMarkers->Graphics[{FaceForm[None], EdgeForm[Directive[Thickness[0.2], Opacity[1], Blue]], SSSTriangle[1, 1, 1]}] for a blue triangle that roughly matches the blue triangle from PlotMarkers->"OpenMarkers". If you don't include the Opacity[1], the edge still looks greyish. $\endgroup$
    – Mr. G
    Commented Apr 25, 2023 at 22:30
3
$\begingroup$

You may also supply EdgeForm[] in Graphics[...] to force Mathematica not to draw edges.

$\endgroup$
6
  • $\begingroup$ @bobthechemist The solution works for me in version 10.0.1 under Windows. $\endgroup$
    – Mr.Wizard
    Commented Oct 3, 2014 at 2:12
  • $\begingroup$ However now that I look again this appears to be a duplicate of rm -rf's answer. @Leonx are you proposing something else? $\endgroup$
    – Mr.Wizard
    Commented Oct 3, 2014 at 2:13
  • $\begingroup$ @Mr.Wizard I just tried to provide an alternative answer as rm -rf's answer 'EdgeForm@Red (or None)', pardon me I didn't pay attention to the 'None' option. $\endgroup$
    – Leonx
    Commented Oct 3, 2014 at 2:27
  • $\begingroup$ @bobthechemist, sorry, I am still new and hit the big red button instead of the grey one. $\endgroup$
    – Leonx
    Commented Oct 3, 2014 at 2:28
  • $\begingroup$ I see. Experienced users know that one can often use ...[] or {} in place of None but some may not. I appreciate your intention so +1 (meaning my positive vote) on this answer. $\endgroup$
    – Mr.Wizard
    Commented Oct 3, 2014 at 2:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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