我在Mathematica中创建了各种绘图/图表绘制的应用程序。最终它将具有GUI,但第一步是使代码正确,并且足够简单以便GUI进行管理。我很难设置传说,周围没有框架。
以下是一个最小示例(BarChart
上的一些选项已使用SetOptions
自定义。
mydata = {4.5644, 5.546, 6.8674, 2.7688, 1.742, 5.3952, 4.3392, 4.5016, \
3.7748, 1.838, 2.24, 0.693, 2.818, 4.9, 3.939, 3.459, 3.755, 4.475, \
3.857, 3.215, 2.206, 2.206, 2.117, 3.403, 3.277, 3.761, 4.276, 2.559, \
3.486, 4.778, 2.281, 2.865, 3.629, 4.916, 4.572, 5.244, 5.395, 2.865, \
-0.524, 5.01, 4.401, 4.513, 4.54}
BarChart[mydata,
ChartStyle -> {Join[
Table[RGBColor[0.5, 0.5, 0.95], {Length[mydata] - 3}], {Magenta,
Magenta, Magenta}]}, PlotRange -> {-2, 8},
ChartLegends -> {Join[
Table[None, {Length[mydata] - 3}], {Placed[
Style["Forecasts", FontFamily -> "Arial", FontSize -> 18],
Bottom]}]}, BarSpacing -> 0.4,
LegendAppearance -> Directive[Background -> Red,
Frame -> None, ImageSize -> 15]]
以下是我得到的:
尽我所能,我无法摆脱传说中的那个边界。你可以看到LegendAppearance
什么也没做 - 我也尝试过其他一些方法。
我不愿意手工编写小矩形代码,因为在最终的GUI中很难做到这一点。 ChartLabels
也不起作用,因为它已经被用于图表真实版本中的日期标签。
有人有任何建议吗?
答案 0 :(得分:10)
我找不到任何关闭框架的选项。 LegendAppearance的文档相当少,而且传说的样式一般没有太多讨论(参见[2]及其中的链接)。
我能想到的最简单的解决方案是手动修改图形。带有图例的图表会生成Labeled个图形对象。对于单个图例,生成的Labeled
对象看起来像Labeled[Graphics[...], Framed[...], pos]
,因此您需要删除Framed
部分。这可以通过使用Framed
(例如ReplaceAll
)移除所有BarChart[...] /. Framed -> Identity
头来完成,但也许更有针对性的更安全。
mydata = {4.5644, 5.546, 6.8674, 2.7688, 1.742, 5.3952, 4.3392,
4.5016, 3.7748, 1.838, 2.24, 0.693, 2.818, 4.9, 3.939, 3.459,
3.755, 4.475, 3.857, 3.215, 2.206, 2.206, 2.117, 3.403, 3.277,
3.761, 4.276, 2.559, 3.486, 4.778, 2.281, 2.865, 3.629, 4.916,
4.572, 5.244, 5.395, 2.865, -0.524, 5.01, 4.401, 4.513, 4.54};
bc = BarChart[{Legended[Style[mydata[[;; -4]], Red], "Data"],
Legended[Style[mydata[[-3 ;;]], Blue], "Forecasts"]},
PlotRange -> {-2, 8}, BarSpacing -> 0.4, LegendAppearance -> "Row"]
bc /. Labeled[g_, Framed[leg_], pos_] :> Labeled[g, leg, pos]
上述内容也可以使用Replace[bc, Framed[leg_] :> leg, {1}]
或MapAt[Apply[Identity, #] &, bc, 2]
或类似结构制作。如果您有更多标签或不同类型的图形对象,则修改代码不会花费太多。
答案 1 :(得分:8)
您可以通过设置:
暂时全局杀死帧SetOptions[Legending`GridLegend, Legending`LegendContainer -> Identity]
要恢复默认行为,请设置:
SetOptions[Legending`GridLegend, Legending`LegendContainer -> Automatic]
答案 2 :(得分:3)