Wolfram mathematica 在Mathematica中绘制图例
如何在不使用PlotLegends软件包的情况下为函数绘制图例?我也对这个问题的答案非常感兴趣 告诉你PlotLegends有什么问题:它非常不稳定,在很多情况下根本不起作用 下面是一个图例完全出错的示例。输出来自Mathematica 7.0: 假设我们已经测量了一些对应于许多函数的数据点,我们想展示它们与理想函数的比较情况,或者它们与计算拟合的匹配情况。没问题!我们将显示平滑图和数据点的列表图,对吗 它可能看起来像这样:Wolfram mathematica 在Mathematica中绘制图例,wolfram-mathematica,plot,Wolfram Mathematica,Plot,如何在不使用PlotLegends软件包的情况下为函数绘制图例?我也对这个问题的答案非常感兴趣 告诉你PlotLegends有什么问题:它非常不稳定,在很多情况下根本不起作用 下面是一个图例完全出错的示例。输出来自Mathematica 7.0: 假设我们已经测量了一些对应于许多函数的数据点,我们想展示它们与理想函数的比较情况,或者它们与计算拟合的匹配情况。没问题!我们将显示平滑图和数据点的列表图,对吗 它可能看起来像这样: Show[ Plot[{Sin[x], Sinh[x]}, {x,
Show[
Plot[{Sin[x], Sinh[x]}, {x, -Pi, Pi}],
ListPlot[Join[{#, Sin[#]} & /@ Range[-Pi, Pi, .5],
{#, Sinh[#]} & /@ Range[-Pi, Pi, .5]]]
]
现在我们想在情节上加上一个传说,这样读者就会知道他们到底在看什么。说起来容易做起来难,先生!让我们将PlotLegend添加到绘图[]:
Show[
Plot[{Sin[x], Sinh[x]}, {x, -Pi, Pi}, PlotLegend -> {Sin[x], Sinh[x]}],
ListPlot[Join[{#, Sin[#]} & /@ Range[-Pi, Pi, .5],
{#, Sinh[#]} & /@ Range[-Pi, Pi, .5]]]
]
这看起来很棒!立即发布
对于这样一个基本的、普遍需要的功能,找到一个可以替代PlotLegend的方法确实需要做大量的工作。到目前为止,我发现最好的替代方法是仔细地构建一个plotstyles列表,然后手工构建图例,最后使用ShowLegend[]将其与绘图一起显示。(参见示例)这是可能的,但需要做很多工作
因此,如果有人知道一个让PlotLegend工作的解决方案,一个更好的替代软件包,或者一个简单的方法来获得可以轻松自动化的图例,我将非常感激!这肯定会让生活变得轻松一点。我也对PlotLegend无法正常工作感到失望。我编写了自己的简短函数来制作自己的自定义图形图例:
makePlotLegend[names_, markers_, origin_, markerSize_, fontSize_, font_] :=
Join @@ Table[{
Text[
Style[names[[i]], FontSize -> fontSize, font],
Offset[
{1.5*markerSize, -(i - 0.5) * Max[markerSize,fontSize] * 1.25},
Scaled[origin]
],
{-1, 0}
],
Inset[
Show[markers[[i]], ImageSize -> markerSize],
Offset[
{0.5*markerSize, -(i - 0.5) * Max[markerSize,fontSize] * 1.25},
Scaled[origin]
],
{0, 0},
Background -> Directive[Opacity[0], White]
]
},
{i, 1, Length[names]}
];
它是灵活的,但不是那么容易使用。“名称”是要在图例中呈现的字符串列表;“标记”是一个列表,其长度与表示要渲染的打印标记或图形的图形对象的“名称”相同;“原点”是一个两元素列表,图例左上角有绝对水平和垂直位置;“markerSize”是要缩放标记的点数;“fontSize”是字体大小;“字体”是要使用的字体的名称。以下是一个例子:
Plot[{x, x^2}, {x, 0, 2}, PlotStyle -> {Blue, Red},
Epilog -> makePlotLegend[
{x, x^2},
(Graphics[{#, Line[{{-1, 0}, {1, 0}}]}]) & /@ {Blue, Red},
{0.9, 0.3},
12,
12,
"Arial"
]
]
如果您在尝试使用“Show”组合两幅图像时遇到James描述的奇怪行为,那么您应该尝试使用“Overlay”功能而不是“Show” 或者,我发现只要两个图形都有图例,那么“Show”就可以正确地渲染合成图像 如果有两个图例看起来有点傻,那么您可以使用以下选项从第二个图形中删除一个图例:
PlotLegend -> {},
LegendPosition -> {0.1, 0.1},
LegendSize -> 0.001,
LegendShadow -> None,
LegendBorder -> None
这将创建一个空的、不可见的图例,但仍然允许通过“显示”正确组合两个图形。PlotLegends有什么具体错误?我的意思是,你可以不用它来制作传奇(见我的答案),但它充其量也很笨拙。@Timo我很抱歉地说,但传奇有点丑陋。一个巨大的盒子,里面的内容间隔很大。默认情况下,无人使用的放置阴影。无数的手工艺品,如下图所示(但还有更多)。@Sjoerd:别抱歉,我同意它们很难看。但这可能不是OP发布这个问题的原因,因此我问他具体有什么问题。