JFreeChart একটি শক্তিশালী Java লাইব্রেরি যা ডেটা ভিজ্যুয়ালাইজেশন এবং চার্ট তৈরি করতে ব্যবহৃত হয়। জেফ্রিচার্টের Custom Renderer ব্যবহার করে আপনি ডেটা পয়েন্ট, লাইন, বা বার এর প্রদর্শনকে কাস্টমাইজ করতে পারেন, যেমন রঙ, শেপ, স্টাইল এবং আকার পরিবর্তন করা। এই টিউটোরিয়ালে, আমরা দেখব কিভাবে Custom Renderer ব্যবহার করে Advanced Charting তৈরি করা যায়, যেখানে চার্টের উপাদানগুলির উপস্থিতি পুরোপুরি কাস্টমাইজ করা যাবে।
Custom Renderer কি?
Custom Renderer ব্যবহার করা হয় চার্টের ডেটা পয়েন্টের দৃশ্যমান স্টাইল কাস্টমাইজ করতে। এটি আপনাকে বিভিন্ন শেপ, রঙ, বা লাইন স্টাইল ব্যবহার করে ডেটার উপস্থাপনাকে আরও আকর্ষণীয় এবং প্রাসঙ্গিক করে তুলতে সাহায্য করে। যেমন আপনি একটি বার চার্টে বিভিন্ন রঙের বার, লাইন চার্টে বিভিন্ন স্টাইল বা সেমিকোলন ব্যবহার করতে পারেন।
উদাহরণ: Custom Renderer ব্যবহার করে Advanced Bar Chart তৈরি করা
ধরা যাক, আপনি একটি Bar Chart তৈরি করতে চান যেখানে প্রতিটি বার আলাদা রঙে প্রদর্শিত হবে, এবং কিছু নির্দিষ্ট শর্তে বারের স্টাইল কাস্টমাইজ করা হবে। নিচে এমন একটি উদাহরণ দেওয়া হল যেখানে Custom Renderer ব্যবহার করে বারের রঙ এবং শেপ পরিবর্তন করা হয়েছে।
উদাহরণ: Advanced Bar Chart with 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 AdvancedBarChartExample {
public static JPanel createChartPanel() {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "Category 1", "Jan");
dataset.addValue(200, "Category 1", "Feb");
dataset.addValue(300, "Category 1", "Mar");
dataset.addValue(150, "Category 1", "Apr");
// Bar Chart তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Advanced Bar Chart", // Chart Title
"Month", // X-Axis Label
"Value", // Y-Axis Label
dataset, // Dataset
org.jfree.chart.plot.PlotOrientation.VERTICAL, // Orientation
true, // Show Legend
true, // Tooltips
false // URLs
);
// Custom Renderer সেট করা
CategoryPlot plot = (CategoryPlot) chart.getPlot();
BarRenderer renderer = new BarRenderer() {
@Override
public Paint getItemPaint(int row, int column) {
if (column == 1) {
return Color.RED; // 2nd month (February) will have red bars
}
return Color.BLUE; // All other months will have blue bars
}
@Override
public Stroke getItemStroke(int row, int column) {
if (column == 0) {
return new BasicStroke(3.0f); // Jan bar will have thicker border
}
return super.getItemStroke(row, column); // Default stroke for other bars
}
};
plot.setDomainGridlinesVisible(true);
plot.setDomainGridlinePaint(Color.GRAY);
plot.setRangeGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.GRAY);
// Apply the custom renderer
plot.setRenderer(renderer);
// Chart Panel তৈরি করে এবং রিটার্ন করা
return new ChartPanel(chart);
}
public static void main(String[] args) {
// JFrame তৈরি করা
JFrame frame = new JFrame("Advanced Bar Chart with Custom Renderer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createChartPanel());
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- Custom Renderer তৈরি করা হয়েছে
BarRendererক্লাসকে ওভাররাইড করে। এখানেgetItemPaint()মেথডে নির্দিষ্ট কলামের জন্য রঙ কাস্টমাইজ করা হয়েছে। উদাহরণস্বরূপ, ফেব্রুয়ারি মাসের জন্য বার রঙ Red এবং অন্যান্য মাসের জন্য বার রঙ Blue করা হয়েছে। - getItemStroke() মেথড ব্যবহার করে আমরা জানালাম যে জানুয়ারির বারটির সীমান্ত পুরু হবে।
CategoryPlotএর মাধ্যমে চার্টের গ্রিডলাইন এবং অন্যান্য বৈশিষ্ট্য কাস্টমাইজ করা হয়েছে।
উদাহরণ: Custom Renderer ব্যবহার করে Advanced Line Chart
এখন, আমরা Line Chart কাস্টমাইজ করার জন্য Custom Renderer ব্যবহার করব, যেখানে প্রতিটি লাইন আলাদা রঙ এবং স্টাইল পাবে।
উদাহরণ: Advanced Line Chart with Custom Renderer
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.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
public class AdvancedLineChartExample {
public static JPanel createChartPanel() {
// ডেটাসেট তৈরি করা
XYSeries series1 = new XYSeries("Series 1");
series1.add(1, 1);
series1.add(2, 4);
series1.add(3, 3);
series1.add(4, 5);
XYSeries series2 = new XYSeries("Series 2");
series2.add(1, 3);
series2.add(2, 2);
series2.add(3, 5);
series2.add(4, 6);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
dataset.addSeries(series2);
// Line Chart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Advanced Line Chart", // Chart Title
"X-Axis", // X-Axis Label
"Y-Axis", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Show Legend
true, // Tooltips
false // URLs
);
// Custom Line Renderer সেট করা
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
// Series 1 এর জন্য কাস্টম রঙ এবং স্টাইল
renderer.setSeriesPaint(0, Color.RED); // Series 1: Red color
renderer.setSeriesStroke(0, new BasicStroke(2.0f)); // Series 1: Line thickness 2.0f
// Series 2 এর জন্য কাস্টম রঙ এবং স্টাইল
renderer.setSeriesPaint(1, Color.BLUE); // Series 2: Blue color
renderer.setSeriesStroke(1, new BasicStroke(3.0f)); // Series 2: Line thickness 3.0f
// Custom Renderer set করা plot এ
plot.setRenderer(renderer);
// Chart Panel তৈরি করে এবং রিটার্ন করা
return new ChartPanel(chart);
}
public static void main(String[] args) {
// JFrame তৈরি করা
JFrame frame = new JFrame("Advanced Line Chart with Custom Renderer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createChartPanel());
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- XYLineAndShapeRenderer ক্লাস ব্যবহার করা হয়েছে, যা Line Chart এর লাইন এবং শেপ কাস্টমাইজ করতে সক্ষম।
setSeriesPaint()দিয়ে প্রতিটি সিরিজের রঙ নির্ধারণ করা হয়েছে, যেমন Series 1 এর রঙ Red এবং Series 2 এর রঙ Blue।setSeriesStroke()মেথডের মাধ্যমে লাইন পুরুত্ব কাস্টমাইজ করা হয়েছে।
3. Candlestick Chart কাস্টমাইজ করা
Candlestick Chart স্টক মার্কেট বা ফাইনান্সিয়াল ডেটার জন্য খুবই জনপ্রিয়, যেখানে ওপেন, হাই, লো এবং ক্লোজ প্রাইস দেখানো হয়। এখানে আমরা একটি Candlestick Chart কাস্টমাইজ করতে Custom Renderer ব্যবহার করব।
উদাহরণ: Candlestick Chart with Custom 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.XYItemRenderer;
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 CandlestickChartExample {
public static JPanel createChartPanel() {
// Candlestick Data (Open, High, Low, Close)
XYSeries series = new XYSeries("Candlestick Data");
series.add(1, 100);
series.add(1, 120);
series.add(1, 80);
series.add(1, 110);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
// Creating the chart
JFreeChart chart = ChartFactory.createXYLineChart(
"Candlestick Chart", // Chart Title
"Time", // X-Axis Label
"Price", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Show Legend
true, // Tooltips
false // URLs
);
// Custom Renderer
XYPlot plot = (XYPlot) chart.getPlot();
XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false); // Rendering the shape
renderer.setSeriesPaint(0, Color.RED); // Set candlestick color to red
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);
}
}
ব্যাখ্যা:
- Candlestick এর জন্য আমরা XYSeries ব্যবহার করেছি এবং উপরের কাস্টম রেন্ডারিং পদ্ধতিগুলি অনুসরণ করেছি।
setSeriesPaint()ব্যবহার করে আমরা ক্যান্ডেলস্টিকের রঙ কাস্টমাইজ করেছি এবং **XYItem
Read more