Java JFreeChart中图表上方的网格线

Java JFreeChart中图表上方的网格线,java,jfreechart,bar-chart,Java,Jfreechart,Bar Chart,是否可以检索条形图的所有rangeAxis值?我已设法绘制新的网格线(标记),如下所示: 但我需要知道哪些值是图表在值轴上显示的,才能画出所有的线。有没有关于如何获取“值”-轴(RangeAxis)上的所有值的想法 公共类BarChartDemo扩展了ApplicationFrame{ /** *创建一个新的演示实例。 * *@param title框架标题。 */ 公共条形图演示(最终字符串标题){ 超级(标题); final CategoryDataset dataset=createDa

是否可以检索条形图的所有rangeAxis值?我已设法绘制新的网格线(标记),如下所示:

但我需要知道哪些值是图表在值轴上显示的,才能画出所有的线。有没有关于如何获取“值”-轴(RangeAxis)上的所有值的想法

公共类BarChartDemo扩展了ApplicationFrame{
/**
*创建一个新的演示实例。
*
*@param title框架标题。
*/
公共条形图演示(最终字符串标题){
超级(标题);
final CategoryDataset dataset=createDataset();
最终JFreeChart图表=createChart(数据集);
最终图表面板图表面板=新图表面板(图表);
chartPanel.setPreferredSize(新尺寸(500270));
setContentPane(图表面板);
}
/**
*返回一个示例数据集。
* 
*@返回数据集。
*/
私有类别数据集createDataset(){
//行键。。。
最终字符串序列1=“第一”;
//列键。。。
最终字符串类别1=“类别1”;
最终字符串类别2=“类别2”;
最终字符串类别3=“类别3”;
//创建数据集。。。
最终DefaultCategoryDataset数据集=新的DefaultCategoryDataset();
dataset.addValue(3.5,系列1,类别1);
dataset.addValue(4.0,系列1,类别2);
dataset.addValue(3.0,系列1,类别3);
返回数据集;
}
/**
*创建一个示例图表。
* 
*@param-dataset是数据集。
* 
*@返回图表。
*/
私有JFreeChart createChart(最终类别数据集数据集){
//创建图表。。。
最终JFreeChart图表=ChartFactory.createBarChart(
“条形图演示”,//图表标题
“类别”,//域轴标签
“值”,//范围轴标签
数据集,//数据
PlotOrientation.VERTICAL,//方向
false,//包含图例
false,//工具提示?
错误//URL?
);
CategoryPlot=chart.getCategoryPlot();
plot.getDomainAxis().setCategoryMargin(.01);
plot.setRangeGridlinesVisible(false);

对于(int i=1;i您似乎能够以类似于此域的方式利用
addRangeMarker()
。匹配标记和勾号单位的一种方法是指定一个包含您所选标记的
TickUnitSource

NumberAxis range = (NumberAxis) plot.getRangeAxis();
range.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

如果您需要自定义源,可以在或上对其建模。

无法理解如何以“好”的方式进行建模。制作了一个步骤方法,以了解当前图表最大值的线条放置位置:

private static double getGridStep(double max){
        double step = 0;
        if(max > 86){
            step = 10;
        }
        else if(max >= 30){
            step = 5;
        }
        else if(max > 17){
            step = 2.5;
        }
        else if(max > 7){
            step = 1;
        }
        else if(max > 2){
            step = 0.5;
        }
        else if(max > 1){
            step = 0.25;
        }
        else
            step = 0.1;
        return step;
}

您是否尝试过启用跟踪,如图所示?尝试过,但它似乎基于“ChartPanel”这似乎是一个JPanel。但我想用iText将其直接绘制到pdf。请编辑您的问题以澄清此用法,并包括一个显示您尝试了什么
标记的示例;请参阅演示。啊,我想您可以使用
addRangeMarker()
setDrawAsLine
,类似于域示例。您可以查看
CategoryPlot@draw()
调用
draw*Gridlines
。谢谢!现在已使用
addRangeMarker()
成功绘制线条。已编辑问题的其余部分。
private static double getGridStep(double max){
        double step = 0;
        if(max > 86){
            step = 10;
        }
        else if(max >= 30){
            step = 5;
        }
        else if(max > 17){
            step = 2.5;
        }
        else if(max > 7){
            step = 1;
        }
        else if(max > 2){
            step = 0.5;
        }
        else if(max > 1){
            step = 0.25;
        }
        else
            step = 0.1;
        return step;
}