Charts 能否删除条形图图例上的边框?

Charts 能否删除条形图图例上的边框?,charts,wolfram-mathematica,bar-chart,Charts,Wolfram Mathematica,Bar Chart,我正在为Mathematica中的各种绘图/图表创建一个应用程序。最终,它将拥有一个GUI,但第一步是使代码正确,并且足够简单,便于GUI管理。我很难设置传奇人物周围没有框架 下面是一个简单的示例(在条形图上的一些选项已经使用设置选项进行了自定义) 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.4

我正在为Mathematica中的各种绘图/图表创建一个应用程序。最终,它将拥有一个GUI,但第一步是使代码正确,并且足够简单,便于GUI管理。我很难设置传奇人物周围没有框架

下面是一个简单的示例(在
条形图
上的一些选项已经使用
设置选项
进行了自定义)

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]]
下面是我得到的:

尽管我可能会尝试,但我无法摆脱图例周围的边框。你可以看到,
legendeappearance
没有任何作用-我也尝试了一些其他方法

我不愿意手工编写小矩形,因为在最终的GUI中很难做到这一点。
ChartLabels
也不起作用,因为在图形的真实版本中,它已经被用于日期标签


有人有什么建议吗?

我找不到任何关闭框架的选项。的文档非常少,一般来说图例的样式没有得到太多讨论(请参阅[]和其中的链接)

我能想到的最简单的解决方案是手动修改图形。带有图例的图表生成图形对象。对于单个图例,生成的
标记的
对象看起来像
标记的[graphics[…],Framed[…],pos]
,所以您所需要做的就是删除
框架的
部分。这可以通过使用
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"]


也可以使用
Replace[bc,Framed[leg#]:>leg,{1}]
MapAt[Apply[Identity,#]&,bc,2]
或类似结构生成上述内容。如果您有更多标签或不同类型的图形对象,则不需要对代码进行太多修改。

您可以通过设置以下内容暂时全局终止框架:

SetOptions[Legending`GridLegend, Legending`LegendContainer -> Identity]
要恢复默认行为,请设置:

SetOptions[Legending`GridLegend, Legending`LegendContainer -> Automatic]
虽然没有给出的方法那么通用,但可能值得发布

使用
Part
,其中
bc
如Simon的定义:

给予


+1我正要提出同样的解决方案,但你的解决方案更完整。
LegendAppearance
这个名字所暗示的远不止它在实际中的作用。+1-感谢西蒙,第二个例子(使用
/。标签为[g,Framed[leg],pos]:>标签为[g,leg,pos]
)即使绘图本身有一个
框架,它也会做它应该做的事情。解决一般情况并看看是否可以在GUI中完成将是一件有趣的事情。@Simon
InputForm[bc]
,后面可能跟着
(InputForm[bc/{Framed[legend_]:>legend}[[1]]
,这有助于澄清您的解决方案工作的原因。
[[1]]
删除
InputForm[]
包装器。@David:替换规则(以及
Map
Apply
,等等)总是作用于表达式的
FullForm
。但是,是的,我确实使用了
InputForm[bc]
来查看发生了什么,以便构造我的答案。@sjoard感谢您的编辑!@Simon。(小结)。添加选项
FrameStyle->None
似乎也能起作用。您的方法可用于对图例外观进行相当微妙的控制。例如:
bc/。标记为[g,Framed[leg],pos\uz]:>标记为[g,Framed[leg,FrameStyle->None,RoundingRadius->10,Background->Yellow],pos].
谢谢。+1:对不起,我生病在家,只是刚刚开始检查它是否有效。它在v8上确实有效,这是我可以作为默认设置放在包中的一种东西。谢谢!非常非常有趣:
?Legending'*
(其中引号是反引号)给出一整串未记录的位和段。:AssembleGendContainer轮廓图例LegendImage LegendPane图例BubbleScale图例曲线LegendContainer LegendItemLayout LegendPosition LegendSize颜色梯度图例网格图例LegendHeading LegendLayout LegendGraphLegendSow@Verbeia谢谢你确认它有效,我希望这会有帮助。如果我听起来不耐烦,请原谅。我不是。相反,一个有效的解决方案通常在八小时后至少会得到一票,所以我想也许这个未记录的选项在版本8中被删除了。(顺便说一句,我认为您可以通过对代码块使用双反勾号来嵌入反勾号。让我试试:
?Legending`*
)+1关于倒勾问题,别担心,时区差异和相对较少的用户群体意味着有时会有一段时间什么都不会发生。我发现很难找到尚未得到很好回答的问题,因为大多数问题都是在澳大利亚就寝时提出来的。
SetOptions[Legending`GridLegend, Legending`LegendContainer -> Automatic]
bc[[2]] = bc[[2, 1]]; bc