Можно ли удалить рамку на легенде BarChart?
Я создаю приложение для различных видов рисования графиков в Mathematica. В конечном счете, он будет иметь графический интерфейс, но первый шаг - сделать код правильным и достаточно простым для управления графическим интерфейсом. У меня возникают трудности с установлением легенд, чтобы они не имели рамок.
Вот минимальный пример (с некоторыми опциями на 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
ничего не делает - я тоже попробовал несколько других подходов.
Я не хочу кодировать маленькие прямоугольники вручную, потому что это будет очень трудно сделать правильно в конечном графическом интерфейсе. ChartLabels
тоже не сработает, потому что это уже используется для меток даты в реальной версии графика.
У кого-нибудь есть предложения?
3 ответа
Вы можете временно, глобально убить кадр, установив:
SetOptions[Legending`GridLegend, Legending`LegendContainer -> Identity]
Чтобы восстановить поведение по умолчанию, установите:
SetOptions[Legending`GridLegend, Legending`LegendContainer -> Automatic]
Я не могу найти какие-либо варианты, чтобы выключить кадр. Документация для LegendAppearance довольно минимальна, и стиль легенды вообще не получает большого обсуждения (см. [ 2] и ссылки внутри).
Самое простое решение, которое я могу придумать, - это вручную изменить графику. Диаграммы с легендами создают помеченные графические объекты. Для одной легенды, 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]
или аналогичные конструкции. Изменение кода не займет много времени, если у вас есть больше меток или различных типов графических объектов.