JFreeChart-এ Multiple Axes এবং Subplots ব্যবহারের মাধ্যমে আপনি একই চার্টের মধ্যে একাধিক এক্স-অ্যাক্সিস (X-Axis) এবং ওয়াই-অ্যাক্সিস (Y-Axis) যুক্ত করতে পারেন, অথবা একাধিক চার্ট বা গ্রাফিকাল উপাদানকে একটি একক চার্টে উপস্থাপন করতে পারেন। এটি সাধারণত Multiple Data Series বা Multiple Chart Types দেখানোর জন্য ব্যবহৃত হয়।
Multiple Axes
Multiple Axes ব্যবহার করলে আপনি একাধিক এক্স এবং ওয়াই অক্ষ তৈরি করতে পারেন, যা একাধিক ডেটা সিরিজের সাথে সম্পর্কিত। সাধারণত, একাধিক এক্স বা ওয়াই অক্ষ ব্যবহৃত হয় যখন একাধিক ডেটা সিরিজ থাকে এবং প্রত্যেকটি সিরিজের স্কেল আলাদা থাকে।
Multiple Axes উদাহরণ
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.NumberAxis;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
public class MultipleAxesExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
categoryDataset.addValue(10, "Series1", "Jan");
categoryDataset.addValue(20, "Series1", "Feb");
categoryDataset.addValue(30, "Series1", "Mar");
XYSeries xySeries = new XYSeries("XY Series");
xySeries.add(1, 10);
xySeries.add(2, 15);
xySeries.add(3, 20);
XYSeriesCollection xyDataset = new XYSeriesCollection(xySeries);
// XYPlot তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Multiple Axes Example", // Chart Title
"Time", // X-Axis Label
"Values", // Y-Axis Label
xyDataset, // Dataset
PlotOrientation.VERTICAL, // Orientation
true, // Show legend
true, // Tooltips
false // URLs
);
XYPlot plot = chart.getXYPlot();
// Secondary Y-Axis (Right-side) তৈরি করা
NumberAxis secondaryYAxis = new NumberAxis("Secondary Y-Axis");
secondaryYAxis.setLabelFont(new Font("Serif", Font.BOLD, 12));
plot.setRangeAxis(1, secondaryYAxis); // Set the secondary axis
plot.setRangeAxisLocation(1, org.jfree.chart.plot.Plots.AxisLocation.BOTTOM_OR_RIGHT);
// Secondary X-Axis (Top-side) তৈরি করা
CategoryAxis secondaryXAxis = new CategoryAxis("Secondary X-Axis");
plot.setDomainAxis(1, secondaryXAxis);
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ Chart দেখানো
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(chartPanel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- Multiple Axes: এখানে আমরা দুটি Y-Axis (একটি বাম পাশে এবং একটি ডান পাশে) এবং দুটি X-Axis (একটি নিচে এবং একটি উপরে) তৈরি করেছি।
- Secondary Y-Axis: NumberAxis ব্যবহার করে দ্বিতীয় ওয়াই অক্ষ তৈরি করা হয়েছে।
- Secondary X-Axis: CategoryAxis ব্যবহার করে দ্বিতীয় এক্স অক্ষ তৈরি করা হয়েছে।
- XYPlot: ডেটা সিরিজের জন্য XYPlot ব্যবহার করা হয়েছে এবং একাধিক অক্ষ কাস্টমাইজ করা হয়েছে।
এটি বিভিন্ন স্কেলে ডেটা সিরিজের জন্য একাধিক অক্ষ ব্যবহার করে চার্টটি প্রদর্শন করবে।
Subplots
Subplots ব্যবহার করে আপনি একাধিক চার্টকে একক JFreeChart-এ উপস্থাপন করতে পারেন। এটি সাধারণত multi-panel charts বা grid-like layouts তৈরি করতে ব্যবহৃত হয়, যেখানে একাধিক চার্ট একসাথে দেখানো হয়।
Subplot উদাহরণ
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.Plot;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
public class SubplotsExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();
dataset1.addValue(5, "Series1", "Jan");
dataset1.addValue(10, "Series1", "Feb");
dataset1.addValue(15, "Series1", "Mar");
DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
dataset2.addValue(30, "Series2", "Jan");
dataset2.addValue(40, "Series2", "Feb");
dataset2.addValue(45, "Series2", "Mar");
// Subplot 1 তৈরি করা
JFreeChart chart1 = ChartFactory.createBarChart(
"Subplot 1", // Title
"Month", // X-Axis Label
"Value", // Y-Axis Label
dataset1, // Dataset
PlotOrientation.VERTICAL, // Chart Orientation
true, // Show Legend
true, // Show Tooltips
false // Show URLs
);
// Subplot 2 তৈরি করা
JFreeChart chart2 = ChartFactory.createBarChart(
"Subplot 2", // Title
"Month", // X-Axis Label
"Value", // Y-Axis Label
dataset2, // Dataset
PlotOrientation.VERTICAL, // Chart Orientation
true, // Show Legend
true, // Show Tooltips
false // Show URLs
);
// Subplots একত্রে জোড়া লাগানো
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1, 2));
panel.add(new ChartPanel(chart1));
panel.add(new ChartPanel(chart2));
// JFrame এ Subplots দেখানো
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- Subplots: এখানে দুটি আলাদা Bar Charts তৈরি করা হয়েছে, যা দুটি আলাদা JFreeChart অবজেক্ট হিসেবে তৈরি করা হয়েছে।
- GridLayout: GridLayout ব্যবহার করে আমরা একে অপরের পাশে দুইটি চার্ট প্রদর্শন করেছি। এখানে
new GridLayout(1, 2)ব্যবহার করা হয়েছে, যা একটি রো এবং দুটি কলাম তৈরির জন্য ব্যবহৃত হয়েছে।
এই কোডটি দুটি আলাদা চার্টকে একত্রে একটি JPanel-এ প্রদর্শন করবে।
Multiple Axes এবং Subplots এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Multiple Axes | Subplots |
|---|---|---|
| ব্যবহার | একাধিক এক্স এবং ওয়াই অক্ষ ব্যবহৃত হয় একাধিক ডেটা সিরিজের জন্য | একাধিক চার্ট বা গ্রাফ একসাথে একটি চার্টে দেখানোর জন্য |
| উদাহরণ | একাধিক সিরিজের স্কেল আলাদা, যেমন স্টক প্রাইস এবং তাপমাত্রা | একাধিক আলাদা চার্ট যেমন ২টি বা তার বেশি বার চার্ট |
| প্রধান উদ্দেশ্য | একাধিক সিরিজের স্কেল আলাদা দেখানো | একাধিক চার্ট একসাথে প্রদর্শন |
সারসংক্ষেপ
Multiple Axes এবং Subplots জেফ্রিচার্টে দুটি শক্তিশালী কাস্টমাইজেশন ফিচার, যা আপনাকে একাধিক ডেটা সিরিজ বা চার্ট একসাথে প্রদর্শন করতে সাহায্য করে। Multiple Axes ব্যবহার করে একাধিক অক্ষ তৈরি করে আপনি ভিন্ন ভিন্ন স্কেলে ডেটা প্রদর্শন করতে পারেন, যেখানে Subplots ব্যবহার করে একাধিক চার্ট বা গ্রাফ একসাথে প্রদর্শন করা যায়। এই দুটি ফিচার ব্যবহার করে আপনি আরও ইনফরমেটিভ এবং ইউজার-বান্ধব ডেটা ভিজুয়ালাইজেশন তৈরি করতে পারবেন।
Multiple Axes বা Secondary Axis যোগ করার মাধ্যমে আপনি JFreeChart-এ একাধিক অক্ষ ব্যবহার করতে পারেন। এটি বিশেষভাবে কার্যকরী যখন আপনার চার্টে ভিন্ন ভিন্ন স্কেল এর ডেটা একসাথে প্রদর্শন করতে হয়। Primary Axis এবং Secondary Axis ব্যবহার করে, আপনি একে অপরের থেকে আলাদা স্কেল বা মানের ডেটা তুলনা করতে পারবেন।
Primary Axis এবং Secondary Axis এর ব্যবহার
- Primary Axis: এটি সাধারণত চার্টের মূল অক্ষ, যা প্রথম ডেটা সিরিজের জন্য ব্যবহৃত হয়।
- Secondary Axis: এটি একটি অতিরিক্ত অক্ষ, যা দ্বিতীয় ডেটা সিরিজের জন্য ব্যবহৃত হয় এবং এটি সাধারণত আলাদা স্কেল (যেমন, অন্য একক বা পরিমাপ) ব্যবহার করে।
Multiple Axes (Secondary Axis) যোগ করার উদাহরণ
উদাহরণ: Multiple Axes (Secondary Axis) যোগ করা
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.NumberAxis;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
public class MultipleAxesExample {
public static void main(String[] args) {
// Primary Dataset তৈরি করা
XYSeries series1 = new XYSeries("Series 1");
series1.add(1, 5);
series1.add(2, 7);
series1.add(3, 9);
series1.add(4, 12);
XYSeriesCollection dataset1 = new XYSeriesCollection(series1);
// Secondary Dataset তৈরি করা
XYSeries series2 = new XYSeries("Series 2");
series2.add(1, 100);
series2.add(2, 200);
series2.add(3, 300);
series2.add(4, 400);
XYSeriesCollection dataset2 = new XYSeriesCollection(series2);
// XYLineChart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Multiple Axes Example", // Chart Title
"X-Axis", // X-Axis Label
"Primary Y-Axis", // Primary Y-Axis Label
dataset1, // Primary Dataset
PlotOrientation.VERTICAL, // Chart Orientation
true, // Show Legend
true, // Show Tooltips
false // Show URLs
);
// Plot তৈরি করা এবং Secondary Axis যোগ করা
XYPlot plot = chart.getXYPlot();
// Secondary Y-Axis তৈরি করা
NumberAxis secondaryAxis = new NumberAxis("Secondary Y-Axis");
secondaryAxis.setAutoRangeIncludesZero(false);
// Secondary Dataset যোগ করা
plot.setDataset(1, dataset2);
plot.setRangeAxis(1, secondaryAxis);
plot.mapDatasetToRangeAxis(1, 1); // Mapping secondary dataset to secondary axis
// ChartPanel তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(800, 600));
// JFrame এ Chart প্রদর্শন করা
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(chartPanel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- Primary Dataset: প্রথম ডেটাসেটটি
XYSeriesএর মাধ্যমে তৈরি করা হয়েছে, যা Primary Y-Axis এর সাথে সম্পর্কিত। - Secondary Dataset: দ্বিতীয় ডেটাসেটটি একটি ভিন্ন স্কেল বা পরিমাপের জন্য তৈরি করা হয়েছে এবং এটি Secondary Y-Axis এর সাথে সম্পর্কিত।
- Secondary Axis:
NumberAxisব্যবহার করে একটি Secondary Y-Axis তৈরি করা হয়েছে এবং এটিকে Secondary Dataset এর সাথে ম্যাপ করা হয়েছে। - XYPlot: XYPlot ব্যবহার করে দুটি ডেটাসেটের জন্য দুটি আলাদা অক্ষ (Primary এবং Secondary) নির্ধারণ করা হয়েছে।
Multiple Axes (Secondary Axis) এর কাস্টমাইজেশন
Secondary Axis কাস্টমাইজ করা: আপনি Secondary Axis এর রেঞ্জ, স্কেল, লেবেল ইত্যাদি কাস্টমাইজ করতে পারেন।
secondaryAxis.setRange(0, 500); // Secondary Axis এর রেঞ্জ সেট করা secondaryAxis.setLabelFont(new Font("Arial", Font.BOLD, 14)); // লেবেল ফন্ট কাস্টমাইজ করাপ্রতিটি সিরিজের জন্য আলাদা রঙ এবং স্টাইল: প্রতিটি সিরিজের জন্য আলাদা রঙ এবং লাইন স্টাইল সেট করা যেতে পারে।
plot.getRenderer(0).setSeriesPaint(0, Color.RED); // Primary dataset এর রঙ পরিবর্তন করা plot.getRenderer(1).setSeriesPaint(0, Color.BLUE); // Secondary dataset এর রঙ পরিবর্তন করাAxis Labels কাস্টমাইজ করা: একাধিক অক্ষের লেবেল কাস্টমাইজ করা যেতে পারে, যেমন ফন্ট এবং রঙ পরিবর্তন।
plot.getDomainAxis().setLabelFont(new Font("Serif", Font.ITALIC, 12)); // X-Axis ফন্ট পরিবর্তন করা plot.getRangeAxis().setLabelFont(new Font("Serif", Font.BOLD, 14)); // Primary Y-Axis ফন্ট পরিবর্তন করা secondaryAxis.setLabelFont(new Font("Serif", Font.PLAIN, 12)); // Secondary Y-Axis ফন্ট পরিবর্তন করা
Multiple Axes এর ব্যবহার কেন গুরুত্বপূর্ণ?
Multiple Axes ব্যবহার করে আপনি একাধিক ভিন্ন ডেটাসেট বা ভিন্ন স্কেল যুক্ত ডেটা প্রদর্শন করতে পারবেন। উদাহরণস্বরূপ:
- Time Series বিশ্লেষণ করার সময়, আপনি একদিকে তাপমাত্রা এবং অন্যদিকে বৃষ্টিপাতের পরিমাণ দেখাতে পারেন, যেখানে দুটি ভিন্ন স্কেল ব্যবহৃত হবে।
- ফাইনান্সিয়াল চার্ট-এ, আপনি একটি অক্ষে স্টক প্রাইস এবং অন্য অক্ষে ট্রেড ভলিউম দেখাতে পারবেন, যা দুটি ভিন্ন স্কেল অনুসরণ করে।
সারসংক্ষেপ
JFreeChart-এ Multiple Axes (Secondary Axis) যোগ করে আপনি একাধিক ভিন্ন স্কেল বা ডেটাসেট প্রদর্শন করতে পারেন। এটি ডেটার বিশ্লেষণ এবং তুলনা করার জন্য একটি কার্যকরী পদ্ধতি। XYPlot এবং NumberAxis ব্যবহার করে আপনি Primary Axis এবং Secondary Axis কাস্টমাইজ করে ডেটা ভিজুয়ালাইজেশন করতে পারবেন, এবং এটি বিভিন্ন ধরনের ডেটা বিশ্লেষণে সহায়ক।
JFreeChart লাইব্রেরি দিয়ে একাধিক Chart বা Plot একত্রিত করা খুবই সহজ এবং কার্যকরী। আপনি Subplot তৈরি করতে পারেন এবং একাধিক চার্ট বা গ্রাফিক্যাল উপাদান একটি একক চার্টে প্রদর্শন করতে পারেন। এই প্রক্রিয়াটি Multiple Plots বা Multiple Charts একটি একক উইন্ডোতে বা JFrame-এ দেখানোর জন্য ব্যবহৃত হয়।
এটি বিভিন্ন ধরণের ডেটা একসাথে উপস্থাপন করার জন্য খুবই সহায়ক, যেমন Bar Chart এবং Line Chart একই সাথে প্রদর্শন করা।
১. Subplot তৈরি করা
Subplot হল একটি একক চার্টের মধ্যে একাধিক প্লট (Chart) বা গ্রাফের অংশ যা একসাথে প্রদর্শিত হয়। JFreeChart-এ Subplot তৈরি করার জন্য CombinedDomainCategoryPlot এবং CombinedRangeCategoryPlot ব্যবহার করা হয়।
Subplot তৈরি করার উদাহরণ:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CombinedDomainCategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
public class SubplotExample {
public static void main(String[] args) {
// প্রথম ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();
dataset1.addValue(10, "Series1", "Category1");
dataset1.addValue(20, "Series1", "Category2");
dataset1.addValue(30, "Series1", "Category3");
// দ্বিতীয় ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
dataset2.addValue(5, "Series2", "Category1");
dataset2.addValue(15, "Series2", "Category2");
dataset2.addValue(25, "Series2", "Category3");
// প্রথম CategoryPlot তৈরি করা
CategoryPlot plot1 = new CategoryPlot();
plot1.setDataset(dataset1);
plot1.setRangePannable(true);
plot1.setDomainPannable(true);
// দ্বিতীয় CategoryPlot তৈরি করা
CategoryPlot plot2 = new CategoryPlot();
plot2.setDataset(dataset2);
plot2.setRangePannable(true);
plot2.setDomainPannable(true);
// CombinedDomainCategoryPlot তৈরি করা
CombinedDomainCategoryPlot combinedPlot = new CombinedDomainCategoryPlot();
combinedPlot.add(plot1, 1); // প্রথম plot (Bar Chart)
combinedPlot.add(plot2, 1); // দ্বিতীয় plot (Line Chart)
// Chart তৈরি করা
JFreeChart chart = new JFreeChart("Combined Plot Example", JFreeChart.DEFAULT_TITLE_FONT, combinedPlot, false);
// 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.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- প্রথমে দুটি DefaultCategoryDataset তৈরি করা হয়েছে।
- দুটি CategoryPlot তৈরি করা হয়েছে, যেখানে প্রথমটি Bar Chart এবং দ্বিতীয়টি Line Chart।
- CombinedDomainCategoryPlot ব্যবহার করে দুটি প্লট একত্রিত করা হয়েছে।
- ChartPanel ব্যবহার করে JFreeChart JFrame-এ প্রদর্শন করা হয়েছে।
এই কোডটি দুটি চার্টকে একটি একক উইন্ডোতে (JFrame) প্রদর্শন করবে, যেখানে একটি Bar Chart এবং একটি Line Chart থাকবে।
২. Multiple Charts একত্রিত করা
JFreeChart-এ একাধিক চার্ট একত্রিত করার জন্য, আপনি Multiple Plots বা Multiple Axes ব্যবহার করতে পারেন। একাধিক XYPlot বা CategoryPlot তৈরি করে একক উইন্ডোতে প্রদর্শন করা যায়।
Multiple XYPlots একত্রিত করা:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
public class MultiplePlotsExample {
public static void main(String[] args) {
// প্রথম XYSeries তৈরি
XYSeries series1 = new XYSeries("Series 1");
series1.add(1, 10);
series1.add(2, 20);
series1.add(3, 30);
// দ্বিতীয় XYSeries তৈরি
XYSeries series2 = new XYSeries("Series 2");
series2.add(1, 15);
series2.add(2, 25);
series2.add(3, 35);
// XYSeriesCollection তৈরি
XYSeriesCollection dataset1 = new XYSeriesCollection(series1);
XYSeriesCollection dataset2 = new XYSeriesCollection(series2);
// প্রথম XYPlot তৈরি
XYPlot plot1 = new XYPlot(dataset1, null, null, null);
// দ্বিতীয় XYPlot তৈরি
XYPlot plot2 = new XYPlot(dataset2, null, null, null);
// দুটি XYPlot একত্রিত করা
plot1.setDomainPannable(true);
plot1.setRangePannable(true);
plot2.setDomainPannable(true);
plot2.setRangePannable(true);
JFreeChart chart1 = new JFreeChart(plot1);
JFreeChart chart2 = new JFreeChart(plot2);
// ChartPanel তৈরি
ChartPanel chartPanel1 = new ChartPanel(chart1);
chartPanel1.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ Chart Panel যোগ করা
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel1);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- প্রথমে দুটি XYSeries তৈরি করা হয়েছে এবং দুটি XYSeriesCollection-এ সেগুলি সংরক্ষণ করা হয়েছে।
- দুটি XYPlot তৈরি করা হয়েছে, এবং এতে আলাদা ডেটাসেট যুক্ত করা হয়েছে।
- দুটি XYPlot একত্রিত করে দুটি XYChart তৈরি করা হয়েছে।
- ChartPanel ব্যবহার করে XYPlot একটি উইন্ডোতে (JFrame) প্রদর্শিত হচ্ছে।
সারসংক্ষেপ
Subplot এবং Multiple Chart একত্রিত করা JFreeChart ব্যবহারকারীদের জন্য একটি শক্তিশালী ফিচার, যেখানে একাধিক গ্রাফ বা চার্টকে একে অপরের সাথে সংযুক্ত করা যায়।
- Subplot তৈরি করতে আপনি CombinedDomainCategoryPlot বা CombinedRangeCategoryPlot ব্যবহার করতে পারেন।
- Multiple Plots একত্রিত করতে আপনি XYPlot বা CategoryPlot একাধিক চার্ট তৈরি করে তাদের একসাথে একটি উইন্ডোতে প্রদর্শন করতে পারেন।
এই প্রক্রিয়াগুলি ডেটা ভিজুয়ালাইজেশন আরও কার্যকরী এবং আকর্ষণীয় করে তোলে, বিশেষ করে যখন আপনার কাছে একাধিক ধরনের ডেটা থাকে এবং আপনি সেগুলি একসাথে তুলনা করতে চান।
JFreeChart-এ একাধিক Chart Types-এর সংমিশ্রণ করার মাধ্যমে বিভিন্ন ডেটার জন্য একটি শক্তিশালী ভিজুয়াল উপস্থাপনা তৈরি করা যায়। একাধিক চার্ট টাইপের সংমিশ্রণ দ্বারা আপনি একে অপরের সাথে সম্পর্কিত বা ভিন্ন ধরনের ডেটাকে একই চার্টে একত্রিত করে প্রদর্শন করতে পারেন, যা ডেটার বিশ্লেষণ এবং উপস্থাপন আরও কার্যকরী করে তোলে। উদাহরণস্বরূপ, আপনি Bar Chart এবং Line Chart একত্রিত করতে পারেন, অথবা Pie Chart এবং Donut Chart-এর সংমিশ্রণ করতে পারেন।
এখানে, আমরা দেখব কিভাবে JFreeChart-এ বিভিন্ন Chart Types এর সংমিশ্রণ করা যায় এবং এর কিছু সাধারণ উদাহরণ।
১. Bar Chart এবং Line Chart এর Combination
এটি একটি জনপ্রিয় সংমিশ্রণ যেখানে একধরনের ডেটা (যেমন, পরিমাণ বা আয়) Bar Chart দিয়ে এবং অন্য ধরনের ডেটা (যেমন, প্রবণতা বা বৃদ্ধি) Line Chart দিয়ে প্রদর্শন করা হয়। এই ধরনের সংমিশ্রণ সাধারণত CategoryDataset ব্যবহার করে তৈরি করা হয়।
উদাহরণ: Bar Chart এবং Line Chart এর সংমিশ্রণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.plot.PlotOrientation;
import javax.swing.*;
public class ComboChartExample {
public static void main(String[] args) {
// Dataset তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Sales", "January");
dataset.addValue(15, "Sales", "February");
dataset.addValue(20, "Sales", "March");
dataset.addValue(25, "Sales", "April");
// Line Chart Dataset তৈরি করা
DefaultCategoryDataset lineDataset = new DefaultCategoryDataset();
lineDataset.addValue(12, "Growth", "January");
lineDataset.addValue(18, "Growth", "February");
lineDataset.addValue(22, "Growth", "March");
lineDataset.addValue(28, "Growth", "April");
// Bar Chart and Line Chart তৈরি করা
JFreeChart barChart = ChartFactory.createBarChart(
"Sales and Growth", // Title
"Month", // X-Axis label
"Amount", // Y-Axis label
dataset, // Bar dataset
PlotOrientation.VERTICAL, // Orientation
true, // Show legend
true, // Show tooltips
false // Show URLs
);
// Line Chart যোগ করা
JFreeChart lineChart = ChartFactory.createLineChart(
"Growth", // Line Chart Title
"Month", // X-Axis label
"Growth Rate", // Y-Axis label
lineDataset, // Line dataset
PlotOrientation.VERTICAL, // Orientation
false, // No legend
true, // Show tooltips
false // Show URLs
);
// Combining the Bar and Line charts
CategoryPlot plot = barChart.getCategoryPlot();
plot.setDataset(1, lineDataset);
plot.setRangePannable(true);
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(barChart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- Bar Chart Dataset এবং Line Chart Dataset দুটি আলাদা ডেটাসেট তৈরি করা হয়েছে।
- Bar Chart এবং Line Chart দুটি আলাদা চার্ট তৈরি করা হয়েছে এবং তারপর CategoryPlot এর মধ্যে লাইন চার্ট ডেটাসেট যোগ করা হয়েছে।
- ফলস্বরূপ, একটি Bar Chart এবং Line Chart এর সংমিশ্রণ পাওয়া যাবে যা একই এক্স-অ্যাক্সিসে প্রদর্শিত হবে।
২. Pie Chart এবং Doughnut Chart এর Combination
এটি একটি জনপ্রিয় কৌশল, যেখানে একটি Pie Chart এর ভিতরে Doughnut Chart (অথবা একটি Ring Chart) ব্যবহার করা হয়। এই ধরনের সংমিশ্রণটি সাধারণত Proportional Data এবং Category Data প্রদর্শন করার জন্য ব্যবহৃত হয়।
উদাহরণ: Pie Chart এবং Doughnut Chart এর সংমিশ্রণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.*;
public class PieAndDoughnutChartExample {
public static void main(String[] args) {
// Pie chart dataset তৈরি করা
DefaultPieDataset pieDataset = new DefaultPieDataset();
pieDataset.setValue("Category A", 30);
pieDataset.setValue("Category B", 40);
pieDataset.setValue("Category C", 30);
// Pie Chart তৈরি করা
JFreeChart pieChart = ChartFactory.createPieChart(
"Pie Chart Example", // Title
pieDataset, // Dataset
true, // Show legend
true, // Show tooltips
false // Show URLs
);
// Doughnut Chart (Ring Chart) তৈরি করা
DefaultPieDataset doughnutDataset = new DefaultPieDataset();
doughnutDataset.setValue("Category 1", 50);
doughnutDataset.setValue("Category 2", 50);
JFreeChart doughnutChart = ChartFactory.createRingChart(
"Doughnut Chart Example", // Title
doughnutDataset, // Dataset
true, // Show legend
true, // Show tooltips
false // Show URLs
);
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(pieChart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- Pie Dataset এবং Doughnut Dataset তৈরি করা হয়েছে।
- Pie Chart এবং Doughnut Chart (Ring Chart) পৃথকভাবে তৈরি করা হয়েছে।
- আপনি Ring Chart এবং Pie Chart একত্রে সংযুক্ত করতে পারেন, কিন্তু এখানে শুধু Pie Chart এবং Ring Chart কে আলাদাভাবে দেখানো হয়েছে।
৩. Stacked Bar Chart এবং Line Chart এর Combination
Stacked Bar Chart এবং Line Chart এর সংমিশ্রণ আরও উন্নত এবং বিস্তারিত ডেটা উপস্থাপনার জন্য ব্যবহৃত হয়, যেখানে আপনি একই চার্টে Stacked Bar Chart এবং Line Chart একসাথে দেখাতে পারেন।
উদাহরণ: Stacked Bar Chart এবং Line Chart এর সংমিশ্রণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.CategoryPlot;
import javax.swing.*;
public class StackedBarAndLineChart {
public static void main(String[] args) {
// Stacked Bar Chart Dataset তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(3, "Category 1", "January");
dataset.addValue(4, "Category 1", "February");
dataset.addValue(5, "Category 1", "March");
// Line Chart Dataset তৈরি করা
DefaultCategoryDataset lineDataset = new DefaultCategoryDataset();
lineDataset.addValue(1, "Growth", "January");
lineDataset.addValue(2, "Growth", "February");
lineDataset.addValue(3, "Growth", "March");
// Stacked Bar Chart তৈরি করা
JFreeChart barChart = ChartFactory.createStackedBarChart(
"Sales and Growth", // Title
"Month", // X-Axis Label
"Amount", // Y-Axis Label
dataset, // Bar Dataset
PlotOrientation.VERTICAL, // Orientation
true, // Show legend
true, // Show tooltips
false // Show URLs
);
// Line Chart যোগ করা
CategoryPlot plot = barChart.getCategoryPlot();
plot.setDataset(1, lineDataset);
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(barChart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- Stacked Bar Chart Dataset এবং Line Chart Dataset তৈরি করা হয়েছে।
- Stacked Bar Chart এবং Line Chart দুটি একসাথে CategoryPlot এ সংযুক্ত করা হয়েছে।
- ChartPanel ব্যবহার করে চার্ট প্রদর্শন করা হয়েছে।
সারসংক্ষেপ
JFreeChart-এ Different Chart Types এর সংমিশ্রণ করতে হলে, আপনি একাধিক Dataset যোগ করতে পারেন এবং CategoryPlot বা XYPlot এর মাধ্যমে সেগুলিকে একত্রে দেখাতে পারেন। যেমন Bar Chart এবং Line Chart একসাথে ব্যবহার করা, বা Pie Chart এবং Doughnut Chart এর সংমিশ্রণ। এই ধরনের কাস্টমাইজেশন আপনাকে ডেটার ভিজুয়াল উপস্থাপন আরও কার্যকরী এবং বোধগম্য করে তোলে।
JFreeChart লাইব্রেরি ব্যবহার করে আপনি CombinedDomainCategoryPlot এবং CombinedRangeXYPlot তৈরি করতে পারেন। এই দুটি প্লট বিশেষভাবে বিভিন্ন ধরনের ডেটাসেট একত্রিত করে একটি গ্রাফে প্রদর্শন করতে ব্যবহৃত হয়। এগুলির মাধ্যমে আপনি একাধিক চার্টের ডেটা কম্বাইন করতে পারেন এবং একটি চার্টে দেখাতে পারেন।
CombinedDomainCategoryPlot
CombinedDomainCategoryPlot ব্যবহার করা হয় একাধিক CategoryPlot একত্রিত করে একটি মাত্র ডোমেইন (X-অক্ষ) ব্যবহার করার জন্য। এটি সাধারণত Bar Chart, Line Chart, এবং অন্যান্য ক্যাটেগরি-ভিত্তিক চার্টের জন্য ব্যবহৃত হয়। এটি ব্যবহারকারীকে একাধিক ক্যাটেগরি চার্ট একত্রিত করতে সাহায্য করে, যেমন একাধিক বছরের বিক্রয় গ্রাফ বা বিভিন্ন দেশের মধ্যে তুলনা।
CombinedDomainCategoryPlot উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CombinedDomainCategoryPlot;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.plot.PlotOrientation;
import javax.swing.*;
public class CombinedDomainCategoryPlotExample {
public static void main(String[] args) {
// প্রথম ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();
dataset1.addValue(1.0, "Category 1", "Jan");
dataset1.addValue(4.0, "Category 1", "Feb");
dataset1.addValue(3.0, "Category 1", "Mar");
// দ্বিতীয় ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
dataset2.addValue(2.0, "Category 2", "Jan");
dataset2.addValue(5.0, "Category 2", "Feb");
dataset2.addValue(4.0, "Category 2", "Mar");
// প্রথম চার্ট (Bar Chart) তৈরি করা
JFreeChart chart1 = ChartFactory.createBarChart(
"Bar Chart Example", // চার্টের শিরোনাম
"Month", // এক্স-অক্ষের নাম
"Value", // ওয়াই-অক্ষের নাম
dataset1, // প্রথম ডেটাসেট
PlotOrientation.VERTICAL,
true,
true,
false
);
// দ্বিতীয় চার্ট (Line Chart) তৈরি করা
JFreeChart chart2 = ChartFactory.createLineChart(
"Line Chart Example", // চার্টের শিরোনাম
"Month", // এক্স-অক্ষের নাম
"Value", // ওয়াই-অক্ষের নাম
dataset2, // দ্বিতীয় ডেটাসেট
PlotOrientation.VERTICAL,
true,
true,
false
);
// CombinedDomainCategoryPlot তৈরি করা
CombinedDomainCategoryPlot combinedPlot = new CombinedDomainCategoryPlot();
combinedPlot.add(chart1.getCategoryPlot(), 1); // প্রথম চার্ট যোগ করা
combinedPlot.add(chart2.getCategoryPlot(), 1); // দ্বিতীয় চার্ট যোগ করা
// CombinedChart তৈরি করা
JFreeChart combinedChart = new JFreeChart(
"Combined Domain Category Plot",
JFreeChart.DEFAULT_TITLE_FONT,
combinedPlot,
false
);
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(combinedChart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ CombinedChart দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- CombinedDomainCategoryPlot ব্যবহার করে দুটি চার্ট (একটি Bar Chart এবং একটি Line Chart) একত্রিত করা হয়েছে।
- add() পদ্ধতি ব্যবহার করে প্রতিটি চার্টের প্লট আলাদাভাবে যোগ করা হয়েছে। এটি একটি কম্বাইন্ড চার্ট তৈরি করবে যেখানে এক্স-অক্ষ একই থাকবে কিন্তু দুটি বিভিন্ন চার্ট হবে।
CombinedRangeXYPlot
CombinedRangeXYPlot ব্যবহার করা হয় একাধিক XYPlot একত্রিত করার জন্য, যেখানে সমস্ত চার্ট একই ওয়াই-অক্ষ (Y-axis) শেয়ার করে। এটি সাধারণত XY Series, Scatter Plots, বা Time Series চার্টে ব্যবহৃত হয়। এটি একাধিক ডেটাসেট বা চার্টের ভিউ একত্রিত করতে সাহায্য করে।
CombinedRangeXYPlot উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CombinedRangeXYPlot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
public class CombinedRangeXYPlotExample {
public static void main(String[] args) {
// প্রথম XY ডেটাসেট তৈরি করা
XYSeries series1 = new XYSeries("Series 1");
series1.add(1.0, 1.0);
series1.add(2.0, 4.0);
series1.add(3.0, 9.0);
XYSeriesCollection dataset1 = new XYSeriesCollection(series1);
// দ্বিতীয় XY ডেটাসেট তৈরি করা
XYSeries series2 = new XYSeries("Series 2");
series2.add(1.0, 2.0);
series2.add(2.0, 5.0);
series2.add(3.0, 7.0);
XYSeriesCollection dataset2 = new XYSeriesCollection(series2);
// প্রথম XYChart তৈরি করা
JFreeChart chart1 = ChartFactory.createXYLineChart(
"XY Line Chart 1", // চার্টের শিরোনাম
"X", // এক্স-অক্ষের নাম
"Y", // ওয়াই-অক্ষের নাম
dataset1, // প্রথম ডেটাসেট
org.jfree.chart.plot.PlotOrientation.VERTICAL,
true,
true,
false
);
// দ্বিতীয় XYChart তৈরি করা
JFreeChart chart2 = ChartFactory.createXYLineChart(
"XY Line Chart 2", // চার্টের শিরোনাম
"X", // এক্স-অক্ষের নাম
"Y", // ওয়াই-অক্ষের নাম
dataset2, // দ্বিতীয় ডেটাসেট
org.jfree.chart.plot.PlotOrientation.VERTICAL,
true,
true,
false
);
// CombinedRangeXYPlot তৈরি করা
CombinedRangeXYPlot combinedPlot = new CombinedRangeXYPlot(chart1.getXYPlot().getRangeAxis());
combinedPlot.add(chart1.getXYPlot(), 1); // প্রথম XYPlot যোগ করা
combinedPlot.add(chart2.getXYPlot(), 1); // দ্বিতীয় XYPlot যোগ করা
// CombinedChart তৈরি করা
JFreeChart combinedChart = new JFreeChart(
"Combined Range XY Plot",
JFreeChart.DEFAULT_TITLE_FONT,
combinedPlot,
false
);
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(combinedChart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ CombinedChart দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- CombinedRangeXYPlot ব্যবহার করে দুটি XYPlot (যেখানে এক্স-অক্ষ এবং ওয়াই-অক্ষ আলাদা) একত্রিত করা হয়েছে, এবং add() পদ্ধতি ব্যবহার করে চার্টের প্লট যোগ করা হয়েছে।
- XYSeriesCollection ব্যবহার করে XYSeries তৈরি করা হয়েছে, যা X এবং Y মানকে সংজ্ঞায়িত করে।
CombinedDomainCategoryPlot এবং CombinedRangeXYPlot এর মধ্যে পার্থক্য
- CombinedDomainCategoryPlot:
- CategoryPlot এর জন্য ব্যবহৃত হয়।
- একাধিক CategoryPlot (যেমন, Bar Chart, Line Chart) একত্রিত করা হয় যেখানে সব চার্টের ডোমেইন (X-axis) একই থাকে।
- সাধারণত Categorical Data বিশ্লেষণের জন্য ব্যবহৃত হয়।
- CombinedRangeXYPlot:
- XYPlot এর জন্য ব্যবহৃত হয়।
- একাধিক XYPlot (যেমন, XY Line Chart, Scatter Plot) একত্রিত করা হয়, যেখানে সব চার্টের রেঞ্জ (Y-axis) একই থাকে।
- সাধারণত XY Data বা Time Series Data বিশ্লেষণের জন্য ব্যবহৃত হয়।
সারসংক্ষেপ
JFreeChart এ CombinedDomainCategoryPlot এবং CombinedRangeXYPlot ব্যবহার করে আপনি একাধিক চার্ট একত্রিত করে একটি গ্রাফে প্রদর্শন করতে পারেন। CombinedDomainCategoryPlot একাধিক CategoryPlot প্লটকে একত্রিত করে, যেখানে এক্স-অক্ষ এক থাকে, এবং CombinedRangeXYPlot একাধিক XYPlot প্লটকে একত্রিত করে, যেখানে ওয়াই-অক্ষ এক থাকে। এই ধরনের প্লট ব্যবহার করে আপনি একাধিক ডেটাসেটের তুলনা করতে পারেন এবং একটি গ্রাফে তাদের সম্পর্ক বিশ্লেষণ করতে পারেন।
Read more