2009-09-07 10 views
5

मैं एक बार-चार्ट बनाना चाहता हूं, लेकिन असाधारण उच्च मूल्यों को छोटा किया जाना चाहिए।मैं जेएफरी चार्ट के साथ बार-चार्ट कैसे बना सकता हूं, जो एक दृश्य संकेत के साथ बहुत लंबे सलाखों को छोटा करता है?

shortened graph http://www.epa.gov/recovery/images/bar-chart.gif

मुझे आशा है कि यह स्पष्ट है कि मैं क्या करना चाहते हैं: एक उदाहरण इस छवि है।

मेरा प्रश्न है: मैं इसे JFreeChart के साथ कैसे कर सकता हूं। यदि JFreeChart के साथ यह संभव नहीं है तो आप संभवतः ऐसे आउटपुट का उत्पादन करने के लिए वैकल्पिक ओपन-सोर्स जावा-लाइब्रेरीज़ की अनुशंसा कर सकते हैं।

उत्तर

11

आप इसे CombinedDomainCategoryPlot या CombinedDomainXYPlot के साथ कर सकते हैं। अपने कट ऑफ वैल्यू पर पहली साजिश की रेंज अक्ष सेट करें और फिर दूसरी साजिश के साथ कुछ ऐसा करें। फिर उन्हें एक संयुक्त साजिश में जोड़ें।

import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartFrame; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.plot.CategoryPlot; 
import org.jfree.chart.plot.CombinedDomainCategoryPlot; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.data.category.DefaultCategoryDataset; 

public class PlayChart { 

    public static void main(String[] args) { 


     DefaultCategoryDataset ds = new DefaultCategoryDataset(); 
     ds.addValue(100, "A", "A"); 
     ds.addValue(200, "A", "B"); 
     ds.addValue(400, "A", "C"); 
     ds.addValue(500, "A", "D"); 
     ds.addValue(2000, "A", "E"); 


     JFreeChart bc = ChartFactory.createBarChart("My Bar Chart", "Things", "Counts", ds, PlotOrientation.VERTICAL, true, false, false); 
     JFreeChart bcTop = ChartFactory.createBarChart("My Bar Chart", "Things", "Counts", ds, PlotOrientation.VERTICAL, true, false, false); 

     CombinedDomainCategoryPlot combinedPlot = new CombinedDomainCategoryPlot(); 
     CategoryPlot topPlot = bcTop.getCategoryPlot(); 
     NumberAxis topAxis = (NumberAxis) topPlot.getRangeAxis(); 
     topAxis.setLowerBound(1500); 
     topAxis.setUpperBound(2000); 

     combinedPlot.add(topPlot, 1); 
     CategoryPlot mainPlot = bc.getCategoryPlot(); 
     combinedPlot.add(mainPlot, 5); 

     NumberAxis mainAxis = (NumberAxis) mainPlot.getRangeAxis();; 
     mainAxis.setLowerBound(0); 
     mainAxis.setUpperBound(600); 

     JFreeChart combinedChart = new JFreeChart("Test", combinedPlot); 

     ChartFrame cf = new ChartFrame("Test", combinedChart); 
     cf.setSize(800, 600); 
     cf.setVisible(true); 

    } 

} 

भूखंड एक ही एक्स-अक्ष साझा करेंगे। रंग और लेबल सेट करने के लिए आपको प्रस्तुतकर्ताओं के साथ खेलना होगा।

हटाया मृत ImageShack लिंक

+0

बढ़िया है, कि बिल्कुल के रूप में की कामना की लग रही है, तेजी से मदद के लिए धन्यवाद। – Mnementh

+0

मुझे पता है कि यह बहुत समय पहले था, लेकिन यह एक अविश्वसनीय रूप से पूर्ण जवाब है। –

0

मुझे यकीन नहीं है कि आप JFreeChart में ऐसा कर सकते हैं।

एक समाधान (जो अच्छा नहीं है) एक छवि को चार्ट प्रस्तुत करना है और उसके बाद RenderedImage का उपयोग करके छवि को एक रूप में (इसे काट लें), और JFreeChart के रूप में नहीं है। दुर्भाग्यवश यह दर्द का थोड़ा सा होने वाला है क्योंकि आप शायद वाई-अक्ष आदि पर किसी विशेष स्थान पर काटना चाहते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे