मैं JFreeChart का उपयोग करके जावा में TimeSeries डेटा ग्राफ़ करने का प्रयास कर रहा हूं, हालांकि डेटा में डबल्स होते हैं जो Renjin. TimeSeries में डेटा जोड़ने का कोड इस प्रकार है:

for (int i=0; i<series2Values.length; i++) {
    if (!Double.isNaN(series2Values[i])) {
        series2.add(new Hour((int)times[i], new Day()), series2Values[i]);
    } else {
        series2.add(new Hour((int)times[i], new Day()), null);
    }
}

final TimeSeriesCollection dataset2 = new TimeSeriesCollection();
dataset2.addSeries(series2);

JFreeChart chart2 = ChartFactory.createTimeSeriesChart(title, "Time (Hour)", "Vehicles Parked", dataset2, true, true, false);
ChartFrame frame2 = new ChartFrame(title, chart2, false);
frame2.pack();
frame2.setIconImage(img.getImage());
frame2.setVisible(true);

समस्या यह है कि जब भी डेटा का रेखांकन किया जाता है, तो X अक्ष पर समय 24 घंटे के सैन्य समय में प्रदर्शित होता है, और यदि time[] सरणी में कोई डुप्लिकेट मान होता है, तो निम्न SeriesException फेंक दिया जाता है:

Exception in thread "AWT-EventQueue-0" org.jfree.data.general.SeriesException: You are attempting to add an observation for the time period [6,12/7/2016] but the series already contains an observation for that time period. Duplicates are not permitted.  Try using the addOrUpdate() method.

अपवाद द्वारा सुझाई गई addOrUpdate() विधि उस समय के लिए पहले डेटा बिंदु को नया बनाने के बजाय 12 घंटे पहले ही अधिलेखित कर देगी। मैं इसके बजाय 12 घंटे के प्रारूप में डेटा प्रदर्शित करना चाहता हूं जिसमें एएम और पीएम दिखाया गया है।

क्या JFreeChart के साथ ऐसा करने का कोई सुविधाजनक तरीका है, या कोड को बदलना अधिक सुविधाजनक होगा ताकि Renjin पर मेरी कॉल 1 और 24 के बीच केवल सादे पूर्णांकों के बजाय कुछ स्वरूपित हो जाए? (उदाहरण के लिए पहले से ही स्वरूपित समय तार)?

यहां क्रॉस-पोस्ट किया गया।

2
jstrieb 12 जुलाई 2016, 17:21

1 उत्तर

सबसे बढ़िया उत्तर

मैं Renjin से परिचित नहीं हूं, लेकिन से मिलीसेकंड का प्रतिनिधित्व करने वाला एक Date मान मान रहा हूं। युग,

  1. { का प्रयोग करें setDateFormatOverride() अक्ष पर उपयुक्त SimpleDateFormat, उदा

    axis.setDateFormatOverride(new SimpleDateFormat("hh:mm"));
    
  2. TimeSeries " जाएगा सुनिश्चित करें ... कि प्रत्येक अवधि श्रृंखला में अधिकतम एक बार दिखाई दे।" यदि आने वाले मूल्य को सही ढंग से परिवर्तित किया जाता है तो यह विवादास्पद हो जाना चाहिए।

2
trashgod 13 जुलाई 2016, 17:30
1
बहुत अच्छा काम किया, मुझे कुछ कास्टिंग करनी पड़ी और यह कोड की अंतिम पंक्ति थी जिसका मुझे उपयोग करना था ((DateAxis)chart2.getXYPlot().getDomainAxis()).setDateFormatOverride(new SimpleDateFormat("hh:mm a"));
 – 
jstrieb
13 जुलाई 2016, 17:30