Adjusting bounding box of PlotLegends in TimelinePlot
$begingroup$
I'd like to align the elements of the PlotLegend
in a single horizontal row beneath the TimelinePlot
, as there is plenty of room for that (especially when I adjust the Size
to be large). Instead the internal algorithms pack the PlotLegends
into three rows in this case.
How to fix that?
TimelinePlot[
{
<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]
}|>,
<|{Entity["Person", "CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]
}|>,
<|{
"Piet Mondrian" -> Interval[{"1872", "1944"}]
}|>,
<|{"Thomas Gainsborough" -> Interval[{"1727", "1788"}]
}|>,
<|{Entity["Person", "JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]
}|>,
<|{"Pablo Picasso" -> Interval[{"1881", "1973"}]
}|>,
<|{"Hokusai" -> Interval[{"1760", "1849"}]
}|>
}
,
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple,
Black},
PlotLegends ->
Placed[{Text[Style["Italian", 16, Italic, FontFamily -> "Times"]],
Text[Style["French", 16, Italic, FontFamily -> "Times"]],
Text[Style["American", 16, Italic, FontFamily -> "Times"]],
Text[Style["British", 16, Italic, FontFamily -> "Times"]],
Text[Style["Flemish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Spanish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Japanese", 16, Italic, FontFamily -> "Times"]]},
Below],
AspectRatio -> 1/2,
PlotLayout -> "Packed",
Background -> LightGray,
ImageSize -> 600,
AxesOrigin -> Center]
legending
$endgroup$
add a comment |
$begingroup$
I'd like to align the elements of the PlotLegend
in a single horizontal row beneath the TimelinePlot
, as there is plenty of room for that (especially when I adjust the Size
to be large). Instead the internal algorithms pack the PlotLegends
into three rows in this case.
How to fix that?
TimelinePlot[
{
<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]
}|>,
<|{Entity["Person", "CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]
}|>,
<|{
"Piet Mondrian" -> Interval[{"1872", "1944"}]
}|>,
<|{"Thomas Gainsborough" -> Interval[{"1727", "1788"}]
}|>,
<|{Entity["Person", "JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]
}|>,
<|{"Pablo Picasso" -> Interval[{"1881", "1973"}]
}|>,
<|{"Hokusai" -> Interval[{"1760", "1849"}]
}|>
}
,
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple,
Black},
PlotLegends ->
Placed[{Text[Style["Italian", 16, Italic, FontFamily -> "Times"]],
Text[Style["French", 16, Italic, FontFamily -> "Times"]],
Text[Style["American", 16, Italic, FontFamily -> "Times"]],
Text[Style["British", 16, Italic, FontFamily -> "Times"]],
Text[Style["Flemish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Spanish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Japanese", 16, Italic, FontFamily -> "Times"]]},
Below],
AspectRatio -> 1/2,
PlotLayout -> "Packed",
Background -> LightGray,
ImageSize -> 600,
AxesOrigin -> Center]
legending
$endgroup$
1
$begingroup$
If the legend is to indicate nationality, then it should be „Dutch“ for de Heem. Also the curator of knowledge in the WL should be told that „Davidsz.“ is an abbreviation for „Davidszoon“ - so there is a period missing.
$endgroup$
– gwr
yesterday
add a comment |
$begingroup$
I'd like to align the elements of the PlotLegend
in a single horizontal row beneath the TimelinePlot
, as there is plenty of room for that (especially when I adjust the Size
to be large). Instead the internal algorithms pack the PlotLegends
into three rows in this case.
How to fix that?
TimelinePlot[
{
<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]
}|>,
<|{Entity["Person", "CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]
}|>,
<|{
"Piet Mondrian" -> Interval[{"1872", "1944"}]
}|>,
<|{"Thomas Gainsborough" -> Interval[{"1727", "1788"}]
}|>,
<|{Entity["Person", "JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]
}|>,
<|{"Pablo Picasso" -> Interval[{"1881", "1973"}]
}|>,
<|{"Hokusai" -> Interval[{"1760", "1849"}]
}|>
}
,
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple,
Black},
PlotLegends ->
Placed[{Text[Style["Italian", 16, Italic, FontFamily -> "Times"]],
Text[Style["French", 16, Italic, FontFamily -> "Times"]],
Text[Style["American", 16, Italic, FontFamily -> "Times"]],
Text[Style["British", 16, Italic, FontFamily -> "Times"]],
Text[Style["Flemish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Spanish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Japanese", 16, Italic, FontFamily -> "Times"]]},
Below],
AspectRatio -> 1/2,
PlotLayout -> "Packed",
Background -> LightGray,
ImageSize -> 600,
AxesOrigin -> Center]
legending
$endgroup$
I'd like to align the elements of the PlotLegend
in a single horizontal row beneath the TimelinePlot
, as there is plenty of room for that (especially when I adjust the Size
to be large). Instead the internal algorithms pack the PlotLegends
into three rows in this case.
How to fix that?
TimelinePlot[
{
<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]
}|>,
<|{Entity["Person", "CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]
}|>,
<|{
"Piet Mondrian" -> Interval[{"1872", "1944"}]
}|>,
<|{"Thomas Gainsborough" -> Interval[{"1727", "1788"}]
}|>,
<|{Entity["Person", "JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]
}|>,
<|{"Pablo Picasso" -> Interval[{"1881", "1973"}]
}|>,
<|{"Hokusai" -> Interval[{"1760", "1849"}]
}|>
}
,
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple,
Black},
PlotLegends ->
Placed[{Text[Style["Italian", 16, Italic, FontFamily -> "Times"]],
Text[Style["French", 16, Italic, FontFamily -> "Times"]],
Text[Style["American", 16, Italic, FontFamily -> "Times"]],
Text[Style["British", 16, Italic, FontFamily -> "Times"]],
Text[Style["Flemish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Spanish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Japanese", 16, Italic, FontFamily -> "Times"]]},
Below],
AspectRatio -> 1/2,
PlotLayout -> "Packed",
Background -> LightGray,
ImageSize -> 600,
AxesOrigin -> Center]
legending
legending
asked yesterday
David G. StorkDavid G. Stork
24.7k22154
24.7k22154
1
$begingroup$
If the legend is to indicate nationality, then it should be „Dutch“ for de Heem. Also the curator of knowledge in the WL should be told that „Davidsz.“ is an abbreviation for „Davidszoon“ - so there is a period missing.
$endgroup$
– gwr
yesterday
add a comment |
1
$begingroup$
If the legend is to indicate nationality, then it should be „Dutch“ for de Heem. Also the curator of knowledge in the WL should be told that „Davidsz.“ is an abbreviation for „Davidszoon“ - so there is a period missing.
$endgroup$
– gwr
yesterday
1
1
$begingroup$
If the legend is to indicate nationality, then it should be „Dutch“ for de Heem. Also the curator of knowledge in the WL should be told that „Davidsz.“ is an abbreviation for „Davidszoon“ - so there is a period missing.
$endgroup$
– gwr
yesterday
$begingroup$
If the legend is to indicate nationality, then it should be „Dutch“ for de Heem. Also the curator of knowledge in the WL should be told that „Davidsz.“ is an abbreviation for „Davidszoon“ - so there is a period missing.
$endgroup$
– gwr
yesterday
add a comment |
3 Answers
3
active
oldest
votes
$begingroup$
You can do this by Legended
ing the plot itself and then using LegendLayout
:
tlp = TimelinePlot[{<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]}|>, <|{Entity["Person",
"CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]}|>, <|{"Piet Mondrian" ->
Interval[{"1872", "1944"}]}|>, <|{"Thomas Gainsborough" ->
Interval[{"1727", "1788"}]}|>, <|{Entity["Person",
"JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]}|>, <|{"Pablo Picasso" ->
Interval[{"1881", "1973"}]}|>, <|{"Hokusai" ->
Interval[{"1760", "1849"}]}|>},
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple,
Black}, AspectRatio -> 1/2, PlotLayout -> "Packed",
Background -> LightGray, ImageSize -> 600, AxesOrigin -> Center]
Now we add our legend. Note the LegendLayout
function:
Legended[tlp,
Placed[
LineLegend[{Red, Orange, Darker[Yellow], Green, Blue, Purple, Black},
{"Italian",
"French", "American", "British", "Flemish", "Spanish",
"Japanese"},
LabelStyle -> {16, Italic, FontFamily -> "Times"},
LegendLayout -> (Row[Row[#, Spacer[1]] & /@ #, Spacer[7]] &),
LegendMargins -> 0], Below]]
Resulting in:
I'm sure there's a more elegant way to do this than creating nested Row
s, but I'm afraid I don't have the time to have a look.
$endgroup$
add a comment |
$begingroup$
Per this answer, you can use the option LegendLayout -> {"Row", 1}
.
data = {<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]}|>, <|{Entity["Person",
"CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]}|>, <|{"Piet Mondrian" ->
Interval[{"1872", "1944"}]}|>, <|{"Thomas Gainsborough" ->
Interval[{"1727", "1788"}]}|>, <|{Entity["Person",
"JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]}|>, <|{"Pablo Picasso" ->
Interval[{"1881", "1973"}]}|>, <|{"Hokusai" ->
Interval[{"1760", "1849"}]}|>};
labels = {Text[
Style["Italian", 16, Italic, FontFamily -> "Times"]],
Text[Style["French", 16, Italic, FontFamily -> "Times"]],
Text[Style["American", 16, Italic, FontFamily -> "Times"]],
Text[Style["British", 16, Italic, FontFamily -> "Times"]],
Text[Style["Flemish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Spanish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Japanese", 16, Italic, FontFamily -> "Times"]]};
TimelinePlot[data,
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple, Black},
PlotLegends -> Placed[LineLegend[labels, LegendLayout -> {"Row", 1}], Below],
AspectRatio -> 1/2,
PlotLayout -> "Packed",
Background -> LightGray,
ImageSize -> 600,
AxesOrigin -> Center
]
$endgroup$
$begingroup$
Cool (+1). So, they had 6 years to finally document this ... and did not?
$endgroup$
– gwr
yesterday
$begingroup$
That appears to be the case.
$endgroup$
– Chip Hurst
yesterday
$begingroup$
Aha, this is the real solution! I can't believe this is undocumented. I also have a hard time understanding why they used"Row"
the string rather thanRow
the symbol...
$endgroup$
– Carl Lange
yesterday
1
$begingroup$
My guess is the string version maintains consistency among other choices like "ReversedRow", etc. In addition,LegendLayout
allows for an arbitrary functionf
and so parsingRow
in this way would create ambiguity.
$endgroup$
– Chip Hurst
yesterday
3
$begingroup$
Since LineLegend accepts a LabelStyle option, you could simplify things by usingLineLegend[labels, LegendLayout -> {"Row", 1}, LabelStyle -> {16, Italic, FontFamily -> "Times"}]
and dropping all of those Style/Text wrappers in the labels.
$endgroup$
– Carl Woll
yesterday
add a comment |
$begingroup$
Just a slightly different take for readability avoiding Slot
, using Riffle
for the Spacers
and constructing the graphics with centralized components (e.g. using With
):
With[
{ data =
{ <|{Entity["Person", "LeonardoDaVinci::47w36"] -> Interval[{"1452", "1521"}]}|>
, <|{Entity["Person", "CamilleCorot::vx57d"] -> Interval[{"1796", "1875"}]}|>
, <|{"Piet Mondrian" -> Interval[{"1872", "1944"}]}|>
, <|{"Thomas Gainsborough" -> Interval[{"1727", "1788"}]}|>
, <|{Entity["Person", "JanDavidszDeHeem::2gt75"] -> Interval[{"1606", "1684"}]}|>
, <|{"Pablo Picasso" -> Interval[{"1881", "1973"}]}|>
, <|{"Hokusai" -> Interval[{"1760", "1849"}]}|>
}
, colors = { Red, Orange, Darker[Yellow], Green, Blue, Purple, Black }
, styleFunc = Function[ text,
Style[ text, 16, Italic, FontFamily -> "Times"]
]
, labels = { "Italian", "French", "American", "British", "Flemish", "Spanish", "Japanese" }
, layoutFunc = Function[ pairs, (* pairs = { {col1, lbl1}, ... } *)
pairs // RightComposition[
Flatten
, Curry[Riffle][{Spacer[2] (* after color *), Spacer[10] (* between labels *) }]
, Row
]
]
}
,
TimelinePlot[ data
, PlotStyle -> colors
, AxesOrigin -> Center
, AspectRatio -> 1/2
, PlotLegends -> Curry[Placed][Bottom] @ LineLegend[
colors,
styleFunc /@ labels
, LegendLayout -> layoutFunc
, LegendMargins -> 0
]
, PlotLayout -> "Packed"
, Background -> LightGray
, ImageSize -> 600
]
]
$endgroup$
$begingroup$
That's really interesting, it didn't occur to me that you could use currying in this way!
$endgroup$
– Carl Lange
yesterday
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "387"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f193622%2fadjusting-bounding-box-of-plotlegends-in-timelineplot%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
You can do this by Legended
ing the plot itself and then using LegendLayout
:
tlp = TimelinePlot[{<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]}|>, <|{Entity["Person",
"CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]}|>, <|{"Piet Mondrian" ->
Interval[{"1872", "1944"}]}|>, <|{"Thomas Gainsborough" ->
Interval[{"1727", "1788"}]}|>, <|{Entity["Person",
"JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]}|>, <|{"Pablo Picasso" ->
Interval[{"1881", "1973"}]}|>, <|{"Hokusai" ->
Interval[{"1760", "1849"}]}|>},
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple,
Black}, AspectRatio -> 1/2, PlotLayout -> "Packed",
Background -> LightGray, ImageSize -> 600, AxesOrigin -> Center]
Now we add our legend. Note the LegendLayout
function:
Legended[tlp,
Placed[
LineLegend[{Red, Orange, Darker[Yellow], Green, Blue, Purple, Black},
{"Italian",
"French", "American", "British", "Flemish", "Spanish",
"Japanese"},
LabelStyle -> {16, Italic, FontFamily -> "Times"},
LegendLayout -> (Row[Row[#, Spacer[1]] & /@ #, Spacer[7]] &),
LegendMargins -> 0], Below]]
Resulting in:
I'm sure there's a more elegant way to do this than creating nested Row
s, but I'm afraid I don't have the time to have a look.
$endgroup$
add a comment |
$begingroup$
You can do this by Legended
ing the plot itself and then using LegendLayout
:
tlp = TimelinePlot[{<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]}|>, <|{Entity["Person",
"CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]}|>, <|{"Piet Mondrian" ->
Interval[{"1872", "1944"}]}|>, <|{"Thomas Gainsborough" ->
Interval[{"1727", "1788"}]}|>, <|{Entity["Person",
"JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]}|>, <|{"Pablo Picasso" ->
Interval[{"1881", "1973"}]}|>, <|{"Hokusai" ->
Interval[{"1760", "1849"}]}|>},
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple,
Black}, AspectRatio -> 1/2, PlotLayout -> "Packed",
Background -> LightGray, ImageSize -> 600, AxesOrigin -> Center]
Now we add our legend. Note the LegendLayout
function:
Legended[tlp,
Placed[
LineLegend[{Red, Orange, Darker[Yellow], Green, Blue, Purple, Black},
{"Italian",
"French", "American", "British", "Flemish", "Spanish",
"Japanese"},
LabelStyle -> {16, Italic, FontFamily -> "Times"},
LegendLayout -> (Row[Row[#, Spacer[1]] & /@ #, Spacer[7]] &),
LegendMargins -> 0], Below]]
Resulting in:
I'm sure there's a more elegant way to do this than creating nested Row
s, but I'm afraid I don't have the time to have a look.
$endgroup$
add a comment |
$begingroup$
You can do this by Legended
ing the plot itself and then using LegendLayout
:
tlp = TimelinePlot[{<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]}|>, <|{Entity["Person",
"CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]}|>, <|{"Piet Mondrian" ->
Interval[{"1872", "1944"}]}|>, <|{"Thomas Gainsborough" ->
Interval[{"1727", "1788"}]}|>, <|{Entity["Person",
"JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]}|>, <|{"Pablo Picasso" ->
Interval[{"1881", "1973"}]}|>, <|{"Hokusai" ->
Interval[{"1760", "1849"}]}|>},
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple,
Black}, AspectRatio -> 1/2, PlotLayout -> "Packed",
Background -> LightGray, ImageSize -> 600, AxesOrigin -> Center]
Now we add our legend. Note the LegendLayout
function:
Legended[tlp,
Placed[
LineLegend[{Red, Orange, Darker[Yellow], Green, Blue, Purple, Black},
{"Italian",
"French", "American", "British", "Flemish", "Spanish",
"Japanese"},
LabelStyle -> {16, Italic, FontFamily -> "Times"},
LegendLayout -> (Row[Row[#, Spacer[1]] & /@ #, Spacer[7]] &),
LegendMargins -> 0], Below]]
Resulting in:
I'm sure there's a more elegant way to do this than creating nested Row
s, but I'm afraid I don't have the time to have a look.
$endgroup$
You can do this by Legended
ing the plot itself and then using LegendLayout
:
tlp = TimelinePlot[{<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]}|>, <|{Entity["Person",
"CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]}|>, <|{"Piet Mondrian" ->
Interval[{"1872", "1944"}]}|>, <|{"Thomas Gainsborough" ->
Interval[{"1727", "1788"}]}|>, <|{Entity["Person",
"JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]}|>, <|{"Pablo Picasso" ->
Interval[{"1881", "1973"}]}|>, <|{"Hokusai" ->
Interval[{"1760", "1849"}]}|>},
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple,
Black}, AspectRatio -> 1/2, PlotLayout -> "Packed",
Background -> LightGray, ImageSize -> 600, AxesOrigin -> Center]
Now we add our legend. Note the LegendLayout
function:
Legended[tlp,
Placed[
LineLegend[{Red, Orange, Darker[Yellow], Green, Blue, Purple, Black},
{"Italian",
"French", "American", "British", "Flemish", "Spanish",
"Japanese"},
LabelStyle -> {16, Italic, FontFamily -> "Times"},
LegendLayout -> (Row[Row[#, Spacer[1]] & /@ #, Spacer[7]] &),
LegendMargins -> 0], Below]]
Resulting in:
I'm sure there's a more elegant way to do this than creating nested Row
s, but I'm afraid I don't have the time to have a look.
edited yesterday
answered yesterday
Carl LangeCarl Lange
4,96211141
4,96211141
add a comment |
add a comment |
$begingroup$
Per this answer, you can use the option LegendLayout -> {"Row", 1}
.
data = {<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]}|>, <|{Entity["Person",
"CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]}|>, <|{"Piet Mondrian" ->
Interval[{"1872", "1944"}]}|>, <|{"Thomas Gainsborough" ->
Interval[{"1727", "1788"}]}|>, <|{Entity["Person",
"JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]}|>, <|{"Pablo Picasso" ->
Interval[{"1881", "1973"}]}|>, <|{"Hokusai" ->
Interval[{"1760", "1849"}]}|>};
labels = {Text[
Style["Italian", 16, Italic, FontFamily -> "Times"]],
Text[Style["French", 16, Italic, FontFamily -> "Times"]],
Text[Style["American", 16, Italic, FontFamily -> "Times"]],
Text[Style["British", 16, Italic, FontFamily -> "Times"]],
Text[Style["Flemish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Spanish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Japanese", 16, Italic, FontFamily -> "Times"]]};
TimelinePlot[data,
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple, Black},
PlotLegends -> Placed[LineLegend[labels, LegendLayout -> {"Row", 1}], Below],
AspectRatio -> 1/2,
PlotLayout -> "Packed",
Background -> LightGray,
ImageSize -> 600,
AxesOrigin -> Center
]
$endgroup$
$begingroup$
Cool (+1). So, they had 6 years to finally document this ... and did not?
$endgroup$
– gwr
yesterday
$begingroup$
That appears to be the case.
$endgroup$
– Chip Hurst
yesterday
$begingroup$
Aha, this is the real solution! I can't believe this is undocumented. I also have a hard time understanding why they used"Row"
the string rather thanRow
the symbol...
$endgroup$
– Carl Lange
yesterday
1
$begingroup$
My guess is the string version maintains consistency among other choices like "ReversedRow", etc. In addition,LegendLayout
allows for an arbitrary functionf
and so parsingRow
in this way would create ambiguity.
$endgroup$
– Chip Hurst
yesterday
3
$begingroup$
Since LineLegend accepts a LabelStyle option, you could simplify things by usingLineLegend[labels, LegendLayout -> {"Row", 1}, LabelStyle -> {16, Italic, FontFamily -> "Times"}]
and dropping all of those Style/Text wrappers in the labels.
$endgroup$
– Carl Woll
yesterday
add a comment |
$begingroup$
Per this answer, you can use the option LegendLayout -> {"Row", 1}
.
data = {<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]}|>, <|{Entity["Person",
"CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]}|>, <|{"Piet Mondrian" ->
Interval[{"1872", "1944"}]}|>, <|{"Thomas Gainsborough" ->
Interval[{"1727", "1788"}]}|>, <|{Entity["Person",
"JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]}|>, <|{"Pablo Picasso" ->
Interval[{"1881", "1973"}]}|>, <|{"Hokusai" ->
Interval[{"1760", "1849"}]}|>};
labels = {Text[
Style["Italian", 16, Italic, FontFamily -> "Times"]],
Text[Style["French", 16, Italic, FontFamily -> "Times"]],
Text[Style["American", 16, Italic, FontFamily -> "Times"]],
Text[Style["British", 16, Italic, FontFamily -> "Times"]],
Text[Style["Flemish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Spanish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Japanese", 16, Italic, FontFamily -> "Times"]]};
TimelinePlot[data,
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple, Black},
PlotLegends -> Placed[LineLegend[labels, LegendLayout -> {"Row", 1}], Below],
AspectRatio -> 1/2,
PlotLayout -> "Packed",
Background -> LightGray,
ImageSize -> 600,
AxesOrigin -> Center
]
$endgroup$
$begingroup$
Cool (+1). So, they had 6 years to finally document this ... and did not?
$endgroup$
– gwr
yesterday
$begingroup$
That appears to be the case.
$endgroup$
– Chip Hurst
yesterday
$begingroup$
Aha, this is the real solution! I can't believe this is undocumented. I also have a hard time understanding why they used"Row"
the string rather thanRow
the symbol...
$endgroup$
– Carl Lange
yesterday
1
$begingroup$
My guess is the string version maintains consistency among other choices like "ReversedRow", etc. In addition,LegendLayout
allows for an arbitrary functionf
and so parsingRow
in this way would create ambiguity.
$endgroup$
– Chip Hurst
yesterday
3
$begingroup$
Since LineLegend accepts a LabelStyle option, you could simplify things by usingLineLegend[labels, LegendLayout -> {"Row", 1}, LabelStyle -> {16, Italic, FontFamily -> "Times"}]
and dropping all of those Style/Text wrappers in the labels.
$endgroup$
– Carl Woll
yesterday
add a comment |
$begingroup$
Per this answer, you can use the option LegendLayout -> {"Row", 1}
.
data = {<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]}|>, <|{Entity["Person",
"CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]}|>, <|{"Piet Mondrian" ->
Interval[{"1872", "1944"}]}|>, <|{"Thomas Gainsborough" ->
Interval[{"1727", "1788"}]}|>, <|{Entity["Person",
"JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]}|>, <|{"Pablo Picasso" ->
Interval[{"1881", "1973"}]}|>, <|{"Hokusai" ->
Interval[{"1760", "1849"}]}|>};
labels = {Text[
Style["Italian", 16, Italic, FontFamily -> "Times"]],
Text[Style["French", 16, Italic, FontFamily -> "Times"]],
Text[Style["American", 16, Italic, FontFamily -> "Times"]],
Text[Style["British", 16, Italic, FontFamily -> "Times"]],
Text[Style["Flemish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Spanish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Japanese", 16, Italic, FontFamily -> "Times"]]};
TimelinePlot[data,
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple, Black},
PlotLegends -> Placed[LineLegend[labels, LegendLayout -> {"Row", 1}], Below],
AspectRatio -> 1/2,
PlotLayout -> "Packed",
Background -> LightGray,
ImageSize -> 600,
AxesOrigin -> Center
]
$endgroup$
Per this answer, you can use the option LegendLayout -> {"Row", 1}
.
data = {<|{Entity["Person", "LeonardoDaVinci::47w36"] ->
Interval[{"1452", "1521"}]}|>, <|{Entity["Person",
"CamilleCorot::vx57d"] ->
Interval[{"1796", "1875"}]}|>, <|{"Piet Mondrian" ->
Interval[{"1872", "1944"}]}|>, <|{"Thomas Gainsborough" ->
Interval[{"1727", "1788"}]}|>, <|{Entity["Person",
"JanDavidszDeHeem::2gt75"] ->
Interval[{"1606", "1684"}]}|>, <|{"Pablo Picasso" ->
Interval[{"1881", "1973"}]}|>, <|{"Hokusai" ->
Interval[{"1760", "1849"}]}|>};
labels = {Text[
Style["Italian", 16, Italic, FontFamily -> "Times"]],
Text[Style["French", 16, Italic, FontFamily -> "Times"]],
Text[Style["American", 16, Italic, FontFamily -> "Times"]],
Text[Style["British", 16, Italic, FontFamily -> "Times"]],
Text[Style["Flemish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Spanish", 16, Italic, FontFamily -> "Times"]],
Text[Style["Japanese", 16, Italic, FontFamily -> "Times"]]};
TimelinePlot[data,
PlotStyle -> {Red, Orange, Darker[Yellow], Green, Blue, Purple, Black},
PlotLegends -> Placed[LineLegend[labels, LegendLayout -> {"Row", 1}], Below],
AspectRatio -> 1/2,
PlotLayout -> "Packed",
Background -> LightGray,
ImageSize -> 600,
AxesOrigin -> Center
]
answered yesterday
Chip HurstChip Hurst
22.5k15892
22.5k15892
$begingroup$
Cool (+1). So, they had 6 years to finally document this ... and did not?
$endgroup$
– gwr
yesterday
$begingroup$
That appears to be the case.
$endgroup$
– Chip Hurst
yesterday
$begingroup$
Aha, this is the real solution! I can't believe this is undocumented. I also have a hard time understanding why they used"Row"
the string rather thanRow
the symbol...
$endgroup$
– Carl Lange
yesterday
1
$begingroup$
My guess is the string version maintains consistency among other choices like "ReversedRow", etc. In addition,LegendLayout
allows for an arbitrary functionf
and so parsingRow
in this way would create ambiguity.
$endgroup$
– Chip Hurst
yesterday
3
$begingroup$
Since LineLegend accepts a LabelStyle option, you could simplify things by usingLineLegend[labels, LegendLayout -> {"Row", 1}, LabelStyle -> {16, Italic, FontFamily -> "Times"}]
and dropping all of those Style/Text wrappers in the labels.
$endgroup$
– Carl Woll
yesterday
add a comment |
$begingroup$
Cool (+1). So, they had 6 years to finally document this ... and did not?
$endgroup$
– gwr
yesterday
$begingroup$
That appears to be the case.
$endgroup$
– Chip Hurst
yesterday
$begingroup$
Aha, this is the real solution! I can't believe this is undocumented. I also have a hard time understanding why they used"Row"
the string rather thanRow
the symbol...
$endgroup$
– Carl Lange
yesterday
1
$begingroup$
My guess is the string version maintains consistency among other choices like "ReversedRow", etc. In addition,LegendLayout
allows for an arbitrary functionf
and so parsingRow
in this way would create ambiguity.
$endgroup$
– Chip Hurst
yesterday
3
$begingroup$
Since LineLegend accepts a LabelStyle option, you could simplify things by usingLineLegend[labels, LegendLayout -> {"Row", 1}, LabelStyle -> {16, Italic, FontFamily -> "Times"}]
and dropping all of those Style/Text wrappers in the labels.
$endgroup$
– Carl Woll
yesterday
$begingroup$
Cool (+1). So, they had 6 years to finally document this ... and did not?
$endgroup$
– gwr
yesterday
$begingroup$
Cool (+1). So, they had 6 years to finally document this ... and did not?
$endgroup$
– gwr
yesterday
$begingroup$
That appears to be the case.
$endgroup$
– Chip Hurst
yesterday
$begingroup$
That appears to be the case.
$endgroup$
– Chip Hurst
yesterday
$begingroup$
Aha, this is the real solution! I can't believe this is undocumented. I also have a hard time understanding why they used
"Row"
the string rather than Row
the symbol...$endgroup$
– Carl Lange
yesterday
$begingroup$
Aha, this is the real solution! I can't believe this is undocumented. I also have a hard time understanding why they used
"Row"
the string rather than Row
the symbol...$endgroup$
– Carl Lange
yesterday
1
1
$begingroup$
My guess is the string version maintains consistency among other choices like "ReversedRow", etc. In addition,
LegendLayout
allows for an arbitrary function f
and so parsing Row
in this way would create ambiguity.$endgroup$
– Chip Hurst
yesterday
$begingroup$
My guess is the string version maintains consistency among other choices like "ReversedRow", etc. In addition,
LegendLayout
allows for an arbitrary function f
and so parsing Row
in this way would create ambiguity.$endgroup$
– Chip Hurst
yesterday
3
3
$begingroup$
Since LineLegend accepts a LabelStyle option, you could simplify things by using
LineLegend[labels, LegendLayout -> {"Row", 1}, LabelStyle -> {16, Italic, FontFamily -> "Times"}]
and dropping all of those Style/Text wrappers in the labels.$endgroup$
– Carl Woll
yesterday
$begingroup$
Since LineLegend accepts a LabelStyle option, you could simplify things by using
LineLegend[labels, LegendLayout -> {"Row", 1}, LabelStyle -> {16, Italic, FontFamily -> "Times"}]
and dropping all of those Style/Text wrappers in the labels.$endgroup$
– Carl Woll
yesterday
add a comment |
$begingroup$
Just a slightly different take for readability avoiding Slot
, using Riffle
for the Spacers
and constructing the graphics with centralized components (e.g. using With
):
With[
{ data =
{ <|{Entity["Person", "LeonardoDaVinci::47w36"] -> Interval[{"1452", "1521"}]}|>
, <|{Entity["Person", "CamilleCorot::vx57d"] -> Interval[{"1796", "1875"}]}|>
, <|{"Piet Mondrian" -> Interval[{"1872", "1944"}]}|>
, <|{"Thomas Gainsborough" -> Interval[{"1727", "1788"}]}|>
, <|{Entity["Person", "JanDavidszDeHeem::2gt75"] -> Interval[{"1606", "1684"}]}|>
, <|{"Pablo Picasso" -> Interval[{"1881", "1973"}]}|>
, <|{"Hokusai" -> Interval[{"1760", "1849"}]}|>
}
, colors = { Red, Orange, Darker[Yellow], Green, Blue, Purple, Black }
, styleFunc = Function[ text,
Style[ text, 16, Italic, FontFamily -> "Times"]
]
, labels = { "Italian", "French", "American", "British", "Flemish", "Spanish", "Japanese" }
, layoutFunc = Function[ pairs, (* pairs = { {col1, lbl1}, ... } *)
pairs // RightComposition[
Flatten
, Curry[Riffle][{Spacer[2] (* after color *), Spacer[10] (* between labels *) }]
, Row
]
]
}
,
TimelinePlot[ data
, PlotStyle -> colors
, AxesOrigin -> Center
, AspectRatio -> 1/2
, PlotLegends -> Curry[Placed][Bottom] @ LineLegend[
colors,
styleFunc /@ labels
, LegendLayout -> layoutFunc
, LegendMargins -> 0
]
, PlotLayout -> "Packed"
, Background -> LightGray
, ImageSize -> 600
]
]
$endgroup$
$begingroup$
That's really interesting, it didn't occur to me that you could use currying in this way!
$endgroup$
– Carl Lange
yesterday
add a comment |
$begingroup$
Just a slightly different take for readability avoiding Slot
, using Riffle
for the Spacers
and constructing the graphics with centralized components (e.g. using With
):
With[
{ data =
{ <|{Entity["Person", "LeonardoDaVinci::47w36"] -> Interval[{"1452", "1521"}]}|>
, <|{Entity["Person", "CamilleCorot::vx57d"] -> Interval[{"1796", "1875"}]}|>
, <|{"Piet Mondrian" -> Interval[{"1872", "1944"}]}|>
, <|{"Thomas Gainsborough" -> Interval[{"1727", "1788"}]}|>
, <|{Entity["Person", "JanDavidszDeHeem::2gt75"] -> Interval[{"1606", "1684"}]}|>
, <|{"Pablo Picasso" -> Interval[{"1881", "1973"}]}|>
, <|{"Hokusai" -> Interval[{"1760", "1849"}]}|>
}
, colors = { Red, Orange, Darker[Yellow], Green, Blue, Purple, Black }
, styleFunc = Function[ text,
Style[ text, 16, Italic, FontFamily -> "Times"]
]
, labels = { "Italian", "French", "American", "British", "Flemish", "Spanish", "Japanese" }
, layoutFunc = Function[ pairs, (* pairs = { {col1, lbl1}, ... } *)
pairs // RightComposition[
Flatten
, Curry[Riffle][{Spacer[2] (* after color *), Spacer[10] (* between labels *) }]
, Row
]
]
}
,
TimelinePlot[ data
, PlotStyle -> colors
, AxesOrigin -> Center
, AspectRatio -> 1/2
, PlotLegends -> Curry[Placed][Bottom] @ LineLegend[
colors,
styleFunc /@ labels
, LegendLayout -> layoutFunc
, LegendMargins -> 0
]
, PlotLayout -> "Packed"
, Background -> LightGray
, ImageSize -> 600
]
]
$endgroup$
$begingroup$
That's really interesting, it didn't occur to me that you could use currying in this way!
$endgroup$
– Carl Lange
yesterday
add a comment |
$begingroup$
Just a slightly different take for readability avoiding Slot
, using Riffle
for the Spacers
and constructing the graphics with centralized components (e.g. using With
):
With[
{ data =
{ <|{Entity["Person", "LeonardoDaVinci::47w36"] -> Interval[{"1452", "1521"}]}|>
, <|{Entity["Person", "CamilleCorot::vx57d"] -> Interval[{"1796", "1875"}]}|>
, <|{"Piet Mondrian" -> Interval[{"1872", "1944"}]}|>
, <|{"Thomas Gainsborough" -> Interval[{"1727", "1788"}]}|>
, <|{Entity["Person", "JanDavidszDeHeem::2gt75"] -> Interval[{"1606", "1684"}]}|>
, <|{"Pablo Picasso" -> Interval[{"1881", "1973"}]}|>
, <|{"Hokusai" -> Interval[{"1760", "1849"}]}|>
}
, colors = { Red, Orange, Darker[Yellow], Green, Blue, Purple, Black }
, styleFunc = Function[ text,
Style[ text, 16, Italic, FontFamily -> "Times"]
]
, labels = { "Italian", "French", "American", "British", "Flemish", "Spanish", "Japanese" }
, layoutFunc = Function[ pairs, (* pairs = { {col1, lbl1}, ... } *)
pairs // RightComposition[
Flatten
, Curry[Riffle][{Spacer[2] (* after color *), Spacer[10] (* between labels *) }]
, Row
]
]
}
,
TimelinePlot[ data
, PlotStyle -> colors
, AxesOrigin -> Center
, AspectRatio -> 1/2
, PlotLegends -> Curry[Placed][Bottom] @ LineLegend[
colors,
styleFunc /@ labels
, LegendLayout -> layoutFunc
, LegendMargins -> 0
]
, PlotLayout -> "Packed"
, Background -> LightGray
, ImageSize -> 600
]
]
$endgroup$
Just a slightly different take for readability avoiding Slot
, using Riffle
for the Spacers
and constructing the graphics with centralized components (e.g. using With
):
With[
{ data =
{ <|{Entity["Person", "LeonardoDaVinci::47w36"] -> Interval[{"1452", "1521"}]}|>
, <|{Entity["Person", "CamilleCorot::vx57d"] -> Interval[{"1796", "1875"}]}|>
, <|{"Piet Mondrian" -> Interval[{"1872", "1944"}]}|>
, <|{"Thomas Gainsborough" -> Interval[{"1727", "1788"}]}|>
, <|{Entity["Person", "JanDavidszDeHeem::2gt75"] -> Interval[{"1606", "1684"}]}|>
, <|{"Pablo Picasso" -> Interval[{"1881", "1973"}]}|>
, <|{"Hokusai" -> Interval[{"1760", "1849"}]}|>
}
, colors = { Red, Orange, Darker[Yellow], Green, Blue, Purple, Black }
, styleFunc = Function[ text,
Style[ text, 16, Italic, FontFamily -> "Times"]
]
, labels = { "Italian", "French", "American", "British", "Flemish", "Spanish", "Japanese" }
, layoutFunc = Function[ pairs, (* pairs = { {col1, lbl1}, ... } *)
pairs // RightComposition[
Flatten
, Curry[Riffle][{Spacer[2] (* after color *), Spacer[10] (* between labels *) }]
, Row
]
]
}
,
TimelinePlot[ data
, PlotStyle -> colors
, AxesOrigin -> Center
, AspectRatio -> 1/2
, PlotLegends -> Curry[Placed][Bottom] @ LineLegend[
colors,
styleFunc /@ labels
, LegendLayout -> layoutFunc
, LegendMargins -> 0
]
, PlotLayout -> "Packed"
, Background -> LightGray
, ImageSize -> 600
]
]
answered yesterday
gwrgwr
8,57322861
8,57322861
$begingroup$
That's really interesting, it didn't occur to me that you could use currying in this way!
$endgroup$
– Carl Lange
yesterday
add a comment |
$begingroup$
That's really interesting, it didn't occur to me that you could use currying in this way!
$endgroup$
– Carl Lange
yesterday
$begingroup$
That's really interesting, it didn't occur to me that you could use currying in this way!
$endgroup$
– Carl Lange
yesterday
$begingroup$
That's really interesting, it didn't occur to me that you could use currying in this way!
$endgroup$
– Carl Lange
yesterday
add a comment |
Thanks for contributing an answer to Mathematica Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f193622%2fadjusting-bounding-box-of-plotlegends-in-timelineplot%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
$begingroup$
If the legend is to indicate nationality, then it should be „Dutch“ for de Heem. Also the curator of knowledge in the WL should be told that „Davidsz.“ is an abbreviation for „Davidszoon“ - so there is a period missing.
$endgroup$
– gwr
yesterday