JFreeChart একটি শক্তিশালী লাইব্রেরি যা Java-তে ডেটা ভিজ্যুয়ালাইজেশন এবং চার্ট তৈরি করতে ব্যবহৃত হয়। যখন আপনি রিয়েল-টাইম ডেটা প্রদর্শন করতে চান, তখন Real-time Data Interaction বা Dynamic Data Update ব্যবহার করতে হয়। এই গাইডে, আমরা দেখব কিভাবে JFreeChart ব্যবহার করে রিয়েল-টাইম ডেটা চার্টে প্রদর্শন করা যায়, যেখানে ডেটা আপডেট হয় এবং তা চার্টে প্রতিফলিত হয়।
1. Real-time Line Chart Example
আমরা প্রথমে একটি Line Chart তৈরি করব, যা রিয়েল-টাইম ডেটা (যেমন স্টক প্রাইস, সিস্টেমের পারফরম্যান্স, বা সেন্সর ডেটা) আপডেট করবে।
উদাহরণ: Real-time Line Chart with Dynamic Data Update
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class RealTimeLineChartExample {
private static TimeSeries series;
public static JPanel createChartPanel() {
// TimeSeries তৈরি করা, যেখানে রিয়েল-টাইম ডেটা থাকবে
series = new TimeSeries("Real-time Data");
TimeSeriesCollection dataset = new TimeSeriesCollection(series);
// Line Chart তৈরি করা
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Real-time Data", // Chart Title
"Time", // X-Axis Label
"Value", // Y-Axis Label
dataset, // Dataset
true, // Show Legend
true, // Tooltips
false // URLs
);
// Chart Panel তৈরি করা এবং রিটার্ন করা
return new ChartPanel(chart);
}
public static void updateData() {
// Random Data Generator
Random random = new Random();
double value = 50 + random.nextDouble() * 10; // Random data between 50 and 60
// Get the current time and update the series
Second currentTime = new Second();
series.add(currentTime, value); // Adding new data point to the chart
}
public static void startRealTimeUpdate() {
Timer timer = new Timer(1000, e -> updateData()); // Update every second
timer.start();
}
public static void main(String[] args) {
// JFrame তৈরি করা
JFrame frame = new JFrame("Real-time Line Chart Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createChartPanel());
frame.pack();
frame.setVisible(true);
// Start real-time data update
startRealTimeUpdate();
}
}
ব্যাখ্যা:
- TimeSeries: এখানে TimeSeries ব্যবহার করা হয়েছে, যা রিয়েল-টাইম ডেটা প্রদর্শন করতে খুবই উপযোগী। এটি Second টাইম ইউনিটে ডেটা ধারণ করে।
- Random Data Generation: র্যান্ডম ডেটা জেনারেট করা হচ্ছে প্রতি সেকেন্ডে, যা আমরা updateData() মেথডের মাধ্যমে চার্টে অ্যাড করছি।
- Timer: javax.swing.Timer ব্যবহার করা হয়েছে প্রতি সেকেন্ডে ডেটা আপডেট করার জন্য। এটি সময়ের সাথে ডেটা আপডেট করতে সাহায্য করে।
2. Real-time Bar Chart Example
এখন, আমরা একটি Bar Chart তৈরি করব যা রিয়েল-টাইম ডেটা গ্রাফিক্যালি প্রদর্শন করবে। যেমন, প্রতিটি নির্দিষ্ট সময় পর পর Bar Chart আপডেট হবে।
উদাহরণ: Real-time Bar Chart with Dynamic Updates
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class RealTimeBarChartExample {
private static DefaultCategoryDataset dataset;
public static JPanel createChartPanel() {
// ডেটাসেট তৈরি করা
dataset = new DefaultCategoryDataset();
dataset.addValue(0, "Value", "0");
// Bar Chart তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Real-time Bar Chart", // Chart Title
"Time", // X-Axis Label
"Value", // Y-Axis Label
dataset, // Dataset
org.jfree.chart.plot.PlotOrientation.VERTICAL, // Orientation
true, // Show Legend
true, // Tooltips
false // URLs
);
// Chart Panel তৈরি করে এবং রিটার্ন করা
return new ChartPanel(chart);
}
public static void updateData() {
// Random Data Generator
Random random = new Random();
int value = random.nextInt(100); // Generate random value between 0 and 100
// Update the dataset with the new value
dataset.addValue(value, "Value", String.valueOf(System.currentTimeMillis() / 1000)); // Timestamp as X-Axis
}
public static void startRealTimeUpdate() {
Timer timer = new Timer(1000, e -> updateData()); // Update every second
timer.start();
}
public static void main(String[] args) {
// JFrame তৈরি করা
JFrame frame = new JFrame("Real-time Bar Chart Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createChartPanel());
frame.pack();
frame.setVisible(true);
// Start real-time data update
startRealTimeUpdate();
}
}
ব্যাখ্যা:
- DefaultCategoryDataset: এখানে DefaultCategoryDataset ব্যবহার করা হয়েছে, যা Bar Chart এর ডেটা ধারণ করতে সাহায্য করে।
- Random Data Generation: প্রতি সেকেন্ডে র্যান্ডম ডেটা উৎপন্ন হচ্ছে এবং সেটি updateData() মেথডের মাধ্যমে বারের ডেটাতে আপডেট করা হচ্ছে।
- Timer: প্রতি সেকেন্ডে ডেটা আপডেট করতে javax.swing.Timer ব্যবহার করা হয়েছে।
3. Real-time Candlestick Chart Example
Candlestick Chart সাধারণত ফাইনান্সিয়াল ডেটা (যেমন স্টক প্রাইস) প্রদর্শন করতে ব্যবহৃত হয়, যেখানে Open, High, Low, এবং Close (OHLC) প্রাইস দেখানো হয়। নিচে দেখানো হচ্ছে কিভাবে একটি রিয়েল-টাইম Candlestick Chart তৈরি করা যায়।
উদাহরণ: Real-time Candlestick Chart with Dynamic Updates
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class RealTimeCandlestickChartExample {
private static XYSeries series;
public static JPanel createChartPanel() {
// Candlestick Data (Open, High, Low, Close)
series = new XYSeries("Stock Data");
series.add(1, 100);
series.add(2, 120);
series.add(3, 80);
series.add(4, 110);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// Creating the chart
JFreeChart chart = ChartFactory.createXYLineChart(
"Real-time Candlestick Chart", // Chart Title
"Time", // X-Axis Label
"Price", // Y-Axis Label
dataset, // Dataset
org.jfree.chart.plot.PlotOrientation.VERTICAL, // Plot Orientation
true, // Show Legend
true, // Tooltips
false // URLs
);
// Custom renderer for candlestick chart
XYPlot plot = chart.getXYPlot();
plot.setDomainGridlinePaint(Color.GRAY);
plot.setRangeGridlinePaint(Color.GRAY);
// Chart Panel
return new ChartPanel(chart);
}
public static void updateData() {
// Generate random values for Open, High, Low, Close
Random random = new Random();
double open = 100 + random.nextDouble() * 10;
double high = open + random.nextDouble() * 5;
double low = open - random.nextDouble() * 5;
double close = open + random.nextDouble() * 2;
// Update the series with new values
series.add(series.getItemCount() + 1, open); // Open
series.add(series.getItemCount() + 1, high); // High
series.add(series.getItemCount() + 1, low); // Low
series.add(series.getItemCount() + 1, close); // Close
}
public static void startRealTimeUpdate() {
Timer timer = new Timer(1000, e -> updateData()); // Update every second
timer.start();
}
public static void main(String[] args) {
// JFrame for displaying the chart
JFrame frame = new JFrame("Real-time Candlestick Chart Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createChartPanel());
frame.pack();
frame.setVisible(true);
// Start real-time data update
startRealTimeUpdate();
}
}
ব্যাখ্যা:
- Candlestick Data: এখানে র্যান্ডমভাবে Open, High, Low, এবং Close প্রাইস তৈরি করা হচ্ছে এবং প্রতি সেকেন্ডে updateData() মেথডের মাধ্যমে সিরিজে অ্যাড করা হচ্ছে।
- XYSeries: এই সিরিজটি ডেটা ধারণ করে এবং XYSeriesCollection এর মাধ্যমে এটি চার্টে উপস্থাপন করা হয়।
সারাংশ
Real-time Data Interaction বা Dynamic Charting তৈরি করতে JFreeChart ব্যবহার করে আপনি বিভিন্ন ধরনের Line Chart, Bar Chart, এবং Candlestick Chart তৈরি করতে পারেন, যেখানে ডেটা প্রতি সেকেন্ডে আপডেট হয়ে চার্টে প্রদর্শিত হয়। এখানে Timer এবং Random Data Generation ব্যবহার করা হয়েছে, যাতে প্রতি সেকেন্ডে ডেটা আপডেট হয় এবং তা চার্টে রিয়েল-টাইমে প্রতিফলিত হয়। JFreeChart এই ধরনের Real-time Data Visualization এর জন্য খুবই উপকারী।
Read more