Java 条形图与线图的结合

Java 条形图与线图的结合,java,jfreechart,Java,Jfreechart,是否可以用直线绘制一个显示范围的条形图。下面的链接显示一个条形图 我已经用jfreechart开发了一个条形图,但是我不能像你在图中看到的那样在上面画一条线。 谁能给我一个解决办法吗 下面是我为开发条形图而编写的代码 公共类BarChartDemo_1扩展了ApplicationFrame{ public BarChartDemo_1(String title) { super(title); CategoryDataset dataset = createDataset(

是否可以用直线绘制一个显示范围的条形图。下面的链接显示一个条形图 我已经用jfreechart开发了一个条形图,但是我不能像你在图中看到的那样在上面画一条线。 谁能给我一个解决办法吗

下面是我为开发条形图而编写的代码

公共类BarChartDemo_1扩展了ApplicationFrame{

 public BarChartDemo_1(String title) {
     super(title);
     CategoryDataset dataset = createDataset();
     JFreeChart chart = createChart(dataset);
     ChartPanel chartPanel = new ChartPanel(chart, false);
     chartPanel.setPreferredSize(new Dimension(600, 380));
     setContentPane(chartPanel);
 }
静态类LabelGenerator扩展了StandardCategoryItemLabelGenerator{ 私有静态最终长serialVersionUID=1L

            @Override
            public String generateLabel(CategoryDataset categorydataset, int i, int j) {
                    return categorydataset.getRowKey(i).toString();
            }
    }
 /**
  * Returns a sample dataset.
  * 
   * @return The dataset.
   */
private static CategoryDataset createDataset() {


    String series1 = "Series";
    String category1 = "2012";
    String category2 = "2013";
    String category3 = "2014";
    String category4 = "2015";
    String category5 = "2016";
    String category6 = "2017";
    String category7 = "2018";
    String category8 = "2019";
    String category9 = "2020";

     DefaultCategoryDataset  dataset = new DefaultCategoryDataset ();
     dataset.addValue(916.6 ,"Results", category1);
     dataset.addValue(1099.9 ,"Results", category2);
     dataset.addValue(1404.9 ,"Results", category3);
     dataset.addValue(1819.4,"Results", category4);
     dataset.addValue(2388.7 ,"Results", category5);
     dataset.addValue(3179.7,"Results", category6);
     dataset.addValue(4291.5,"Results", category7);
     dataset.addValue(5872.9,"Results", category8);
     dataset.addValue(8149.5,"Results", category9);
    return dataset;

 }



 /**
 * Creates a sample chart.
  * 
 * @param dataset  the dataset.
  * 
  * @return The chart.
 */
private static JFreeChart createChart(CategoryDataset dataset) {

    ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
       BarRenderer.setDefaultBarPainter(new StandardBarPainter()); 
   // create the chart...
     JFreeChart chart = ChartFactory.createBarChart(
        "",       // chart title
        "Year",               // domain axis label
         "Revenue in $ million",                  // range axis label
         dataset,                  // data
        PlotOrientation.VERTICAL, // orientation
         true,                     // include legend
         true,                     // tooltips?
         false                     // URLs?
    );


    chart.setBackgroundPaint(Color.white);

     CategoryPlot plot = (CategoryPlot) chart.getCategoryPlot();

     plot.setBackgroundPaint(Color.white);
     plot.setDomainGridlinePaint(Color.white);
     plot.setDomainGridlinesVisible(true);
     plot.setRangeGridlinePaint(Color.white);

     final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
     rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());


    BarRenderer renderer = (BarRenderer) plot.getRenderer();
    renderer.setMaximumBarWidth(0.0380000000000000001D);


    ((BarRenderer)plot.getRenderer()).setBarPainter(new StandardBarPainter());
    renderer.setShadowVisible(false);
    renderer.setDrawBarOutline(false);
    renderer.setSeriesPaint(0,new Color(46,110,172));



    renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());


   renderer.setBaseItemLabelsVisible(true);
   ItemLabelPosition itemLabelPosition=new ItemLabelPosition(ItemLabelAnchor.INSIDE12, TextAnchor.CENTER_RIGHT, TextAnchor.CENTER_RIGHT,-1.5707963267948966D);
   renderer.setBaseItemLabelPaint(Color.WHITE);
   renderer.setBasePositiveItemLabelPosition(itemLabelPosition);
   CategoryAxis domainAxis = plot.getDomainAxis();
   domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);
收益表

 }

public static void main(String[] args) {
  BarChartDemo1 demo = new BarChartDemo1("Bar Chart Demo_1");
  demo.pack();
  RefineryUtilities.centerFrameOnScreen(demo);
  demo.setVisible(true);
 }
}


这就是我创建条形图的方式。但我不知道如何在其中组合线图。无法开发所提到的图形。请大家帮助我。

有人能帮我吗?试试CategoryLineAnnotation。@trashgod感谢它非常有帮助。我能够使用CategoryLineAnnotation绘制虚线,但我I’我不知道如何在行尾画一个箭头。你有CategoryLineAnnotation的源代码,为什么不尝试添加几行Java2D代码,将箭头添加到行尾?阅读BasicStroke的文档,你会发现其中没有用于在行尾添加箭头和装配的内容是的。然后研究一下Graphics2D的文档,你会发现它有画线条和形状的方法,只要有点想象力,你就可以用这些方法在线条的末端画一个箭头。老实说,在某个时候你需要做一些工作,而不是指望别人给你填鸭式的解决方案。