gpt4 book ai didi

java - 图例标题在图表中未正确显示

转载 作者:行者123 更新时间:2023-12-02 10:53:52 30 4
gpt4 key购买 nike

我使用 JFreeChart API v1.5.0 创建了一个条形图,并向图表添加了带标题的图例。

我使用了这个 Bar Chart Demo 中的示例并将以下图例代码添加到示例中。

//Legend default properties
protected static final boolean LEGEND_ON = true;
private static final RectangleEdge LEGEND_POSITION = RectangleEdge.RIGHT;
private static final String LEGEND_TITLE_TEXT = "Legend";
private static final Font LEGEND_TITLE_FORMAT = new Font(Font.SANS_SERIF, Font.PLAIN, 12);
private static final Color LEGEND_TITLE_COLOR = Color.BLACK;
private static final double LEGEND_MAX_WIDTH = 0.0;
private static final Color LEGEND_BG_COLOR = Color.WHITE;
private static final Color LEGEND_BORDER_COLOR = Color.WHITE;
private static final Font LEGEND_TEXT_FORMAT = new Font(Font.SANS_SERIF, Font.PLAIN, 12);
private static final Color LEGEND_TEXT_COLOR = Color.BLACK;

LegendTitle legend = chart.getLegend();
legend.setPosition(LEGEND_POSITION);
legend.setWidth(LEGEND_MAX_WIDTH);
legend.setBackgroundPaint(LEGEND_BG_COLOR);
legend.setFrame(new BlockBorder(1, 1, 1, 1, LEGEND_BORDER_COLOR));
legend.setItemFont(LEGEND_TEXT_FORMAT);
legend.setItemPaint(LEGEND_TEXT_COLOR);

if (LEGEND_TITLE_TEXT != null) {
TextTitle legendTitle = new TextTitle();
legendTitle.setText(LEGEND_TITLE_TEXT);
legendTitle.setPosition(LEGEND_POSITION);
legendTitle.setPaint(LEGEND_TITLE_COLOR);
legendTitle.setFont(LEGEND_TITLE_FORMAT);
legendTitle.setHorizontalAlignment(HorizontalAlignment.CENTER);
legendTitle.setVerticalAlignment(VerticalAlignment.CENTER);
chart.addSubtitle(1, legendTitle);
}

当我运行示例以及上面的图例代码时,我得到以下输出。

Legend Title not upright

我确实注意到图例标题显示不正确,因为它在右侧的图例容器中垂直放置而不是水平放置(如下图所示的预期输出)。我确实尝试了几个步骤,例如使用 TextUtils.drawRotatedString() 和 TextUtils.drawAlignedString() 但无法修复图例标题位置及其对齐方式。

如何将图例标题放在图例容器顶部并水平对齐?

我正在寻找类似的图例标题输出,如下所示,它是使用不同的图表框架生成的。

Expected Output for legend title

我想对齐和定位我的图例标题,如上面的输出所示。

最佳答案

基于此 link 中提供的示例,我修改了代码,使用 BlockContainer 添加自定义图例,以获得所需的输出,如上面问题中的图 1 所示。

更新的代码:

//Legend default properties
pro tected static final boolean LEGEND_ON = true;
private static final RectangleEdge LEGEND_POSITION = RectangleEdge.RIGHT;
private static final String LEGEND_TITLE_TEXT = "Legend";
private static final Font LEGEND_TITLE_FORMAT = new Font(Font.SANS_SERIF, Font.PLAIN, 12);
private static final Color LEGEND_TITLE_COLOR = Color.BLACK;
private static final double LEGEND_MAX_WIDTH = 0.0;
private static final Color LEGEND_BG_COLOR = Color.WHITE;
private static final Color LEGEND_BORDER_COLOR = Color.WHITE;
private static final Font LEGEND_TEXT_FORMAT = new Font(Font.SANS_SERIF, Font.PLAIN, 12);
private static final Color LEGEND_TEXT_COLOR = Color.BLACK;

LegendTitle legend = chart.getLegend();
legend.setPosition(LEGEND_POSITION);
legend.setWidth(LEGEND_MAX_WIDTH);
legend.setBackgroundPaint(LEGEND_BG_COLOR);
legend.setFrame(new BlockBorder(1, 1, 1, 1, LEGEND_BORDER_COLOR));
legend.setItemFont(LEGEND_TEXT_FORMAT);
legend.setItemPaint(LEGEND_TEXT_COLOR);

if (LEGEND_TITLE_TEXT != null) {
TextTitle legendTitle = new TextTitle();
legendTitle.setText(LEGEND_TITLE_TEXT);
legendTitle.setPosition(LEGEND_POSITION);
legendTitle.setPaint(LEGEND_TITLE_COLOR);
legendTitle.setFont(LEGEND_TITLE_FORMAT);
legendTitle.setHorizontalAlignment(HorizontalAlignment.CENTER);
legendTitle.setVerticalAlignment(VerticalAlignment.CENTER);

BlockContainer legendCont = new BlockContainer(new ColumnArrangement());
legendCont.add(legendTitle, RectangleEdge.TOP);
BlockContainer items = legend.getItemContainer();
legendCont.add(items);
legend.setWrapper(legendCont);
//Remove existing legend to avoid duplicate legend display.
chart.removeLegend();
//show legend container with title and items
chart.addSubtitle(legend);
}

执行上述代码后,得到以下输出。

Legend Title Position Upright

关于java - 图例标题在图表中未正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58455148/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com