2013-10-29 113 views
1

我使用jfree图来绘制一些定位点。jfree图在图像上绘制阴谋

问题是该图是绘制在灰色表面上而不是我的平面图上。所以我试图使用背景图片,但是这会将图片置于背景中,并且因为我需要它而不可用。

我想用图像替换灰色背景。我怎样才能做到这一点?

我使用ChartPanel在它上面绘制图表。问题是,这只允许颜色作为背景和图像。我试图将图片设置为图表,如下面的代码中所示,但这只设置背景图像并在灰色区域的前景中绘制图表。

JFreeChart chart = ChartFactory.createScatterPlot("XY Chart", // Title 
       "x-axis", // x-axis Label 
       "y-axis", // y-axis Label 
       dataset, // Dataset 
       PlotOrientation.VERTICAL, // Plot Orientation 
       false, // Show Legend 
       false, // Use tooltips 
       false // Configure chart to generate URLs? 
       );  
BufferedImage image = null; 
     try { 
      File url = new File(System.getProperty("user.dir").toString()+"\\1.jpg"); 
      image = ImageIO.read(url); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     chart.setBackgroundImage(image); 
+0

你应该为你的问题添加更多细节,包括你的一些代码和一个截图,如果你能得到一个,更好地解释你期望得到的东西。 – Brian

+0

我认为你正在绘制面板。尝试设置面板的背景,然后绘制它。 –

回答

0

我试着了JFreeChart 1.0.19。当你想避免灰色背景更改图形窗口的透明度有助于(注意行chart.getPlot().setBackgroundAlpha(0);):

public class MyChart extends ApplicationFrame { 
    public MyChart() throws Exception { 
     super("My Chart"); 

     final XYSeries series1 = new XYSeries("First"); 
     series1.add(1.0, 1.0); 
     series1.add(2.0, 4.0); 
     series1.add(3.0, 3.0); 

     final XYSeriesCollection dataset = new XYSeriesCollection(); 
     dataset.addSeries(series1); 

     JFreeChart chart = ChartFactory.createScatterPlot("XY Chart", // Title 
       "x-axis", // x-axis Label 
       "y-axis", // y-axis Label 
       dataset, // Dataset 
       PlotOrientation.VERTICAL, // Plot Orientation 
       false, // Show Legend 
       false, // Use tooltips 
       false // Configure chart to generate URLs? 
     ); 
     BufferedImage image = null; 
     File url = new File("/home/me/Pictures/test.png"); 
     image = ImageIO.read(url); 
     chart.setBackgroundImage(image); 
     chart.getPlot().setBackgroundAlpha(0); 

     final ChartPanel chartPanel = new ChartPanel(chart); 
     chartPanel.setPreferredSize(new java.awt.Dimension(500, 270)); 
     setContentPane(chartPanel); 
    } 

    public static void main(String args[]) throws Exception { 
     final MyChart myChart = new MyChart(); 
     myChart.pack(); 
     RefineryUtilities.centerFrameOnScreen(myChart); 
     myChart.setVisible(true); 
    } 
} 

有了这一招我已经得到的援助:

screenshot