JFreeChart লাইব্রেরি ব্যবহার করে আপনি আপনার চার্টগুলির Rendering এবং Drawing কাস্টমাইজ করতে পারেন। Custom Renderers ব্যবহার করে আপনি চার্টের ভিজ্যুয়াল প্রদর্শন (যেমন, বার রঙ, পয়েন্ট আকার, লাইন স্টাইল) কাস্টমাইজ করতে পারেন। Drawing টুল ব্যবহার করে চার্টে কাস্টম শেপ, টেক্সট বা গ্রাফিক্স অঙ্কন করতে পারবেন।
এটি খুবই গুরুত্বপূর্ণ যখন আপনি একটি বিশেষ ধরনের চার্ট ভিজ্যুয়ালাইজেশন তৈরি করতে চান যা default renderer এর বাইরে কিছু অতিরিক্ত বা কাস্টমাইজড ভিজ্যুয়াল উপাদান প্রয়োজন।
১. Custom Renderers
Custom Renderers ব্যবহার করে আপনি প্রতিটি series, category, বা point এর জন্য আলাদা রেন্ডারিং (যেমন রঙ, আকার, স্টাইল) কাস্টমাইজ করতে পারেন।
উদাহরণ: Custom Renderer দিয়ে বার চার্টের রঙ পরিবর্তন
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.*;
public class CustomRendererExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Series1", "Jan");
dataset.addValue(20, "Series1", "Feb");
dataset.addValue(30, "Series1", "Mar");
// বার চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Sales for the First Quarter", // Chart Title
"Month", // X-Axis Label
"Sales", // Y-Axis Label
dataset // Dataset
);
// Custom Renderer তৈরি করা
CategoryPlot plot = chart.getCategoryPlot();
BarRenderer renderer = new BarRenderer();
renderer.setSeriesPaint(0, Color.RED); // প্রথম সিরিজের রঙ লাল করা
plot.setRenderer(renderer); // রেন্ডারার সেট করা
// 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);
}
}
ব্যাখ্যা:
- BarRenderer ব্যবহার করে আমরা বার চার্টের সিরিজের রঙ কাস্টমাইজ করেছি। এখানে, প্রথম সিরিজের রঙ লাল করা হয়েছে।
renderer.setSeriesPaint()পদ্ধতি ব্যবহার করে আপনি বিশেষভাবে প্রতিটি সিরিজের রঙ পরিবর্তন করতে পারেন।
২. Custom Shape Drawing
JFreeChart এর মধ্যে Drawing কাস্টমাইজেশন প্রয়োগ করতে, আপনি বিভিন্ন ধরনের shapes এবং graphics অঙ্কন করতে পারেন, যা chart render করার সময় গ্রাফিক্যাল উপাদানগুলির মান উন্নত করতে সাহায্য করে।
উদাহরণ: Custom Shape Drawing (Circle Drawing on 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.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;
public class CustomShapeDrawingExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
XYSeries series = new XYSeries("Series 1");
series.add(1.0, 1.0);
series.add(2.0, 4.0);
series.add(3.0, 9.0);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// XYLineChart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Custom Shape Drawing", // Chart Title
"X-Axis", // X-Axis Label
"Y-Axis", // Y-Axis Label
dataset // Dataset
);
// XYPlot এর মাধ্যমে Custom Drawing (Circle) যোগ করা
XYPlot plot = chart.getXYPlot();
plot.setDomainGridlinesVisible(true);
plot.setRangeGridlinesVisible(true);
// Custom Shape Drawing (Circle)
plot.addDomainMarker(new org.jfree.chart.plot.XYLineAnnotation(2.0, 2.0, 3.0, 3.0, new BasicStroke(2.0f), Color.RED));
// 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);
}
}
ব্যাখ্যা:
- এখানে XYPlot এর মধ্যে একটি XYLineAnnotation যোগ করা হয়েছে, যা চার্টের উপর একটি Custom Shape (Circle) আঁকবে। আপনি অন্য কোন শেপ, যেমন Ellipse2D বা Rectangle2D ব্যবহার করে কাস্টম গ্রাফিক্সও আঁকতে পারেন।
৩. Custom Rendering for Line Charts
Line Chart এর জন্য Custom Renderers ব্যবহার করে আপনি লাইন রঙ, স্টাইল বা পয়েন্টের আকার কাস্টমাইজ করতে পারেন।
উদাহরণ: Custom Line Chart Renderer
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
public class CustomLineRendererExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
XYSeries series = new XYSeries("Series 1");
series.add(1.0, 1.0);
series.add(2.0, 4.0);
series.add(3.0, 9.0);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// XY Line Chart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Custom Line Renderer", // Chart Title
"X-Axis", // X-Axis Label
"Y-Axis", // Y-Axis Label
dataset // Dataset
);
// XYPlot থেকে Custom Line Renderer সেট করা
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesPaint(0, Color.RED); // লাইন রঙ লাল করা
renderer.setSeriesStroke(0, new BasicStroke(3.0f)); // লাইন স্টাইল সেট করা (thickness)
renderer.setSeriesShapesVisible(0, true); // পয়েন্ট আকার প্রদর্শন
plot.setRenderer(renderer);
// 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);
}
}
ব্যাখ্যা:
- XYLineAndShapeRenderer ব্যবহার করে আমরা Line Chart এর লাইন রঙ, স্টাইল, এবং পয়েন্টের আকার কাস্টমাইজ করেছি।
setSeriesPaint()পদ্ধতিটি লাইন রঙ পরিবর্তন করতে ব্যবহৃত হয়, এবংsetSeriesStroke()পদ্ধতি দিয়ে লাইনটির মোটা বা পাতলা করা যায়।
সারসংক্ষেপ
JFreeChart এ Custom Renderers এবং Drawing ব্যবহার করে আপনি চার্টের ভিজ্যুয়াল উপাদান কাস্টমাইজ করতে পারেন। Renderers ব্যবহার করে আপনি চার্টের উপাদানগুলির (যেমন বার, লাইন, পয়েন্ট) রঙ, আকার এবং স্টাইল পরিবর্তন করতে পারেন, এবং Drawing টুল দিয়ে আপনি কাস্টম শেপ এবং গ্রাফিক্স অঙ্কন করতে পারেন। এগুলি আপনাকে বিশেষ ধরণের চার্ট বা ভিজ্যুয়াল রিপ্রেজেন্টেশন তৈরি করতে সাহায্য করবে, যা ডেটার বিশ্লেষণ এবং উপস্থাপনে আরও কার্যকরী।
Custom Renderer হল JFreeChart এর একটি শক্তিশালী কাস্টমাইজেশন ফিচার যা আপনাকে চার্টের বিভিন্ন উপাদান যেমন বার, পয়েন্ট, লাইন ইত্যাদির শৈলী কাস্টমাইজ করতে সাহায্য করে। এটি ব্যবহৃত হয় যখন আপনি ডিফল্ট রেন্ডারিং আচরণ পরিবর্তন করতে চান, যেমন রঙ, শেপ, লাইন স্টাইল বা পয়েন্টের আকার পরিবর্তন করা।
JFreeChart এ Renderer হলো সেই অংশ যা প্লটের ডেটাকে ভিজুয়ালি প্রদর্শন করে। CategoryPlot বা XYPlot এর জন্য একটি Renderer কাস্টমাইজ করা যায়। এই Renderer-এর মাধ্যমে আপনি BarChart, LineChart, ScatterPlot ইত্যাদি চার্টের স্টাইল কাস্টমাইজ করতে পারেন।
Custom Renderer তৈরি এবং ব্যবহার করা
এখানে একটি উদাহরণ দেওয়া হলো যেখানে একটি Bar Chart এর জন্য কাস্টম Renderer তৈরি করা হয়েছে।
উদাহরণ: Custom BarRenderer
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.GradientPaintTransformType;
import org.jfree.ui.RefineryUtilities;
import javax.swing.*;
import java.awt.*;
public class CustomRendererExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Category 1", "Jan");
dataset.addValue(20, "Category 1", "Feb");
dataset.addValue(30, "Category 1", "Mar");
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Custom Bar Chart", // চার্টের শিরোনাম
"Month", // এক্স-অক্ষের নাম
"Value", // ওয়াই-অক্ষের নাম
dataset, // ডেটাসেট
org.jfree.chart.plot.PlotOrientation.VERTICAL,
true, // লেজেন্ড দেখানো
true, // টুলটিপস
false // URL সমর্থন
);
// Custom BarRenderer তৈরি করা
BarRenderer renderer = new BarRenderer();
// ব্যার রেন্ডারারের জন্য রঙ কাস্টমাইজেশন
renderer.setSeriesPaint(0, new GradientPaint(0.0f, 0.0f, Color.BLUE, 0.0f, 0.0f, Color.GREEN));
// ক্যাটেগরি প্লটে রেন্ডারার সেট করা
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setRenderer(renderer);
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- BarRenderer: এটি CategoryPlot-এর জন্য একটি কাস্টম রেন্ডারার। আমরা এখানে ব্যারগুলির জন্য একটি গ্রেডিয়েন্ট রঙ ব্যবহার করেছি।
- setSeriesPaint(): এটি ব্যবহার করে আপনি একটি সিরিজের জন্য রঙ সেট করতে পারেন। এখানে আমরা প্রথম সিরিজের জন্য একটি গ্রেডিয়েন্ট পেইন্ট ব্যবহার করেছি যা Blue থেকে Green এ পরিবর্তিত হবে।
- GradientPaint: এটি ব্যবহার করে আপনি একাধিক রঙের পরিবর্তন তৈরি করতে পারেন, যেমন ব্যারগুলোতে গ্রেডিয়েন্ট রঙ।
Custom Renderer এর মাধ্যমে XYPlot এর কাস্টমাইজেশন
XYPlot ব্যবহার করে Line Chart বা Scatter Plot এর জন্য কাস্টম রেন্ডারার তৈরি করা যায়। এই রেন্ডারারটি বিভিন্ন পয়েন্টের শেপ, রঙ বা স্টাইল কাস্টমাইজ করতে সাহায্য করে।
উদাহরণ: Custom XY Line Renderer
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
public class CustomXYRendererExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
XYSeries series = new XYSeries("XY Data");
series.add(1.0, 5.0);
series.add(2.0, 4.0);
series.add(3.0, 3.0);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// XY Line Chart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Custom XY Line Chart", // চার্টের শিরোনাম
"X", // এক্স-অক্ষের নাম
"Y", // ওয়াই-অক্ষের নাম
dataset // ডেটাসেট
);
// Custom XY Line Renderer তৈরি করা
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesLinesVisible(0, true); // সিরিজের লাইন দৃশ্যমান
renderer.setSeriesShapesVisible(0, true); // সিরিজের শেপ দৃশ্যমান
// পয়েন্টের শেপ এবং রঙ কাস্টমাইজ করা
renderer.setSeriesShape(0, Shape.TRIANGLE); // পয়েন্টের শেপ
renderer.setSeriesPaint(0, Color.RED); // পয়েন্টের রঙ
// রেন্ডারার প্লটে সেট করা
plot.setRenderer(renderer);
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- XYLineAndShapeRenderer: এটি XYPlot এর জন্য একটি রেন্ডারার, যা লাইন এবং শেপ কাস্টমাইজ করতে সক্ষম।
- setSeriesShape(): এটি পয়েন্টের শেপ কাস্টমাইজ করতে ব্যবহৃত হয়। এখানে আমরা TRIANGLE শেপ ব্যবহার করেছি।
- setSeriesPaint(): এটি পয়েন্টের রঙ কাস্টমাইজ করার জন্য ব্যবহৃত হয়। এখানে আমরা RED রঙ ব্যবহার করেছি।
- setSeriesLinesVisible() এবং setSeriesShapesVisible(): এটি লাইন এবং শেপের দৃশ্যমানতা কাস্টমাইজ করে।
Custom Renderer এর মাধ্যমে অন্যান্য কাস্টমাইজেশন
Line Styles: আপনি লাইন স্টাইল (যেমন সলিড, ড্যাশড) কাস্টমাইজ করতে পারেন।
renderer.setSeriesStroke(0, new BasicStroke(2.0f)); // লাইন স্ট্রোকের আকার পরিবর্তনPoint Shapes: বিভিন্ন পয়েন্টের শেপ কাস্টমাইজ করা যায়, যেমন circle, square, triangle ইত্যাদি।
renderer.setSeriesShape(0, Shape.CIRCLE); // পয়েন্টের শেপ পরিবর্তনBar Colors: Bar Chart এর ক্ষেত্রে, আপনি প্রতিটি বার বা সিরিজের রঙ কাস্টমাইজ করতে পারেন।
renderer.setSeriesPaint(0, new Color(255, 0, 0)); // সিরিজের রঙ কাস্টমাইজTransparency: গ্রাফের পয়েন্ট বা বারগুলির transparency কাস্টমাইজ করা যেতে পারে।
renderer.setSeriesPaint(0, new Color(255, 0, 0, 128)); // আংশিক স্বচ্ছ রঙ
সারসংক্ষেপ
Custom Renderer তৈরি এবং ব্যবহার করা JFreeChart এর মাধ্যমে চার্ট কাস্টমাইজেশনের একটি শক্তিশালী উপায়। আপনি Bar Chart, Line Chart, বা XY Plot এর রেন্ডারিং স্টাইল কাস্টমাইজ করে রঙ, শেপ, লাইন স্টাইল, পয়েন্ট আকার ইত্যাদি পরিবর্তন করতে পারেন। Custom Renderer এর মাধ্যমে আপনি ব্যবহারকারীর জন্য আরো আকর্ষণীয় এবং ইন্টারেক্টিভ ডেটা ভিজুয়ালাইজেশন তৈরি করতে পারবেন।
JFreeChart লাইব্রেরি ব্যবহার করে আপনি data points এর জন্য custom shapes এবং styles ব্যবহার করতে পারেন, যা আপনার চার্টের ভিজ্যুয়াল এপিয়ারেন্সকে আরও আকর্ষণীয় এবং ইউনিক করে তোলে। Custom Shapes ব্যবহার করে, আপনি data points-কে বিভিন্ন আকারে (যেমন বৃত্ত, বর্গাকার, ত্রিভুজ, ইত্যাদি) প্রদর্শন করতে পারেন, এবং Styles ব্যবহার করে তাদের রঙ, আকার এবং অন্যান্য বৈশিষ্ট্য কাস্টমাইজ করতে পারেন।
এটি বিশেষভাবে যখন আপনি scatter plots, line charts, বা XY plots তৈরি করছেন, তখন সাহায্যকারী হতে পারে, যেখানে ডেটার পয়েন্টগুলো আলাদা আলাদা শেপ এবং স্টাইলে প্রদর্শিত হতে পারে।
Custom Shapes for Data Points
JFreeChart-এ custom shapes যোগ করতে হলে, আপনি XYPlot বা CategoryPlot এর renderer ব্যবহার করতে পারেন এবং setSeriesShape() অথবা setItemShape() মেথড ব্যবহার করে প্রতিটি data point এর শেপ কাস্টমাইজ করতে পারেন।
Custom Shape উদাহরণ (XYPlot)
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;
public class CustomShapeExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
XYSeries series = new XYSeries("Data Points");
series.add(1.0, 1.0);
series.add(2.0, 4.0);
series.add(3.0, 9.0);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Custom Shapes Example", // চার্টের শিরোনাম
"X-Axis", // এক্স-অক্ষের নাম
"Y-Axis", // ওয়াই-অক্ষের নাম
dataset // ডেটাসেট
);
// XYPlot থেকে Renderer পেতে হবে
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
plot.setRenderer(renderer);
// Custom Shape সেট করা
Ellipse2D.Double customShape = new Ellipse2D.Double(-4, -4, 8, 8); // বৃত্ত আকৃতি
renderer.setSeriesShape(0, customShape); // সিরিজ 0 এর জন্য custom shape সেট করা
renderer.setSeriesPaint(0, Color.RED); // সিরিজ 0 এর পয়েন্টগুলোর রঙ রেড করা
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট প্রদর্শন করা
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- Ellipse2D.Double ব্যবহার করে একটি custom shape (বৃত্ত) তৈরি করা হয়েছে।
- setSeriesShape(0, customShape) মেথড ব্যবহার করে XYLineAndShapeRenderer এর জন্য প্রথম সিরিজের পয়েন্টের শেপ কাস্টমাইজ করা হয়েছে।
- setSeriesPaint(0, Color.RED) ব্যবহার করে, সিরিজের পয়েন্টগুলোর রঙ রেড করা হয়েছে।
Custom Styles for Data Points
JFreeChart-এ data points এর জন্য custom styles কাস্টমাইজ করতে হলে, আপনি XYLineAndShapeRenderer বা CategoryItemRenderer ব্যবহার করতে পারেন। আপনি পয়েন্টগুলোর color, size, এবং stroke কাস্টমাইজ করতে পারবেন।
Custom Style উদাহরণ (XYPlot)
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;
public class CustomStyleExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
XYSeries series = new XYSeries("Styled Data Points");
series.add(1.0, 1.0);
series.add(2.0, 4.0);
series.add(3.0, 9.0);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Custom Style Example", // চার্টের শিরোনাম
"X-Axis", // এক্স-অক্ষের নাম
"Y-Axis", // ওয়াই-অক্ষের নাম
dataset // ডেটাসেট
);
// XYPlot থেকে Renderer পেতে হবে
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
plot.setRenderer(renderer);
// Custom Shape তৈরি করা (বৃত্ত)
Ellipse2D.Double customShape = new Ellipse2D.Double(-5, -5, 10, 10);
renderer.setSeriesShape(0, customShape);
// পয়েন্টের জন্য Custom Style (রঙ, আকার এবং স্ট্রোক)
renderer.setSeriesPaint(0, Color.GREEN); // পয়েন্টের রঙ
renderer.setSeriesStroke(0, new BasicStroke(2.0f)); // পয়েন্টের স্ট্রোক বা সীমানা
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- Ellipse2D.Double ব্যবহার করে কাস্টম শেপ (বৃত্ত) তৈরি করা হয়েছে, এবং setSeriesShape(0, customShape) দিয়ে পয়েন্টের শেপ সেট করা হয়েছে।
- setSeriesPaint(0, Color.GREEN) এবং setSeriesStroke(0, new BasicStroke(2.0f)) ব্যবহার করে পয়েন্টের রঙ এবং আকার কাস্টমাইজ করা হয়েছে।
Scatter Plot এর জন্য Custom Shapes এবং Styles
Scatter Plot-এ data points-এর জন্য custom shapes এবং styles প্রয়োগ করা সবচেয়ে জনপ্রিয় ক্ষেত্র, কারণ এটি পয়েন্টগুলোর মধ্যে পার্থক্য স্পষ্টভাবে দেখানোর সুযোগ দেয়। আপনি বিভিন্ন ধরনের শেপ (যেমন, বৃত্ত, ত্রিভুজ, স্কোয়ার ইত্যাদি) ব্যবহার করতে পারেন এবং তাদের আকার, রঙ এবং স্টাইল কাস্টমাইজ করতে পারেন।
Scatter Plot উদাহরণ (Custom Shape এবং Style)
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
public class ScatterPlotCustomShapesStyles {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
XYSeries series = new XYSeries("Scatter Plot Data");
series.add(1.0, 5.0);
series.add(2.0, 7.0);
series.add(3.0, 9.0);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createScatterPlot(
"Scatter Plot with Custom Shapes", // চার্টের শিরোনাম
"X-Axis", // এক্স-অক্ষের নাম
"Y-Axis", // ওয়াই-অক্ষের নাম
dataset // ডেটাসেট
);
// XYPlot থেকে Renderer পেতে হবে
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
plot.setRenderer(renderer);
// Custom Shape তৈরি করা (স্কোয়ার)
Rectangle2D.Double customShape = new Rectangle2D.Double(-5, -5, 10, 10); // স্কোয়ার
renderer.setSeriesShape(0, customShape); // সিরিজ 0 এর জন্য custom shape সেট করা
// Custom Style (রঙ এবং আকার)
renderer.setSeriesPaint(0, Color.BLUE); // পয়েন্টের রঙ
renderer.setSeriesStroke(0, new BasicStroke(1.5f)); // পয়েন্টের স্ট্রোক
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- Rectangle2D.Double ব্যবহার করে custom shape (স্কোয়ার) তৈরি করা হয়েছে এবং সেটি setSeriesShape() মেথড ব্যবহার করে XYPlot-এ সেট করা হয়েছে।
- **
setSeriesPaint()** এবং setSeriesStroke() ব্যবহার করে, পয়েন্টের রঙ এবং আকার কাস্টমাইজ করা হয়েছে।
সারসংক্ষেপ
JFreeChart-এ Custom Shapes এবং Styles যোগ করার মাধ্যমে আপনি আপনার ডেটার পয়েন্টগুলিকে আরও ইউনিক এবং আকর্ষণীয় করে তুলতে পারেন। আপনি XYPlot এবং CategoryPlot এর renderer ব্যবহার করে বিভিন্ন ধরনের শেপ এবং স্টাইল কাস্টমাইজ করতে পারবেন, যা চার্টের ভিজ্যুয়াল লুক এবং ডেটা রিপ্রেজেন্টেশনকে উন্নত করবে।
JFreeChart একটি অত্যন্ত কাস্টমাইজযোগ্য লাইব্রেরি, যা ডেটা ভিজুয়ালাইজেশন প্রক্রিয়াকে সহজ এবং শক্তিশালী করে। JFreeChart এর মাধ্যমে আপনি Custom Drawing Techniques প্রয়োগ করতে পারেন, যাতে আপনি চার্টের বিভিন্ন উপাদান, যেমন প্লট, অক্ষ, এবং বার, সম্পূর্ণভাবে কাস্টমাইজ করতে পারেন। এছাড়া, আপনি চার্টের বিভিন্ন উপাদানও পরিবর্তন করতে পারেন যেমন Title, Legend, এবং Axis।
এই টিউটোরিয়ালে আমরা Custom Drawing Techniques এবং Chart Elements Modify করার পদ্ধতি দেখব।
Custom Drawing Techniques
Custom Drawing JFreeChart-এ সেই প্রযুক্তি যার মাধ্যমে আপনি চার্টের নির্দিষ্ট অংশের রেন্ডারিং পরিবর্তন করতে পারেন। এটি মূলত চার্টের স্টাইল, রঙ, আকৃতি এবং অন্যান্য বৈশিষ্ট্য কাস্টমাইজ করতে ব্যবহৃত হয়।
Custom Drawing উদাহরণ
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.CategoryPlot;
import org.jfree.chart.plot.SpiralPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.*;
public class CustomDrawingExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Category 1", "Jan");
dataset.addValue(20, "Category 1", "Feb");
dataset.addValue(30, "Category 1", "Mar");
// বার চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Custom Drawing Example", // Title
"Month", // X-Axis Label
"Value", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL,
true, // Legend
true, // Tooltips
false // URLs
);
// Custom BarRenderer তৈরি করা
CategoryPlot plot = (CategoryPlot) chart.getPlot();
BarRenderer renderer = new BarRenderer();
renderer.setSeriesPaint(0, Color.RED); // সিরিজের রঙ পরিবর্তন
plot.setRenderer(renderer); // রেন্ডারার সেট করা
// Custom gridlines এবং background color
plot.setDomainGridlinePaint(Color.BLACK);
plot.setRangeGridlinePaint(Color.BLACK);
plot.setBackgroundPaint(Color.LIGHT_GRAY);
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট প্রদর্শন
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- Custom BarRenderer ব্যবহার করে Bar Chart এর রঙ পরিবর্তন করা হয়েছে।
- Gridlines এবং Background Color কাস্টমাইজ করা হয়েছে।
- BarRenderer.setSeriesPaint(0, Color.RED) এর মাধ্যমে প্রথম সিরিজের রঙ লাল করা হয়েছে।
Chart Elements Modify করা
JFreeChart আপনাকে চার্টের বিভিন্ন উপাদান কাস্টমাইজ করার জন্য অনেক অপশন দেয়, যেমন টাইটেল, লেজেন্ড, এক্স-অক্ষ এবং ওয়াই-অক্ষের লেবেল। এই উপাদানগুলি পরিবর্তন করার মাধ্যমে আপনি আপনার চার্টের আউটপুট কাস্টমাইজ করতে পারবেন।
Title Modify করা
chart.setTitle("Custom Chart Title"); // টাইটেল পরিবর্তন
Legend Modify করা
chart.getLegend().setPosition(RectangleEdge.BOTTOM); // লেজেন্ডের অবস্থান নিচে
Axis Labels Modify করা
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.getDomainAxis().setLabel("Custom X-Axis Label"); // এক্স-অক্ষের লেবেল পরিবর্তন
plot.getRangeAxis().setLabel("Custom Y-Axis Label"); // ওয়াই-অক্ষের লেবেল পরিবর্তন
Title Font Modify করা
Font titleFont = new Font("Serif", Font.BOLD, 18);
chart.setTitle(new TextTitle("Custom Title", titleFont));
Full Example with Custom Drawing and Element Modification
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.title.TextTitle;
import java.awt.*;
import javax.swing.*;
public class CustomChartExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(5, "Series1", "Category1");
dataset.addValue(7, "Series1", "Category2");
dataset.addValue(9, "Series1", "Category3");
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Sales Chart", // Title
"Month", // X-Axis Label
"Sales", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Orientation
true, // Legend
true, // Tooltips
false // URLs
);
// Custom Title Font
Font titleFont = new Font("Arial", Font.BOLD, 20);
chart.setTitle(new TextTitle("Customized Sales Chart", titleFont));
// Custom Gridline Color
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setDomainGridlinePaint(Color.RED); // Gridline রঙ পরিবর্তন
plot.setRangeGridlinePaint(Color.BLUE); // Gridline রঙ পরিবর্তন
// Custom Axis Labels
plot.getDomainAxis().setLabel("Custom X-Axis Label");
plot.getRangeAxis().setLabel("Custom Y-Axis Label");
// Custom Bar Renderer
BarRenderer renderer = new BarRenderer();
renderer.setSeriesPaint(0, Color.GREEN); // সিরিজের রঙ পরিবর্তন
plot.setRenderer(renderer);
// ChartPanel তৈরি করা এবং JFrame এ সেট করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- Title কাস্টমাইজ করা হয়েছে Font দিয়ে।
- Gridline রঙ পরিবর্তন করা হয়েছে setDomainGridlinePaint() এবং setRangeGridlinePaint() মেথড দিয়ে।
- Axis Labels কাস্টমাইজ করা হয়েছে setLabel() মেথড দিয়ে।
- Bar Renderer এর মাধ্যমে সিরিজের রঙ কাস্টমাইজ করা হয়েছে।
কাস্টম ড্রইং টেকনিকের সুবিধা
- প্লট কাস্টমাইজেশন: আপনি প্লটের রঙ, লাইন স্টাইল, গ্রিডলাইন ইত্যাদি পরিবর্তন করতে পারেন।
- টাইটেল এবং লেবেল কাস্টমাইজেশন: আপনি চার্টের টাইটেল, এক্স-অক্ষ এবং ওয়াই-অক্ষের লেবেল কাস্টমাইজ করতে পারবেন।
- রেন্ডারিং কাস্টমাইজেশন: আপনি Renderer ব্যবহার করে ব্যার, লাইন, পয়েন্ট ইত্যাদি কাস্টমাইজ করতে পারবেন।
- স্টাইল কাস্টমাইজেশন: বিভিন্ন চার্ট উপাদান যেমন লেজেন্ড, টাইটেল এবং অক্ষের রঙ এবং ফন্ট স্টাইল পরিবর্তন করতে পারবেন।
সারসংক্ষেপ
JFreeChart এর মাধ্যমে আপনি Custom Drawing Techniques প্রয়োগ করে চার্টের বিভিন্ন উপাদান কাস্টমাইজ করতে পারেন। Title, Legend, Axis, Bar Renderer এবং Gridlines সহ অন্যান্য চার্ট উপাদানগুলো কাস্টমাইজ করার জন্য JFreeChart বিস্তৃত অপশন প্রদান করে। এই কাস্টমাইজেশনগুলি আপনার চার্টকে আরও আকর্ষণীয় এবং ব্যবহারকারী-বান্ধব করে তোলে, যা আপনার ডেটা ভিজুয়ালাইজেশনকে আরও কার্যকরী এবং রিচ করতে সাহায্য করে।
JFreeChart একটি শক্তিশালী গ্রাফিক্যাল লাইব্রেরি যা ডেটা ভিজুয়ালাইজেশন তৈরি করার জন্য ব্যবহৃত হয়। Renderer Customization ব্যবহার করে আপনি JFreeChart-এর গ্রাফিক্স রেন্ডারিং স্টাইল কাস্টমাইজ করতে পারেন, যা আপনাকে আরও জটিল বা বিশেষ ধরনের চার্ট তৈরি করার সুযোগ দেয়। এই টিউটোরিয়ালে, আমরা Renderer Customization এর সাহায্যে Complex Charts তৈরি করার প্রক্রিয়া দেখব।
Renderer Customization
Renderer হল সেই অংশ যা চার্টের গ্রাফিক্যাল উপস্থাপনায় ব্যবহৃত হয়। এটি নির্ধারণ করে যে কোন ডেটা কীভাবে প্রদর্শিত হবে (যেমন রঙ, স্টাইল, প্যাটার্ন, বা আকার)। JFreeChart-এ CategoryPlot, XYPlot, বা PiePlot এর মতো বিভিন্ন প্লট সিস্টেমে রেন্ডারার কাস্টমাইজ করা যায়।
১. Category Plot Rendering (Bar, Line, বা Area Charts)
CategoryPlot হল সাধারণত Bar Chart, Line Chart, বা Area Chart-এ ব্যবহৃত প্লট। আপনি CategoryRenderer বা BarRenderer কাস্টমাইজ করে বিভিন্ন ধরনের complex rendering তৈরি করতে পারেন।
Bar Chart Renderer Customization উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.*;
public class BarChartRendererCustomizationExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Category 1", "Jan");
dataset.addValue(20, "Category 1", "Feb");
dataset.addValue(30, "Category 1", "Mar");
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Sales for the First Quarter", // চার্টের শিরোনাম
"Month", // এক্স-অক্ষের নাম
"Sales (in units)", // ওয়াই-অক্ষের নাম
dataset, // ডেটাসেট
PlotOrientation.VERTICAL, // প্লট অরিয়েন্টেশন
true, // লেজেন্ড প্রদর্শন
true, // টুলটিপস
false // URL সমর্থন
);
// BarRenderer কাস্টমাইজ করা
CategoryPlot plot = (CategoryPlot) chart.getPlot();
BarRenderer renderer = (BarRenderer) plot.getRenderer();
// বার গুলি সবুজে রঙ করা
renderer.setSeriesPaint(0, Color.GREEN);
// বারগুলির মধ্যে ফাঁকা জায়গা কমানো
renderer.setItemMargin(0.0);
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- এখানে BarRenderer ব্যবহার করা হয়েছে, যার মাধ্যমে বারগুলির রঙ পরিবর্তন করা হয়েছে এবং item margin কমানো হয়েছে।
renderer.setSeriesPaint(0, Color.GREEN)এর মাধ্যমে প্রথম সিরিজের বারগুলোকে সবুজ করা হয়েছে।
২. XY Plot Rendering (Scatter, Line, বা Area Charts)
XYPlot বিভিন্ন XY Chart-এ ব্যবহৃত হয়, যেমন Line Chart, Scatter Plot, বা Area Chart। আপনি XYLineAndShapeRenderer বা XYAreaRenderer ব্যবহার করে এই ধরনের চার্টগুলির রেন্ডারিং কাস্টমাইজ করতে পারেন।
XY Line Chart Renderer Customization উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
public class XYLineChartRendererCustomizationExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
XYSeries series1 = new XYSeries("Series 1");
series1.add(1.0, 2.0);
series1.add(2.0, 3.0);
series1.add(3.0, 5.0);
XYSeriesCollection dataset = new XYSeriesCollection(series1);
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"XY Line Chart Example", // চার্টের শিরোনাম
"X-Axis", // এক্স-অক্ষের নাম
"Y-Axis", // ওয়াই-অক্ষের নাম
dataset // ডেটাসেট
);
// XYLineAndShapeRenderer কাস্টমাইজ করা
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
plot.setRenderer(0, renderer);
// লাইন রঙ কাস্টমাইজ করা (লাল)
renderer.setSeriesPaint(0, Color.RED);
// লাইন স্টাইল কাস্টমাইজ করা (ড্যাশড লাইন)
renderer.setSeriesStroke(0, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 1.0f, new float[] {10.0f}, 0.0f));
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- XYLineAndShapeRenderer ব্যবহার করে লাইন গ্রাফের রঙ এবং স্টাইল কাস্টমাইজ করা হয়েছে।
renderer.setSeriesPaint(0, Color.RED)দিয়ে লাইনটি লাল রঙের করা হয়েছে।renderer.setSeriesStroke()ব্যবহার করে ড্যাশড লাইন স্টাইল প্রয়োগ করা হয়েছে।
৩. Pie Chart Rendering
Pie Chart-এ PieSectionRenderer ব্যবহার করে বিভিন্ন সেকশনের রঙ, আকার এবং স্টাইল কাস্টমাইজ করা যায়।
Pie Chart Renderer Customization উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.renderer.category.PieSectionRenderer;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.*;
import java.awt.*;
public class PieChartRendererCustomizationExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Java", 50);
dataset.setValue("Python", 30);
dataset.setValue("C++", 20);
// পাই চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createPieChart(
"Programming Language Usage", // চার্টের শিরোনাম
dataset, // ডেটাসেট
true, // লেজেন্ড প্রদর্শন
true, // টুলটিপস
false // URL সমর্থন
);
// PiePlot কাস্টমাইজ করা
PiePlot plot = (PiePlot) chart.getPlot();
plot.setSectionPaint("Java", Color.GREEN); // Java সেকশন সবুজ
plot.setSectionPaint("Python", Color.YELLOW); // Python সেকশন হলুদ
plot.setSectionPaint("C++", Color.BLUE); // C++ সেকশন নীল
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- PieSectionRenderer ব্যবহার করা হয়েছে সেকশনের রঙ পরিবর্তন করার জন্য। এখানে, প্রতিটি প্রোগ্রামিং ভাষার জন্য আলাদা রঙ নির্ধারণ করা হয়েছে।
Conclusion
JFreeChart এর Renderer Customization ব্যবহার করে আপনি ডেটা ভিজুয়ালাইজেশনকে আরও কার্যকরী এবং কাস্টমাইজড করতে পারেন। আপনি Bar Chart, XY Chart, বা Pie Chart রেন্ডারিং কাস্টমাইজ করে আপনার চার্টের ডিজাইন পরিবর্তন করতে পারেন। জটিল এবং আকর্ষণীয় চার্ট তৈরি করার জন্য Renderer কাস্টমাইজেশন একটি শক্তিশালী টুল। আপনি বিভিন্ন রঙ, আকার, লাইন স্টাইল এবং অন্যান্য ভিজুয়াল উপাদান কাস্টমাইজ করে আপনার চার্টকে আরও সুন্দর এবং ব্যবহারকারী-বান্ধব করতে পারেন।
Read more