Гистограмма с использованием Chart2D - PullRequest
1 голос
/ 01 апреля 2012

Я хочу нарисовать коэффициент гистограммы JPEG.Я часами ищу в Google, чтобы узнать, как использовать библиотеку Chart2D , но нет учебника с примерами.Массив, который я хочу нарисовать, это hist[].Я создал объект LBChart2D, но я не знаю, как установить массив в качестве набора данных.

//coeff[] is the coefficients array
for(int i=0;i<coeff.length;i++)
hist[coeff[i]]++;

LBChart2D lbChart2D = new LBChart2D();

РЕДАКТИРОВАТЬ: Вот что я пытаюсь:

Object2DProperties object2DProps = new Object2DProperties();
object2DProps.setObjectTitleText ("Title ");
Chart2DProperties chart2DProps = new Chart2DProperties();
chart2DProps.setChartBetweenChartAndLegendGapThicknessModel(5);
LegendProperties legendProps = new LegendProperties();
legendProps .setLegendBorderThicknessModel(5);
legendProps.setLegendBackgroundColor(Color.yellow);
legendProps.setLegendExistence (false);
GraphChart2DProperties graph2DProps = new GraphChart2DProperties();
GraphProperties graphProps = new GraphProperties();
object2DProps .setObjectTitleFontName("test");
Dataset dataset = new Dataset (1, hist.length, 1);
for(int i=0;i<hist.length;i++)
dataset.set (0, i, 0, hist[i]) ; 
LBChart2D lbChart2D = new LBChart2D();
lbChart2D.setObject2DProperties (object2DProps);
lbChart2D.setChart2DProperties (chart2DProps);
lbChart2D.setLegendProperties (legendProps);
lbChart2D.setGraphChart2DProperties (graph2DProps);
lbChart2D.addGraphProperties (graphProps);
lbChart2D.addDataset (dataset);
lbChart2D.setSize(width, height);
BufferedImage lbImage = lbChart2D.getImage();
jLabel15.setIcon(new ImageIcon(lbImage)); 

Теперь выдает исключение java.lang.NullPointerException в этой строке:

BufferedImage lbImage = lbChart2D.getImage();

Что не так?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2012

Несколько Chart2D демонстрации включены в дистрибутив. Вы можете собрать данные из BufferedImage, полученные через ImageIO. Смотрите также .

Приложение: в отсутствие полного примера вы можете использовать validate() для получения отладочных сообщений. Как минимум, убедитесь, что вы вызываете setLabelsAxisLabelsTexts() с hist.length метками.

//Optional validation:  Prints debug messages if invalid only.
if (!chart2D.validate(false)) {
    chart2D.validate(true);
}
1 голос
/ 04 апреля 2012

Спасибо @trashgod за попытку помочь мне. Не волнуйся, у меня это есть. Я использовал библиотеку , чтобы нарисовать гистограмму, и вот код, который я использовал.

int hist[]=new int[11];
int val[]=new int[11];
for(int ii=0;ii<11;ii++)
    hist[ii]=ii-5;//to get negative indeces I used an array to save them 
for(int kk=0;kk<coeff.length;kk++)
if(coeff[kk]<=5 &coeff[kk]>=-5) val[coeff[kk]+5]++;
DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
for(int ii=0;ii<hist.length;ii++)
dataset.setValue(val[ii], "Coefficient value",""+hist[ii]);
JFreeChart chart = ChartFactory.createBarChart("Original Histogram",
    "Coefficient value", "", dataset,
    PlotOrientation.VERTICAL, false,true, false);      
//chart.setBackgroundPaint(Color.yellow); 
chart.getTitle().setPaint(Color.blue); 
CategoryPlot p = chart.getCategoryPlot(); 
p.setOutlinePaint(Color.BLUE);
p.setRangeGridlinePaint(Color.blue); 
orgim=chart.createBufferedImage(400,400);
Image im1= orgim.getScaledInstance(jLabel12.getWidth(),jLabel12.getHeight(),1);
jLabel12.setIcon(new ImageIcon(im1));
///
...