Time Series Chart মূলত সময়ের সাথে ডেটার পরিবর্তন দেখানোর জন্য ব্যবহৃত হয়। এটি সাধারণত বিভিন্ন ধরনের পরিসংখ্যান যেমন শেয়ার মার্কেটের দাম, তাপমাত্রা, আর্দ্রতা ইত্যাদি সময়ের সাথে পরিবর্তন দেখাতে ব্যবহৃত হয়। JFreeChart লাইব্রেরি ব্যবহার করে খুব সহজেই টাইম সিরিজ চার্ট তৈরি করা যায়।
এই গাইডে, আমরা JFreeChart ব্যবহার করে একটি সহজ Time Series Chart তৈরি করার পদ্ধতি দেখব।
1. Time Series Chart এর জন্য প্রয়োজনীয় লাইব্রেরি কনফিগারেশন
প্রথমে নিশ্চিত করুন যে আপনার প্রজেক্টে JFreeChart এবং JCommon লাইব্রেরি যুক্ত করা আছে। আপনি যদি Maven ব্যবহার করেন, তাহলে আপনার pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করতে পারেন:
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jcommon</artifactId>
<version>1.0.24</version>
</dependency>
এছাড়া, আপনি জেফ্রিচার্ট এর JAR ফাইল সরাসরি ডাউনলোড করে আপনার প্রজেক্টে যোগ করতে পারেন।
2. Time Series Chart তৈরি করার উদাহরণ
এখন, আমরা JFreeChart ব্যবহার করে একটি Time Series Chart তৈরি করব যা কিছু ডেটা পয়েন্টের মাধ্যমে সময়ের সাথে দাম পরিবর্তন দেখাবে।
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import javax.swing.*;
public class TimeSeriesChartExample {
public static void main(String[] args) {
// Time series তৈরি করা
TimeSeries series = new TimeSeries("Stock Prices");
// ডেটা যোগ করা (Second হিসেবে)
series.addOrUpdate(new Second(10, 1, 2023), 100.0);
series.addOrUpdate(new Second(11, 1, 2023), 105.0);
series.addOrUpdate(new Second(12, 1, 2023), 110.0);
series.addOrUpdate(new Second(13, 1, 2023), 107.0);
series.addOrUpdate(new Second(14, 1, 2023), 115.0);
series.addOrUpdate(new Second(15, 1, 2023), 120.0);
// TimeSeriesCollection সেট করা
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(series);
// Time Series Chart তৈরি করা
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Stock Price Over Time", // Chart Title
"Time", // X-Axis Label
"Price", // Y-Axis Label
dataset, // Dataset
true, // Include Legend
true, // Tooltips
false // URLs
);
// ChartPanel তৈরি করা এবং JFrame এ যোগ করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame তৈরি করা এবং chartPanel যোগ করা
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
3. কোডের ব্যাখ্যা
- TimeSeries:
- TimeSeries ক্লাসটি জেফ্রিচার্টে টাইম সিরিজ ডেটা তৈরি করতে ব্যবহৃত হয়। এটি ডেটার সময় ও মান (value) ধারণ করে।
series.addOrUpdate(time, value)মেথডটি নির্দিষ্ট সময়ে মান যোগ বা আপডেট করে।
- Second:
Secondক্লাসটি ব্যবহার করে আপনি সেকেন্ড ভিত্তিক ডেটা যোগ করতে পারেন। আপনি এখানে সময়ের হিসাবে সেকেন্ড, মিনিট, ঘণ্টা, মাস, বা বছর ব্যবহার করতে পারেন।
- TimeSeriesCollection:
- এটি এক বা একাধিক TimeSeries যোগ করার জন্য ব্যবহার করা হয়, যা dataset তৈরি করে।
- ChartFactory.createTimeSeriesChart:
- এই মেথডটির মাধ্যমে টাইম সিরিজ চার্ট তৈরি করা হয়। এখানে আপনি টাইটেল, অক্ষের লেবেল এবং ডেটাসেট পাস করেছেন।
- ChartPanel:
- এটি একটি প্যানেল যা চার্টটি প্রদর্শন করার জন্য ব্যবহৃত হয়। এটি JFrame এ যোগ করা হয়েছে যাতে চার্টটি GUI তে প্রদর্শিত হয়।
4. Time Series Chart কাস্টমাইজেশন
JFreeChart ব্যবহার করে আপনি টাইম সিরিজ চার্ট কাস্টমাইজ করতে পারেন:
- X-Axis এবং Y-Axis কাস্টমাইজেশন:
chart.getXYPlot().getDomainAxis().setLabelFont(new Font("Serif", Font.BOLD, 12));
- রঙ পরিবর্তন:
chart.setBackgroundPaint(Color.white);
- টাইম সিরিজের পয়েন্ট স্টাইল:
series.setNotify(true);
- প্রতিটি পয়েন্টের লেবেল কাস্টমাইজেশন:
chart.getXYPlot().setDomainPannable(true);
5. আউটপুট
এই কোডটি চালালে একটি Time Series Chart তৈরি হবে যেখানে প্রতিটি সেকেন্ডের জন্য স্টক প্রাইস পরিবর্তনের গ্রাফ প্রদর্শিত হবে। এর X-Axis এ সময় এবং Y-Axis এ মূল্য প্রদর্শিত হবে।
6. Time Series Chart এর অন্যান্য কাস্টমাইজেশন
টাইম ফরম্যাট পরিবর্তন: আপনি টাইম সিরিজের সময় ফরম্যাট পরিবর্তন করতে পারেন:
DateAxis axis = new DateAxis("Time"); axis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); plot.setDomainAxis(axis);- এনিমেশন: JFreeChart এনিমেশন সাপোর্ট করে। আপনি ডেটা পরিবর্তনের সাথে সাথে চার্টে এনিমেশন যোগ করতে পারেন।
- পয়েন্ট হাইলাইটিং: চার্টের পয়েন্টগুলিকে হাইলাইট করতে বিশেষ শৈলী বা পয়েন্ট মার্কার ব্যবহার করতে পারেন।
সারাংশ
JFreeChart দিয়ে টাইম সিরিজ চার্ট তৈরি করা একটি সহজ প্রক্রিয়া। এটি সময়ের সাথে ডেটার পরিবর্তন দেখতে সহায়ক এবং বিভিন্ন ধরনের ভিজ্যুয়াল ডেটা বিশ্লেষণের জন্য ব্যবহৃত হয়। জেফ্রিচার্টের মাধ্যমে আপনি TimeSeries ডেটা তৈরি করতে পারেন এবং সেটি গ্রাফ আকারে উপস্থাপন করতে পারেন। এই গাইডে, আমরা একটি স্টক প্রাইসের Time Series Chart তৈরি করার মাধ্যমে দেখিয়েছি কিভাবে JFreeChart ব্যবহার করা যায় এবং তা কাস্টমাইজ করা যায়।
FreeChart একটি শক্তিশালী Java লাইব্রেরি, যা বিভিন্ন ধরনের চার্ট তৈরি করতে ব্যবহৃত হয়। এর মধ্যে Time Series Chart এমন একটি চার্ট, যা সময়ের সাথে ডেটার পরিবর্তন দেখতে সহায়তা করে। এটি সাধারণত TimeSeriesDataset ব্যবহার করে তৈরি করা হয়। TimeSeriesDataset হল একটি বিশেষ ধরনের Dataset যা টাইম সিরিজ ডেটা (যেমন তারিখ, সময়) সংগ্রহ করে এবং সেই ডেটাকে এক্সপোনেনশিয়াল বা লিনিয়ারভাবে গ্রাফে উপস্থাপন করে।
এটি বিশেষভাবে ব্যবহার করা হয় স্টক মার্কেট, অর্থনীতি, ওয়েব ট্রাফিক বা যে কোন ক্ষেত্র যেখানে ডেটার সময় ভিত্তিক পরিবর্তন গুরুত্বপূর্ণ। Time Series Chart দেখিয়ে আপনি একটি নির্দিষ্ট সময়ের মধ্যে ডেটার পরিবর্তন এবং ট্রেন্ড বিশ্লেষণ করতে পারেন।
Time Series Chart তৈরি করার উদাহরণ
নিচে একটি সাধারণ উদাহরণ দেওয়া হলো যেখানে TimeSeriesDataset ব্যবহার করে একটি Time Series Chart তৈরি করা হবে। এই উদাহরণে, আমরা প্রতি মাসের জন্য বিক্রয় ডেটা ব্যবহার করব এবং সেই ডেটা Time Series Chart আকারে দেখাব।
1. জেফ্রিচার্ট লাইব্রেরি সেটআপ
প্রথমে, JFreeChart লাইব্রেরি আপনার প্রজেক্টে যোগ করতে হবে। আপনি যদি Maven ব্যবহার করেন, তাহলে pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.3</version>
</dependency>
এছাড়া, আপনি JFreeChart এবং JCommon JAR ফাইল ডাউনলোড করে আপনার প্রজেক্টে যোগ করতে পারেন।
2. Time Series Chart তৈরি করার কোড উদাহরণ
এখন, আমরা একটি Time Series Chart তৈরি করব যেখানে মাস অনুযায়ী বিক্রয়ের ডেটা থাকবে। নিচে পুরো কোড দেওয়া হলো:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import javax.swing.*;
public class TimeSeriesChartExample {
public static void main(String[] args) {
// TimeSeriesDataset তৈরি
TimeSeriesCollection dataset = createDataset();
// Time Series Chart তৈরি
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Monthly Sales Over Time", // Chart Title
"Time", // X-Axis Label
"Sales", // Y-Axis Label
dataset, // Dataset
true, // Legend
true, // Tooltips
false // URLs
);
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(chartPanel);
frame.pack();
frame.setVisible(true);
}
// TimeSeriesDataset তৈরি করার জন্য মেথড
private static TimeSeriesCollection createDataset() {
TimeSeries series = new TimeSeries("Sales");
// ডেটা যোগ করা (সময় এবং বিক্রয়)
series.add(new Second(0, 0, 1, 1, 2020), 100);
series.add(new Second(0, 30, 1, 1, 2020), 150);
series.add(new Second(0, 0, 2, 1, 2020), 200);
series.add(new Second(0, 30, 2, 1, 2020), 180);
series.add(new Second(0, 0, 3, 1, 2020), 220);
series.add(new Second(0, 30, 3, 1, 2020), 250);
series.add(new Second(0, 0, 4, 1, 2020), 230);
// TimeSeriesCollection তৈরি
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(series);
return dataset;
}
}
কোডের ব্যাখ্যা:
- TimeSeriesDataset তৈরি:
TimeSeriesক্লাস ব্যবহার করে একটি টাইম সিরিজ তৈরি করা হয়েছে, যেখানে বিক্রয়ের তথ্য সময়ের সাথে যুক্ত হয়েছে।series.add(new Second(0, 0, 1, 1, 2020), 100);এই লাইনটি 1 জানুয়ারী 2020 এর বিক্রয় 100 নির্দেশ করছে।
- Chart তৈরির জন্য
ChartFactory.createTimeSeriesChart()মেথড:ChartFactory.createTimeSeriesChart()মেথডের মাধ্যমে একটি Time Series Chart তৈরি করা হয়েছে। এখানে, X-Axis এ সময় এবং Y-Axis এ বিক্রয়ের মান প্রদর্শিত হবে।
- ChartPanel:
ChartPanelক্লাস ব্যবহার করে চার্টের গ্রাফিক্যাল রেপ্রেজেন্টেশন তৈরি করা হয়েছে।JFrameব্যবহার করে এটি একটি GUI উইন্ডোতে প্রদর্শন করা হয়েছে।
3. Time Series Chart কাস্টমাইজেশন
JFreeChart দিয়ে Time Series Chart কাস্টমাইজ করা অনেক সহজ। আপনি বিভিন্ন উপায়ে চার্টের ডিজাইন পরিবর্তন করতে পারেন। উদাহরণস্বরূপ:
লাইনের রঙ পরিবর্তন:
chart.getPlot().setDomainGridlinePaint(Color.RED); // Set grid line color chart.getPlot().setRangeGridlinePaint(Color.RED); // Set range grid line colorX-Axis এবং Y-Axis লেবেল কাস্টমাইজ:
CategoryPlot plot = (CategoryPlot) chart.getPlot(); plot.getDomainAxis().setLabel("Months"); plot.getRangeAxis().setLabel("Sales Volume");Chart Background Color পরিবর্তন:
chart.setBackgroundPaint(Color.white);
4. সারাংশ
Time Series Chart তৈরি করতে JFreeChart একটি শক্তিশালী লাইব্রেরি। TimeSeriesDataset ব্যবহার করে আপনি সহজেই সময় ভিত্তিক ডেটা সংগ্রহ এবং প্রদর্শন করতে পারেন। উপরের উদাহরণে আমরা দেখেছি কিভাবে একটি Time Series Chart তৈরি করা যায়, যেখানে মাস ভিত্তিক বিক্রয়ের ডেটা উপস্থাপন করা হয়েছে। JFreeChart দিয়ে আপনি সময়ের সাথে ডেটার পরিবর্তন এবং ট্রেন্ড বিশ্লেষণ করতে পারবেন এবং তা কাস্টমাইজও করতে পারবেন।
JFreeChart লাইব্রেরি একটি শক্তিশালী টুল যা Time Series ডেটা প্লট করতে ব্যবহৃত হয়। যখন আপনি টাইম সিরিজ ডেটা ব্যবহার করেন, যেমন সময়ের সাথে পরিবর্তনশীল ডেটা (শেয়ার প্রাইজ, তাপমাত্রা, ওয়েবসাইট ভিজিটস ইত্যাদি), তখন আপনাকে Date এবং Time Format সঠিকভাবে কনফিগার করতে হবে। এটি নিশ্চিত করবে যে আপনার চার্টের X-Axis সঠিকভাবে সময় প্রদর্শন করবে এবং ডেটা পয়েন্টের সঠিক বিন্যাস থাকবে।
এই গাইডে আমরা দেখব কিভাবে TimeSeries ডেটার জন্য Date এবং Time Format কনফিগার করা যায়।
1. TimeSeries এবং DateAxis এর ভূমিকা
TimeSeries হল একটি বিশেষ ধরনের ডেটা সিরিজ যা সময়ের সাথে ডেটার পরিবর্তন ট্র্যাক করতে ব্যবহৃত হয়। এটি ডেটা পয়েন্টগুলিকে Date টাইপ দিয়ে প্রতিনিধিত্ব করে।
DateAxis হলো JFreeChart এর একটি ক্লাস যা সময় (Date) প্রদর্শনের জন্য ব্যবহৃত হয়। এই ক্লাসটি X-Axis এ সময় এবং তারিখের সঠিক ফরম্যাটে ডেটা প্রদর্শন করে।
2. Date এবং Time Format কনফিগার করা
DateFormat কনফিগার করতে হলে, আপনি DateAxis ব্যবহার করবেন এবং সেটির মাধ্যমে কাস্টম সময় ফরম্যাট নির্ধারণ করবেন।
উদাহরণ: TimeSeriesData এর জন্য Date এবং Time Format কনফিগার করা
এখানে একটি উদাহরণ দেওয়া হলো, যেখানে একটি টাইম সিরিজ ডেটার জন্য Date এবং Time Format কনফিগার করা হবে।
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.axis.DateAxis;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import javax.swing.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TimeSeriesChartExample {
public static void main(String[] args) {
// TimeSeries data
XYSeries series = new XYSeries("Stock Prices");
series.add(new Date(1167609600000L), 100); // January 1, 2007
series.add(new Date(1170288000000L), 110); // February 1, 2007
series.add(new Date(1172707200000L), 120); // March 1, 2007
series.add(new Date(1175385600000L), 130); // April 1, 2007
series.add(new Date(1178064000000L), 140); // May 1, 2007
// Create dataset
XYSeriesCollection dataset = new XYSeriesCollection(series);
// Create chart
JFreeChart chart = ChartFactory.createXYLineChart(
"Stock Prices Over Time", // Chart Title
"Date", // X-Axis Label
"Price", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Include Legend
true, // Tooltips
false // URLs
);
// Customize the plot
XYPlot plot = chart.getXYPlot();
// Set Date format on the X-Axis (DateAxis)
DateAxis axis = new DateAxis("Date");
axis.setDateFormatOverride(new SimpleDateFormat("MMM dd, yyyy")); // Custom date format
plot.setDomainAxis(axis);
// Customize line style
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesLinesVisible(0, true);
plot.setRenderer(renderer);
// Create and display chart panel
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
3. কোডের ব্যাখ্যা
- XYSeries:
- এখানে XYSeries ব্যবহার করা হয়েছে যা Date টাইপের ডেটা পয়েন্ট গ্রহণ করে এবং Stock Prices ডেটার সাথে সম্পর্কিত তথ্য স্টোর করে।
- Date টাইপ ব্যবহার:
new Date(1167609600000L)এবং অন্যান্য ডেটা পয়েন্টগুলো Date ক্লাসের ইনস্ট্যান্স ব্যবহার করে উপস্থাপন করা হয়েছে।1167609600000Lহল Unix টাইমস্ট্যাম্প (milliseconds) যা January 1, 2007 তারিখকে নির্দেশ করে।
- DateAxis:
- DateAxis ব্যবহার করে X-Axis-এ সময় প্রদর্শনের ফরম্যাট কাস্টমাইজ করা হয়েছে।
axis.setDateFormatOverride(new SimpleDateFormat("MMM dd, yyyy"));এই কোড লাইনটি SimpleDateFormat ব্যবহার করে কাস্টম তারিখ ফরম্যাটMMM dd, yyyy(যেমন: Jan 01, 2007) সেট করেছে।
- ChartPanel:
- ChartPanel ব্যবহার করে আমরা JFreeChart অবজেক্টটি GUI তে প্রদর্শন করেছি।
4. Time Format কাস্টমাইজেশন
DateFormat ব্যবহার করে আপনি সময় এবং তারিখের ফরম্যাট কাস্টমাইজ করতে পারেন। এখানে কয়েকটি কাস্টম ফরম্যাট দেওয়া হলো:
yyyy-MM-dd HH:mm:ss:2022-05-10 15:30:00MMM dd, yyyy:May 10, 2022yyyy/MM/dd:2022/05/10HH:mm:ss:15:30:00(সময় শুধুমাত্র)
আপনি SimpleDateFormat এর মাধ্যমে যে কোন ধরনের Date এবং Time ফরম্যাট কাস্টমাইজ করতে পারবেন, যেমন:
DateAxis axis = new DateAxis("Date");
axis.setDateFormatOverride(new SimpleDateFormat("dd-MMM-yyyy"));
plot.setDomainAxis(axis);
এটি X-Axis-এ তারিখকে 10-May-2022 এই ফরম্যাটে প্রদর্শন করবে।
5. আউটপুট
এই কোডটি চালালে একটি Time Series Line Chart প্রদর্শিত হবে যেখানে X-Axis-এ তারিখ (January 1, 2007 থেকে May 1, 2007 পর্যন্ত) এবং Y-Axis-এ স্টক প্রাইজ দেখানো হবে। X-Axis এ Date এবং Time সঠিকভাবে প্রদর্শিত হবে, এবং আপনি আপনার কাস্টম ফরম্যাট অনুযায়ী সময় এবং তারিখ দেখতে পারবেন।
সারাংশ
JFreeChart ব্যবহার করে আপনি সহজেই Time Series Data এর জন্য Date এবং Time Format কনফিগার করতে পারেন। এটি DateAxis ক্লাসের মাধ্যমে কাস্টম তারিখ ফরম্যাট সেট করতে সহায়তা করে, যাতে আপনি সময় অনুযায়ী ডেটা প্রদর্শন করতে পারেন। এই গাইডে, আমরা দেখেছি কিভাবে Time Series ডেটা এবং Date Format কনফিগারেশন ব্যবহার করে একটি সুন্দর Line Chart তৈরি করা যায়।
JFreeChart লাইব্রেরি ব্যবহার করে আপনি একাধিক Time Series যুক্ত করে একটি লাইন চার্ট তৈরি করতে পারেন। টাইম সিরিজ (Time Series) সাধারণত ডেটার সময়কালিক পরিবর্তন বা প্রবণতা দেখানোর জন্য ব্যবহৃত হয়। একাধিক টাইম সিরিজ ব্যবহার করার মাধ্যমে আপনি বিভিন্ন টাইম সিরিজের মধ্যে তুলনা করতে পারেন। যেমন, আপনি বিভিন্ন দেশের বা বিভিন্ন পণ্যের বিক্রয়ের প্রবণতা তুলনা করতে পারেন।
এই গাইডে, আমরা দেখব কিভাবে Multiple Time Series সহ একটি লাইন চার্ট তৈরি করা যায়।
1. টাইম সিরিজ এবং JFreeChart কনফিগারেশন
প্রথমে, নিশ্চিত করুন যে আপনার প্রজেক্টে JFreeChart লাইব্রেরি সংযুক্ত আছে। আপনি যদি Maven ব্যবহার করেন, তাহলে pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করতে পারেন:
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jcommon</artifactId>
<version>1.0.24</version>
</dependency>
এছাড়া, আপনি JAR ফাইল ডাউনলোড করে আপনার প্রজেক্টে যোগ করতে পারেন।
2. Multiple Time Series সহ Line Chart তৈরি করা
এখন, আমরা Multiple Time Series সহ একটি লাইন চার্ট তৈরি করব। এতে আমরা দুইটি টাইম সিরিজ (যেমন, Sales এবং Expenses) যোগ করব এবং তাদের সময়কালিক প্রবণতা তুলনা করব।
কোড উদাহরণ:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import javax.swing.*;
import java.awt.*;
public class MultipleTimeSeriesChart {
public static JPanel createChartPanel() {
// Sales Time Series তৈরি করা
TimeSeries salesSeries = new TimeSeries("Sales");
salesSeries.add(new Second(10, 5, 8, 3, 2022), 1000);
salesSeries.add(new Second(15, 5, 8, 3, 2022), 1200);
salesSeries.add(new Second(20, 5, 8, 3, 2022), 1500);
salesSeries.add(new Second(25, 5, 8, 3, 2022), 1700);
salesSeries.add(new Second(30, 5, 8, 3, 2022), 1900);
// Expenses Time Series তৈরি করা
TimeSeries expensesSeries = new TimeSeries("Expenses");
expensesSeries.add(new Second(10, 5, 8, 3, 2022), 500);
expensesSeries.add(new Second(15, 5, 8, 3, 2022), 600);
expensesSeries.add(new Second(20, 5, 8, 3, 2022), 700);
expensesSeries.add(new Second(25, 5, 8, 3, 2022), 800);
expensesSeries.add(new Second(30, 5, 8, 3, 2022), 900);
// Dataset তৈরি করা
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(salesSeries);
dataset.addSeries(expensesSeries);
// Line Chart তৈরি করা
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Sales and Expenses Over Time", // Chart Title
"Time", // X-Axis Label
"Amount", // Y-Axis Label
dataset, // Dataset
true, // Include legend
true, // Tooltips
false // URLs
);
// Chart Panel তৈরি এবং কাস্টমাইজ করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
chartPanel.setMouseWheelEnabled(true);
return chartPanel;
}
public static void main(String[] args) {
// JFrame তৈরি করা
JFrame frame = new JFrame("JFreeChart Multiple Time Series Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createChartPanel());
frame.pack();
frame.setVisible(true);
}
}
3. কোডের ব্যাখ্যা
- TimeSeries:
- TimeSeries হল JFreeChart এর একটি ক্লাস যা টাইম সিরিজ ডেটা ধারণ করে। এখানে, আমরা দুটি সিরিজ তৈরি করেছি:
- Sales: বিক্রয় ডেটা (যেমন, ১০:১৫:০০, ১০:২০:০০)।
- Expenses: খরচ ডেটা (যেমন, ১০:১৫:০০, ১০:২০:০০)।
- TimeSeries হল JFreeChart এর একটি ক্লাস যা টাইম সিরিজ ডেটা ধারণ করে। এখানে, আমরা দুটি সিরিজ তৈরি করেছি:
- Second:
- Second ক্লাসটি JFreeChart এর টাইম সিরিজ ডেটার জন্য ব্যবহৃত হয়, যেখানে প্রতিটি ডেটা পয়েন্টের সাথে একটি নির্দিষ্ট সময় যুক্ত থাকে।
- TimeSeriesCollection:
- এই ডেটাসেট ব্যবহার করে আমরা একাধিক টাইম সিরিজ যোগ করতে পারি। এখানে, দুটি টাইম সিরিজ (Sales এবং Expenses) TimeSeriesCollection এ যুক্ত করা হয়েছে।
- ChartFactory.createTimeSeriesChart():
createTimeSeriesChart()মেথডের মাধ্যমে টাইম সিরিজের জন্য একটি লাইন চার্ট তৈরি করা হয়েছে। এতে টাইম সিরিজ ডেটা, চার্টের শিরোনাম, অক্ষের নাম এবং অন্যান্য কনফিগারেশন প্যারামিটার দেওয়া হয়েছে।
- ChartPanel:
- ChartPanel ব্যবহার করে আমরা JFreeChart টুলটিকে GUI তে প্রদর্শন করেছি।
- JFrame:
- JFrame তৈরি করা হয়েছে এবং এতে ChartPanel যোগ করা হয়েছে যাতে চার্টটি GUI তে প্রদর্শিত হয়।
4. আউটপুট
এই কোডটি চালালে একটি Line Chart প্রদর্শিত হবে যেখানে দুটি টাইম সিরিজ থাকবে:
- Sales (বিক্রয়) এবং Expenses (খরচ)
- X-Axis এ সময় এবং Y-Axis এ পরিমাণ থাকবে (যেমন বিক্রয়ের এবং খরচের পরিমাণ)।
- সময়কালিকভাবে ডেটার পরিবর্তন প্রদর্শিত হবে।
5. কাস্টমাইজেশন
JFreeChart-এ বিভিন্ন কাস্টমাইজেশন করা যায়, যেমন:
রঙ পরিবর্তন: সিরিজের রঙ পরিবর্তন করতে:
plot.getRenderer().setSeriesPaint(0, Color.BLUE); // Sales Series Color plot.getRenderer().setSeriesPaint(1, Color.RED); // Expenses Series Colorলোডিং শেপ পরিবর্তন: ডেটা পয়েন্টের শেপ পরিবর্তন করতে:
renderer.setSeriesShape(0, new Ellipse2D.Double(-3, -3, 6, 6)); // Circle shapeAxis এবং লেবেল কাস্টমাইজেশন:
plot.getDomainAxis().setLabelFont(new Font("Arial", Font.BOLD, 12)); // X-Axis Label Font plot.getRangeAxis().setLabelFont(new Font("Arial", Font.BOLD, 12)); // Y-Axis Label FontMultiple Y-Axis ব্যবহার: আপনি যদি দুইটি আলাদা Y-Axis ব্যবহার করতে চান:
plot.setRangeAxis(1, new NumberAxis("Expenses")); plot.setDataset(1, expensesDataset); plot.mapDatasetToRangeAxis(1, 1);
সারাংশ
JFreeChart দিয়ে আপনি সহজেই Multiple Time Series সহ Line Chart তৈরি করতে পারেন। এটি সময়ের সাথে ডেটার প্রবণতা এবং বিভিন্ন টাইম সিরিজের মধ্যে সম্পর্ক তুলনা করতে সহায়ক। এখানে, আমরা Sales এবং Expenses টাইম সিরিজ দিয়ে একটি লাইন চার্ট তৈরি করেছি এবং এর কাস্টমাইজেশন অপশন দেখিয়েছি। JFreeChart এর মাধ্যমে বিভিন্ন টাইম সিরিজ এবং ডেটা ভিজ্যুয়ালাইজেশন খুব সহজেই করা সম্ভব।
JFreeChart একটি শক্তিশালী লাইব্রেরি যা Java এ বিভিন্ন ধরনের ডেটা ভিজ্যুয়ালাইজেশন করতে ব্যবহৃত হয়। এই গাইডে, আমরা দেখব কিভাবে JFreeChart ব্যবহার করে Financial Data Visualization তৈরি করা যায়, যেমন স্টক মার্কেটের ডেটা, প্রফিট এবং লোকসান, এবং আরও অনেক কিছু। আমরা এখানে Line Chart, Bar Chart, এবং Candlestick Chart (যা সাধারণত স্টক মার্কেটের ডেটা প্রদর্শন করতে ব্যবহৃত হয়) কিভাবে তৈরি করা যায় তা দেখব।
1. Financial Data Visualization: Line Chart Example
Line Chart ব্যবহৃত হয় সময়ের সাথে ডেটার পরিবর্তন দেখানোর জন্য। এটি সাধারণত স্টক মার্কেট, প্রফিট এবং লোকসানের ট্র্যাকিং এর জন্য ব্যবহৃত হয়।
উদাহরণ: Monthly Stock Price Line Chart
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.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import javax.swing.*;
public class FinancialLineChartExample {
public static JPanel createChartPanel() {
// TimeSeries তৈরি করা, যেখানে Stock Price Data থাকবে
TimeSeries series = new TimeSeries("Stock Price");
series.add(new Second(0, 0, 1, 1, 2024), 100.0);
series.add(new Second(0, 1, 1, 1, 2024), 105.0);
series.add(new Second(0, 2, 1, 1, 2024), 98.0);
series.add(new Second(0, 3, 1, 1, 2024), 110.0);
// TimeSeriesCollection তৈরি করা
TimeSeriesCollection dataset = new TimeSeriesCollection(series);
// Line Chart তৈরি করা
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Stock Price Over Time", // Chart Title
"Time", // X-Axis Label
"Price (USD)", // Y-Axis Label
dataset, // Dataset
false, // No Legend
true, // Tooltips
false // URLs
);
// Chart Panel তৈরি করে এবং রিটার্ন করা
return new ChartPanel(chart);
}
public static void main(String[] args) {
// JFrame তৈরি করা
JFrame frame = new JFrame("Stock Price Line Chart");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createChartPanel());
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- এখানে TimeSeries ব্যবহার করা হয়েছে, যা স্টক প্রাইসের জন্য সময়ের সাথে পরিবর্তন ট্র্যাক করতে সাহায্য করে।
createTimeSeriesChart()মেথডের মাধ্যমে একটি Line Chart তৈরি করা হয়েছে যা স্টক প্রাইসের পরিবর্তন প্রদর্শন করবে।
2. Financial Data Visualization: Bar Chart Example
Bar Chart সাধারণত ডেটার পরিমাণ এবং ক্যাটেগরি তুলনা করার জন্য ব্যবহৃত হয়। এটি প্রফিট, লোকসান এবং অন্যান্য অর্থনৈতিক ডেটা প্রদর্শন করতে ব্যবহৃত হতে পারে।
উদাহরণ: Yearly Profit Bar Chart
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
public class FinancialBarChartExample {
public static JPanel createChartPanel() {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10000, "Profit", "2020");
dataset.addValue(12000, "Profit", "2021");
dataset.addValue(15000, "Profit", "2022");
dataset.addValue(13000, "Profit", "2023");
// Bar Chart তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Yearly Profit", // Chart Title
"Year", // X-Axis Label
"Profit (USD)", // Y-Axis Label
dataset, // Dataset
org.jfree.chart.plot.PlotOrientation.VERTICAL, // Orientation
true, // Legend
true, // Tooltips
false // URLs
);
// Chart Panel তৈরি করে এবং রিটার্ন করা
return new ChartPanel(chart);
}
public static void main(String[] args) {
// JFrame তৈরি করা
JFrame frame = new JFrame("Yearly Profit Bar Chart");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createChartPanel());
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- DefaultCategoryDataset ব্যবহার করে বার চার্টের ডেটা সংরক্ষণ করা হয়েছে।
createBarChart()মেথডের মাধ্যমে Bar Chart তৈরি করা হয়েছে যা প্রতিটি বছরের প্রফিট দেখায়।
3. Financial Data Visualization: Candlestick Chart Example
Candlestick Chart স্টক মার্কেটের জন্য একটি গুরুত্বপূর্ণ চার্ট যেটি ওপেন, ক্লোজ, হাই এবং লো প্রাইস প্রদর্শন করতে ব্যবহৃত হয়। এটি স্টক প্রাইসের ভোলাটিলিটি এবং ট্রেন্ড দেখানোর জন্য খুবই কার্যকর।
উদাহরণ: Candlestick Chart
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 org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYPlot;
import org.jfree.chart.plot.Plot;
import javax.swing.*;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
public class CandlestickChartExample {
public static JPanel createChartPanel() {
// Candlestick Data (Open, High, Low, Close)
XYSeries series = new XYSeries("Candlestick");
series.add(1, 100, 120, 80, 110); // Example: Day 1 (Open, High, Low, Close)
series.add(2, 110, 130, 90, 120); // Example: Day 2
series.add(3, 120, 140, 100, 130); // Example: Day 3
XYSeriesCollection dataset = new XYSeriesCollection(series);
// Creating the chart
JFreeChart chart = ChartFactory.createXYLineChart(
"Stock Price Candlestick Chart", // Chart Title
"Time", // X-Axis Label
"Price (USD)", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Show Legend
true, // Tooltips
false // URLs
);
// Customize the plot to represent candlestick
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesShapesVisible(0, true);
plot.setDomainPannable(true);
plot.setRangePannable(true);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
plot.setDomainPannable(true);
// Adding the renderer to the plot
plot.setRenderer(renderer);
// Chart Panel
return new ChartPanel(chart);
}
public static void main(String[] args) {
// JFrame for displaying the chart
JFrame frame = new JFrame("Candlestick Chart");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createChartPanel());
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- XYSeries দিয়ে ক্যান্ডেলস্টিক ডেটা তৈরি করা হয়েছে, যেখানে প্রতিটি দিনের জন্য ওপেন, হাই, লো এবং ক্লোজ প্রাইস প্রদান করা হয়েছে।
ChartFactory.createXYLineChart()মেথডের মাধ্যমে ক্যান্ডেলস্টিক চার্ট তৈরি করা হয়েছে।
সারাংশ
JFreeChart ব্যবহার করে Financial Data Visualization এর জন্য Line Chart, Bar Chart, এবং Candlestick Chart তৈরি করা খুবই সহজ। আপনি TimeSeries, CategoryDataset, এবং XYSeries ব্যবহার করে ডেটা প্রক্রিয়াকরণ এবং ভিজ্যুয়ালাইজেশন করতে পারেন। JFreeChart এর মাধ্যমে স্টক মার্কেট, প্রফিট, লোকসান এবং আরও অনেক ধরনের আর্থিক ডেটা সুন্দরভাবে উপস্থাপন করা সম্ভব।
Read more