当前位置: 首页 > 知识库问答 >
问题:

如何放大gagawa图形中的文本?

曾嘉荣
2023-03-14

我使用以下代码生成gagawa图表:

private Img createChart(LatencyHistogram current, LatencyHistogram baseLine) {

    Img image = null;
    final CategoryDataset dataset = fillDataSet(current, baseLine);

    final JFreeChart chart = ChartFactory.createBarChart(
            "Latecny histogram",       // chart title
            "Type",                    // domain axis label
            "Value",                   // range axis label
            dataset,                   // data
            PlotOrientation.VERTICAL,  // orientation
            true,                      // include legend
            true,                      // tooltips
            false                      // urls
    );
    chart.setBackgroundPaint(java.awt.Color.white);
    // save it to an image
    try {
        final ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

        String latency_graph = Constants.LATENCY_GRAPH_NAME;
        final String pathname = Constants.HTML_PAGES_PATH + "images/"+latency_graph;
        final File file1 = new File(pathname);
        ChartUtilities.saveChartAsPNG(file1, chart, 2200, 1000, info);
        image = new Img("latency", "../images/"+latency_graph).setWidth("1300");
        return image;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return image;
}

我得到这个图表:

如何放大文本(x轴、y轴、图例和标题)?

共有2个答案

翟高明
2023-03-14

也许这对你有帮助。

CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis axis = plot.getDomainAxis();

CategoryPlot p = chart.getCategoryPlot(); 
ValueAxis axis2 = p.getRangeAxis();

Font font = new Font("Dialog", Font.PLAIN, 25);
axis.setTickLabelFont(font);
Font font2 = new Font("Dialog", Font.PLAIN, 15);
axis2.setTickLabelFont(font2);

Font font3 = new Font("Dialog", Font.PLAIN, 25); 
plot.getDomainAxis().setLabelFont(font3);
plot.getRangeAxis().setLabelFont(font3);

根据这个问题,

翁鸿远
2023-03-14

JFreeChart(Javadoc)类似乎包含一个Font对象。很遗憾看到开发人员没有默认启用字体的修改,但无论如何,我是这样解决的...

class CustomChartFactory extends ChartFactory{ 
     public static JFreeChart createCustomBarChart(String title,
            String categoryAxisLabel, String valueAxisLabel,
            CategoryDataset dataset, PlotOrientation orientation,
            boolean legend, boolean tooltips, boolean urls, Font font) {

        ParamChecks.nullNotPermitted(orientation, "orientation");
        CategoryAxis categoryAxis = new CategoryAxis(categoryAxisLabel);
        ValueAxis valueAxis = new NumberAxis(valueAxisLabel);

         BarRenderer renderer = new BarRenderer();
        if (orientation == PlotOrientation.HORIZONTAL) {
            ItemLabelPosition position1 = new ItemLabelPosition(
                    ItemLabelAnchor.OUTSIDE3, TextAnchor.CENTER_LEFT);
            renderer.setBasePositiveItemLabelPosition(position1);
            ItemLabelPosition position2 = new ItemLabelPosition(
                    ItemLabelAnchor.OUTSIDE9, TextAnchor.CENTER_RIGHT);
            renderer.setBaseNegativeItemLabelPosition(position2);
        } else if (orientation == PlotOrientation.VERTICAL) {
            ItemLabelPosition position1 = new ItemLabelPosition(
                    ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER);
            renderer.setBasePositiveItemLabelPosition(position1);
            ItemLabelPosition position2 = new ItemLabelPosition(
                    ItemLabelAnchor.OUTSIDE6, TextAnchor.TOP_CENTER);
            renderer.setBaseNegativeItemLabelPosition(position2);
        }
        if (tooltips) {
            renderer.setBaseToolTipGenerator(
                    new StandardCategoryToolTipGenerator());
        }
        if (urls) {
            renderer.setBaseItemURLGenerator(
                    new StandardCategoryURLGenerator());
        }

        CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis,
                renderer);
        plot.setOrientation(orientation);
        JFreeChart chart = new JFreeChart(title, font,
                plot, legend);
        currentTheme.apply(chart);
       return chart;

   }
}

这实际上是撕下他们的整个源代码,在这里找到,并用构造函数中给定的字体对象替换默认字体对象。

对于您的代码,替换

final JFreeChart chart = ChartFactory.createBarChart(
            "Latecny histogram",       // chart title
            "Type",                    // domain axis label
            "Value",                   // range axis label
            dataset,                   // data
            PlotOrientation.VERTICAL,  // orientation
            true,                      // include legend
            true,                      // tooltips
            false                      // urls
    ); 

与:

Font customFont = new Font("SansSerif", Font.BOLD, 25);
final JFreeChart chart = CustomChartFactory.createBarChart(
            "Latecny histogram",       // chart title
            "Type",                    // domain axis label
            "Value",                   // range axis label
            dataset,                   // data
            PlotOrientation.VERTICAL,  // orientation
            true,                      // include legend
            true,                      // tooltips
            false,                     // urls
            customFont                 //font
);

应该做到这一点,假设你已经指定了(定制字体)。

作为参考,默认字体为

Static Final Font DEFAULT_TITLE_FONT = new Font("SansSerif", Font.BOLD, 18);

这样,整个图表基本上通过替换默认字体来使用相同的字体。SAHIL. R2050的答案也是有效的,尽管它确实要求图表的每个单独部分都设置了字体。

我的答案适合为所有自定义图表设置新的默认字体,而SAHIIL. R2050的答案更符合包的正确使用。SAHIL. R2050的答案还允许您指定每个部分的大小,而不是一次指定所有部分。

总结一下ChartFactory/CustomChartFactory,它真正做的就是创建一个ChartTheme,然后使用it的应用()方法将其应用到图表中。

希望这有帮助。:)

 类似资料:
  • 问题内容: 我正在尝试动态缩放文本,以将其放置在尺寸不同但已知的图像上。文本将用作水印。有什么方法可以根据图像尺寸缩放文本?我并不需要文字占据整个表面区域,而只是要使其足够可见即可,以使其易于识别且难以删除。我正在使用Python Imaging Library版本1.1.7。在Linux上。 我希望能够设置文本大小与图像大小的比率,比如说1/10大小。 我一直在寻找字体大小属性来更改大小,但是我

  • 问题内容: 如何更改图像尺寸以适合打印? 例如,我想使用A4纸,其横向尺寸为11.7英寸乘8.27英寸。 问题答案: 您需要提前创建matplotlib Figure和Axes对象,并指定图形的大小:

  • 问题内容: 我在向JPanel添加图形时遇到问题。如果我更改从panel.add(new graphics()); 到frame.add(new graphics()); 并且不要将JPanel添加到JFrame,黑色矩形会出现在JFrame上。我只是无法让黑色矩形出现在JPannel上,并且想知道是否有人可以帮助我。 问题答案: 自定义组件为0x0 px。

  • 我在向JPanel添加图形时遇到了问题。如果我从panel.add(new graphics())中更改行;添加(new graphics());并且不将JPanel添加到JFrame,黑色矩形将出现在JFrame上。我只是不能让黑色矩形出现在JPannel上,想知道是否有人能帮我做这件事。

  • 图形放置这款游戏是关于多项式增长和图形的增量游戏。

  • 如何更改图像的大小,使其适合打印? 例如,我想使用A4纸,其尺寸为横向11.7英寸乘8.27英寸。