Mathematica:我可以将BarChart Legend与叠加的条形图相匹配吗?

Dav*_*idC 6 wolfram-mathematica bar-chart mathematica-8

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

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}]
Run Code Online (Sandbox Code Playgroud)

Chart1

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

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

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

有什么建议?

在此输入图像描述

Dr.*_*ius 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]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑

FullForm当你想搞乱图形/图表/情节内部时,请记得使用

  • @David尝试以下`Barchart [....] // FullForm`并几乎在最后看看Column命令:) (2认同)

tom*_*omd 6

基于Belisarius给出的一个很好的答案,一种替代方法Part

bc[[2,1,1,1]]= Reverse@bc[[2,1,1,1]];bc
Run Code Online (Sandbox Code Playgroud)

这可以从FullForm和 推断出来

Position[bc, #, Infinity]& /@ {Framed[___],
Column[___],List[___,"1-Volume",___]}
Run Code Online (Sandbox Code Playgroud)

或者从这些中的任何一个,也许和试错.

虽然不是问题的一部分,但西蒙的伎俩(见这里)可能会被用来进一步操纵传说.

bc/.Labeled[g_,Framed[leg_],pos_]:>
Labeled[g,Framed[leg,FrameStyle->Orange,RoundingRadius->10,
Background->LightYellow],pos]
Run Code Online (Sandbox Code Playgroud)

例如,给出以下内容:

在此输入图像描述

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

bc[[2]]=bc[[2,1]];bc
Run Code Online (Sandbox Code Playgroud)