6

我希望堆叠条中颜色的垂直排列与图表图例中的颜色排列相匹配。但无论我尝试什么,它们都不匹配。这是情况

BarChart[{{5, 37, 56}, {22, 49, 28}, {31, 60, 10}},
   ChartLayout -> "Percentile",
   ChartLegends -> Placed[{"1-Volume", "2-Area", "3-Length"}, Right],
   ChartLabels -> {{"Before", "During", "After"}, None}]

图1

在现实世界的例子中,图例有更多的条目(6),所以如果图例颜色的顺序与条形图中的顺序相匹配会很好。我意识到我可以将 设置ChartLegends为显示在Bottom,但考虑到许多图例条目,看起来并不好。

此外,反转图例列表也无法按预期工作。图例的文本重新排序,但颜色没有重新排序(见下文),因此图例标题不再与图表中的数据匹配。

更改数据(或数据和图例项)的顺序也不起作用。

有什么建议么?

在此处输入图像描述

4

3 回答 3

10
BarChart[{{5, 37, 56}, {22, 49, 28}, {31, 60, 10}}, 
  ChartLayout -> "Percentile", 
  ChartLegends -> {"1-Volume", "2-Area", "3-Length"}, 
  ChartLabels -> {{"Before", "During", "After"}, None}] /. 
 Column[List[a : Grid[List[___]] ..]] :> Column[Reverse@List@a]

在此处输入图像描述

编辑

FullForm当您想弄乱图形/图表/绘图内部时,请记住使用

于 2011-09-19T21:36:22.597 回答
6

建立在Belisarius给出的好答案的基础上,一种替代方法使用Part

bc[[2,1,1,1]]= Reverse@bc[[2,1,1,1]];bc

这可以从FullForm

Position[bc, #, Infinity]& /@ {Framed[___],
Column[___],List[___,"1-Volume",___]}

或者来自其中任何一个,也许是反复试验。

虽然不是问题的一部分,但Simon的把戏(见此处)可用于进一步操纵传说。

bc/.Labeled[g_,Framed[leg_],pos_]:>
Labeled[g,Framed[leg,FrameStyle->Orange,RoundingRadius->10,
Background->LightYellow],pos]

例如,给出以下内容:

在此处输入图像描述

Part也可以用来移除图例周围的框架(参见这个问题),但Simon的方法更加通用。

bc[[2]]=bc[[2,1]];bc
于 2011-09-20T10:03:16.733 回答
2

你可以用LegendContainer这个。

SetOptions[Legending`GridLegend, 
  Legending`LegendContainer -> (Framed@MapAt[Reverse, #, {1, 1}] &)];

BarChart[{{5, 37, 56}, {22, 49, 28}, {31, 60, 10}}, 
 ChartLayout -> "Percentile", 
 ChartLegends -> {"1-Volume", "2-Area", "3-Length"}, 
 ChartLabels -> {{"Before", "During", "After"}, None}]

与贝利撒留的图表相同

于 2011-10-19T00:35:17.630 回答