Ver*_*eia 7 charts wolfram-mathematica bar-chart
我正在为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]]
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
尽我所能,我无法摆脱传说中的边界.你可以看到LegendAppearance
它什么也没做 - 我也尝试过其他一些方法.
我不愿意手工编写小矩形代码,因为在最终的GUI中很难做到这一点.ChartLabels
也不会工作,因为它已经被用于图表真实版本中的日期标签.
有没有人有什么建议?
Sim*_*mon 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"]
Run Code Online (Sandbox Code Playgroud)
bc /. Labeled[g_, Framed[leg_], pos_] :> Labeled[g, leg, pos]
Run Code Online (Sandbox Code Playgroud)
以上还可以使用产生Replace[bc, Framed[leg_] :> leg, {1}]
或MapAt[Apply[Identity, #] &, bc, 2]
或类似结构.如果您有更多标签或不同类型的图形对象,则修改代码不会花费太多.
您可以通过设置临时,全局杀死帧:
SetOptions[Legending`GridLegend, Legending`LegendContainer -> Identity]
Run Code Online (Sandbox Code Playgroud)
要恢复默认行为,请设置:
SetOptions[Legending`GridLegend, Legending`LegendContainer -> Automatic]
Run Code Online (Sandbox Code Playgroud)