如何在列中显示饼图的图例?

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 来更新图例面板。

以上是关于如何在列中显示饼图的图例?的主要内容,如果未能解决你的问题,请参考以下文章

Flex 3.0:在饼图的图例中显示数据

如何在 Kendo UI Charts 中禁用饼图的交互式图例?

如何减小 Kendo UI 饼图的大小?

饼状图表标题怎么修改

饼图图例未显示 - 未捕获的类型错误:无法将属性“innerHTML”设置为 null

使用matplotlib绘制定制化饼图(图例比例标签支持中文等)