Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFreeChart |如何将百分比添加到每个条的顶部并格式化域轴(X轴)标签?_Java_Jfreechart - Fatal编程技术网

Java JFreeChart |如何将百分比添加到每个条的顶部并格式化域轴(X轴)标签?

Java JFreeChart |如何将百分比添加到每个条的顶部并格式化域轴(X轴)标签?,java,jfreechart,Java,Jfreechart,我正在使用,下面是我开发的图表的截图和相关代码 private void getBarChart(列表数据){ JFreeChart barChart=ChartFactory.createBarChart(“,”,”,createDataset(数据),PlotOrientation.VERTICAL,false,true,false); CategoryPlot=条形图。getCategoryPlot(); plot.getRenderer().setSeriesPaint(0,新颜色(7

我正在使用,下面是我开发的图表的截图和相关代码

private void getBarChart(列表数据){
JFreeChart barChart=ChartFactory.createBarChart(“,”,”,createDataset(数据),PlotOrientation.VERTICAL,false,true,false);
CategoryPlot=条形图。getCategoryPlot();
plot.getRenderer().setSeriesPaint(0,新颜色(7,43,97));
条形图.getCategoryPlot().getRangeAxis().setLowerBound(0);
条形图.getCategoryPlot().getRangeAxis().setUpperBound(1);
NumberAxis xAxis2=(NumberAxis)条形图。getCategoryPlot().getRangeAxis();
setNumberFormatOverride(NumberFormat.getPercentInstance());
plot.getRenderer().setSeriesItemLabelGenerator(0,新的StandardCategoryItemLabelGenerator());
plot.getRenderer().setSeriesItemLabelsVisible(1,true);
plot.getRenderer().setBaseItemLabelsVisible(true);
plot.getRenderer().setBaseSeriesVisible(true);
barChart.getCategoryPlot().setRenderer(plot.getRenderer());
setDefaultBarPainter(新的StandardBarPainter());
((Ballenderer)plot.getRenderer()).SetBarPaint(新的StandardBarPainter());
BuffereImage=新的BuffereImage(650250,BuffereImage.TYPE_INT_ARGB);
Graphics2D g2=image.createGraphics();
g2.setRenderingHint(JFreeChart.KEY\u SUPPRESS\u SHADOW\u GENERATION,true);
矩形r=新矩形(0,0,650,250);
条形图绘制(g2,r);
BuffereImage chartImage=barChart.createBuffereImage(600400,空);
}
预期的图表应该如下所示。

问题1。)如何按照预期的图形格式化x轴标签?(条形图中的CategoryLables或TickLabels.getCategoryPlot().getDomainAxis())

问题2。)每个栏顶部显示的值(序列项标签)需要使用类似于y轴的百分比标记(%)进行格式化。(我还认为,就像我在xAxis2.setNumberFormatOverride中所做的那样,这些值将自动乘以100%。现在它只显示十进制值)。如何做到这一点

请帮帮我。谢谢。

1)以下行启用具有上升坡度的轴标签:

CategoryAxis domainAxis = plot.getDomainAxis();  
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
45表示角度,向上表示从左下到右上的方向。您还可以使用定义任意角度(例如22.5°)

需要注意的是,
CreateUptationLabelPositions
需要以弧度为单位的角度

2) 下一行以百分比为单位格式化系列0的条形标签

DecimalFormat labelFormat = new DecimalFormat("##0.0 %");
labelFormat.setMultiplier(100);
plot.getRenderer().setSeriesItemLabelGenerator(0, new StandardCategoryItemLabelGenerator("{2}", labelFormat));
plot.getRenderer().setSeriesItemLabelsVisible(0, true);
其中{0}=系列,{1}=类别,{2}=值

您也可以定义自己的标签生成器,例如:

class CstmStandardCategoryItemLabelGenerator extends StandardCategoryItemLabelGenerator {

    @Override
    public String generateLabel(CategoryDataset dataset, int row, int column) {
        return String.format("%.1f %%", dataset.getValue(row, column).doubleValue() * 100.0);
    }
}
可简单地按如下方式使用:

plot.getRenderer().setSeriesItemLabelGenerator(0, new CstmStandardCategoryItemLabelGenerator());
这导致:

从以下备选方案开始工作、更新,如下所示

  • 如图和所示,您可以在域轴上调用
    setCategoryLabelPositions()
    ,并使用
    CategoryLabelPositions.CreateUptationLabelPositions
    微调角度。下面的示例逆时针旋转π/4弧度或45°

    CategoryAxis domainAxis = plot.getDomainAxis();
    domainAxis.setCategoryLabelPositions(
        CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 4.0));
    
  • 如图所示,您可以构造一个自定义的
    StandardCategoryItemLabelGenerator
    ,但您可能需要使用ArgumentIndex,该值占列总数的百分比,以及合适的
    NumberFormat

    renderer.setDefaultItemLabelGenerator(
        new StandardCategoryItemLabelGenerator(
            "{3}", NumberFormat.getPercentInstance()));
    renderer.setDefaultItemLabelsVisible(true);
    

  • 这正是我要找的。谢谢你,伙计!
    CategoryAxis domainAxis = plot.getDomainAxis();
    domainAxis.setCategoryLabelPositions(
        CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 4.0));
    
    renderer.setDefaultItemLabelGenerator(
        new StandardCategoryItemLabelGenerator(
            "{3}", NumberFormat.getPercentInstance()));
    renderer.setDefaultItemLabelsVisible(true);