2016-04-22 8 views
2

Я хотел бы персонализировать свою метку данных в моей круговой диаграмме, потому что в моей легенде я вижу данные = значение, в метке я вижу данные = значение. Как я могу видеть только данные имени в легенде и значении в ярлыке? мой код краски диаграмма это:jfree chart custom label

public JfreeChart(String applicationTitle, String chartTitle)throws SQLException { 
    super(applicationTitle); 
    JFreeChart barChart = null; 
    dataset=createDataset(conn,barChart); 


    barChart = ChartFactory.createPieChart(chartTitle,dataset, true, true, false); 
    ChartPanel chartPanel = new ChartPanel(barChart); 
    PiePlot plot = new PiePlot(dataset); 
    plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12)); 
    plot.setNoDataMessage("No data available"); 
    plot.setCircular(true); 
    plot.setLabelGap(0.02); 

    chartPanel.setPreferredSize(new java.awt.Dimension(560, 367)); 
    setContentPane(chartPanel); 
    try { 
     ChartUtilities.saveChartAsPNG(new File("directory"), barChart, 600,450); 
     writeChartToPDF(barChart, 600, 450,"C:\\Users\\axs0552\\Desktop\\grafico.pdf"); 
    } catch (IOException ex) { 
     System.out.println(ex.getLocalizedMessage()); 
    } 
} 

public static void writeChartToPDF(JFreeChart chart, int width, int height, 
     String fileName) { 
    PdfWriter writer = null; 

    Document document = new Document(); 

    try { 
     writer = PdfWriter.getInstance(document, new FileOutputStream(
       fileName)); 
     document.open(); 
     PdfContentByte contentByte = writer.getDirectContent(); 
     PdfTemplate template = contentByte.createTemplate(width, height); 
     Graphics2D graphics2d = template.createGraphics(width, height,new DefaultFontMapper()); 
     Rectangle2D rectangle2d = new Rectangle2D.Double(0, 0, width,height); 

     chart.draw(graphics2d, rectangle2d); 

     graphics2d.dispose(); 
     contentByte.addTemplate(template, 0, 0); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    document.close(); 
} 

и мой круговая диаграмма такова:

pieCart

ответ

1

Отсутствует ваша реализация createDataset(), я предполагаю, что проблема исходит от key передан в метод setValue() вашего DefaultPieDataset. Вместо этого используйте символ MessageFormat{1} для создания пользовательского StandardPieSectionLabelGenerator, как показано на рисунке here.

PiePlot plot = (PiePlot) chart.getPlot(); 
PieSectionLabelGenerator gen = new StandardPieSectionLabelGenerator("{0} = {1}"); 
plot.setLabelGenerator(gen); 

image

Затем вы можете игнорировать нежелательные символы из вашей реализации createDataset() держать их из legend запрошенных в вашем вызове ChartFactory.createPieChart().

+0

О, спасибо !!! это работа perfeclty! благодаря! – skatedan

+0

Рад помочь; Вперед, вы можете принять этот ответ, щелкнув по [пустой галочке] (http://meta.stackoverflow.com/a/5235/163188) слева. – trashgod

+0

на другом месте, можно щелкнуть раздел и просмотреть другой график (например, LineChart), чтобы просмотреть более подробную информацию? – skatedan

Смежные вопросы