If you're willing to abandon PlotLegends
(which tkott advises in the comment and many others would advise too), then you could work with the code posted in this related answer to achieve some customization. You'll have to execute the definitions in that post before trying the lines below.
Take the following two plots which generate the same curve first as a line and then as points from a table, using plot markers:
p = Plot[Evaluate[Table[1/x + i, {i, 0, 3, 1}]], {x, 0, 3},
PlotRange -> {0, 3}];
q = ListPlot[
Table[Evaluate@Table[{x, 1/x + i}, {x, .5, 3, .5}], {i, 0, 3, 1}],
PlotRange -> {0, 3}, PlotMarkers -> Automatic];
Now simply say
autoLegend[Show[p, q], {"Asymptote 1", "Asymptote 2", "Asymptote 3"}]
and the result is this:

You could replace autoLegend
by deployLegend
above if you want to be able to edit the result as a graphic. To customize the sizes inside the legend, I'll add some options:
autoLegend[Show[p, q], {"Asymptote 1", "Asymptote 2", "Asymptote 3"},
"LegendLineWidth" -> 20,
"LegendLineAspectRatio" -> .5,
"LegendGridOptions" -> {Alignment -> Left, Spacings -> {1, 1}}]

The "LegendGridOptions"
setting takes the same options as Grid
and determines the horizontal and vertical space between entries in the legend. The "LegendLineWidth"
and "LegendLineAspectRatio"
have to be changed in tandem to get the markers and lines to fill the space properly.
Edit
If the two plots p
and q
represent independent data (such as experimental data versus theory curves), then the legend should have six instead of three entries. This is something autoLegend
isn't able to figure out, so we have to do it using the lower-level function legendMaker
. It needs to be given the styles for the lines and markers explicitly, as lists of six entries each. To specify that there should be no line or no marker, use the entry None
.
The following example first defines the text for the legend, and the styles that appear in the two plots:
textLabels =
Map[Style[#, FontFamily -> "Helvetica",
GrayLevel[.9]] &, {"Asymptote 1", "Asymptote 2", "Asymptote 3",
"Data 1", "Data 2", "Data 3"}];
plotstyles = Map[ColorData[1][#] &, Range[3]];
manualPlotstyles = Join[plotstyles, {None, None, None}];
markers = {Style["\[FilledCircle]", Hue[0.67, 0.6, 0.6],
FontSize -> 8.96],
Style["\[FilledSquare]", Hue[0.9060679774997897, 0.6, 0.6],
FontSize -> 8.96],
Style["\[FilledDiamond]", Hue[0.1421359549995791, 0.6, 0.6],
FontSize -> 10.88]};
manualMarkers = Join[{None, None, None}, markers];
In the variables manualPlotstyles
and manualMarkers
, I added None
in the list positions where either the line or the marker should be omitted. The result is overlayed with the combined plots (produced by Show
):
Overlay[{
Show[p, q, PlotLabel -> Style["Comparison", "Subsection"]],
legendMaker[
textLabels,
PlotStyle -> manualPlotstyles,
PlotMarkers -> manualMarkers,
Background -> Directive[Opacity[.5], Black],
"LegendLineAspectRatio" -> .3,
"LegendGridOptions" -> {Alignment -> Left, Spacings -> {.7, .1},
Background -> {{GrayLevel[.8], None}, None}
}
]},
Alignment -> {-.8, -.7}]

This shows how some of the optional parameters can be used to get a different legend appearance.
PlotLegends
for something more thorough, such as a homebrew solution. See mathematica.stackexchange.com/questions/4025/… and mathematica.stackexchange.com/questions/4444/… to name a few $\endgroup$