如何在列中显示饼图的图例?
Posted
技术标签:
【中文标题】如何在列中显示饼图的图例?【英文标题】:How to display legend for Pie Chart in columns? 【发布时间】:2012-10-29 17:44:18 【问题描述】:我有一个包含许多部分的饼图,此饼图的图例呈现为一行。如何将图例呈现为两列?
【问题讨论】:
【参考方案1】:查看Legend Alignment 上的这个论坛帖子,也可以在 (web archive) 上查看。
看起来像您正在寻找的东西。如果没有,请发布更多信息或屏幕截图,说明您拥有什么和需要什么。
【讨论】:
不幸的是,这只适用于旧版本的 jfreechart...但至少它显示了如何为新版本的 jfc 创建另一个多列图例类。 :) +1 @brimborium 哦,我看到线程有几年的历史了,但我实际上并没有检查代码。我想仍然是朝着正确的方向前进 @moeTi:这里也一样,但是链接失效了。你能找到原件吗? @trashgod 在wayback machine 中找到并更新了原帖 @moeTi:谢谢!我用指向原始论坛主题的链接补充了您的网络存档链接。【参考方案2】:方法getLegendItem()
(见here)提供了在您选择的任何Container
中呈现图例项所需的所有信息。 GridLayout(0, 2)
将它们排列成两列,用于任意数量的行。要抑制现有图例,请在调用图表工厂时将legend
设置为false
;正如here建议的那样,这些项目仍然可用。
附录:基于PieChartDemo1
,此片段使用getLegendItems().iterator
和此ColorIcon
的变体。
public static JPanel createDemoPanel()
JPanel panel = new JPanel();
JFreeChart chart = createChart(createDataset());
panel.add(new ChartPanel(chart));
panel.add(createLegendPanel((PiePlot) chart.getPlot()));
return panel;
private static JPanel createLegendPanel(PiePlot plot)
JPanel panel = new JPanel(new GridLayout(0, 2, 5, 5));
Iterator iterator = plot.getLegendItems().iterator();
while (iterator.hasNext())
LegendItem item = (LegendItem) iterator.next();
JLabel label = new JLabel(item.getLabel());
label.setIcon(new ColorIcon(8, item.getFillPaint()));
panel.add(label);
return panel;
【讨论】:
还可以考虑使用PlotChangeListener
来更新图例面板。以上是关于如何在列中显示饼图的图例?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Kendo UI Charts 中禁用饼图的交互式图例?