Skip to main content

plotting - In version 9 PlotLegends, how can I remove the strange edges that appear around LegendMarkers?


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.



Answer



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.



Comments

Popular posts from this blog

front end - keyboard shortcut to invoke Insert new matrix

I frequently need to type in some matrices, and the menu command Insert > Table/Matrix > New... allows matrices with lines drawn between columns and rows, which is very helpful. I would like to make a keyboard shortcut for it, but cannot find the relevant frontend token command (4209405) for it. Since the FullForm[] and InputForm[] of matrices with lines drawn between rows and columns is the same as those without lines, it's hard to do this via 3rd party system-wide text expanders (e.g. autohotkey or atext on mac). How does one assign a keyboard shortcut for the menu item Insert > Table/Matrix > New... , preferably using only mathematica? Thanks! Answer In the MenuSetup.tr (for linux located in the $InstallationDirectory/SystemFiles/FrontEnd/TextResources/X/ directory), I changed the line MenuItem["&New...", "CreateGridBoxDialog"] to read MenuItem["&New...", "CreateGridBoxDialog", MenuKey["m", Modifiers-...

How to thread a list

I have data in format data = {{a1, a2}, {b1, b2}, {c1, c2}, {d1, d2}} Tableform: I want to thread it to : tdata = {{{a1, b1}, {a2, b2}}, {{a1, c1}, {a2, c2}}, {{a1, d1}, {a2, d2}}} Tableform: And I would like to do better then pseudofunction[n_] := Transpose[{data2[[1]], data2[[n]]}]; SetAttributes[pseudofunction, Listable]; Range[2, 4] // pseudofunction Here is my benchmark data, where data3 is normal sample of real data. data3 = Drop[ExcelWorkBook[[Column1 ;; Column4]], None, 1]; data2 = {a #, b #, c #, d #} & /@ Range[1, 10^5]; data = RandomReal[{0, 1}, {10^6, 4}]; Here is my benchmark code kptnw[list_] := Transpose[{Table[First@#, {Length@# - 1}], Rest@#}, {3, 1, 2}] &@list kptnw2[list_] := Transpose[{ConstantArray[First@#, Length@# - 1], Rest@#}, {3, 1, 2}] &@list OleksandrR[list_] := Flatten[Outer[List, List@First[list], Rest[list], 1], {{2}, {1, 4}}] paradox2[list_] := Partition[Riffle[list[[1]], #], 2] & /@ Drop[list, 1] RM[list_] := FoldList[Transpose[{First@li...

functions - Get leading series expansion term?

Given a function f[x] , I would like to have a function leadingSeries that returns just the leading term in the series around x=0 . For example: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x)] x and leadingSeries[(1/x + 2 + (1 - 1/x^3)/4)/(4 + x)] -(1/(16 x^3)) Is there such a function in Mathematica? Or maybe one can implement it efficiently? EDIT I finally went with the following implementation, based on Carl Woll 's answer: lds[ex_,x_]:=( (ex/.x->(x+O[x]^2))/.SeriesData[U_,Z_,L_List,Mi_,Ma_,De_]:>SeriesData[U,Z,{L[[1]]},Mi,Mi+1,De]//Quiet//Normal) The advantage is, that this one also properly works with functions whose leading term is a constant: lds[Exp[x],x] 1 Answer Update 1 Updated to eliminate SeriesData and to not return additional terms Perhaps you could use: leadingSeries[expr_, x_] := Normal[expr /. x->(x+O[x]^2) /. a_List :> Take[a, 1]] Then for your examples: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x), x] leadingSeries[Exp[x], x] leadingSeries[(1/x + 2 + (1 - 1/x...