我正在尝试创建一个条形图,该条形图从for循环内生成一个数据集。
String scores = scoreText.getText();
String[] data = scores.split(",");
DefaultCategoryDataset barChartDataset = null;
for (int l = 0; l < data.length; l++) {
barChartDataset = new DefaultCategoryDataset();
// barChartDataset.setValue(new Double(data[l]), "Scores", stu);
barChartDataset.addValue(new Double(data[l]), "Scores", stu);
System.out.println(data[l]);
}
JFreeChart barChart = ChartFactory.createBarChart3D("Summary", "Name", "Scores", barChartDataset, PlotOrientation.VERTICAL, false, true, false);
数据是10,5
。现在,当数据经过所有这些操作并生成图形时,仅显示值5的条。值10的分隔条在哪里?有人知道我在做什么错吗?任何帮助表示赞赏。谢谢
编辑:这是条形图的代码:
String scores = scoreText.getText();
String[] data = scores.split(",");
DefaultCategoryDataset barChartDataset = new DefaultCategoryDataset();
//JFreeChart barChart = null;
for (int l = 0; l < data.length; l++) {
//barChartDataset.addValue(new Double(data[l]), "Scores", stu);
barChartDataset.setValue(new Double(data[l]), "Scores", stu);
System.out.println(new Double(data[l]));
}
JFreeChart barChart = ChartFactory.createBarChart3D("Summary", "Name", "Scores", barChartDataset, PlotOrientation.VERTICAL, false, true, false);
barChart.setBackgroundPaint(Color.YELLOW);
barChart.getTitle().setPaint(Color.RED);
final CategoryPlot categoryPlot = barChart.getCategoryPlot();
BarRenderer barRenderer = (BarRenderer) categoryPlot.getRenderer();
DecimalFormat decimalFormat = new DecimalFormat("#.##");
barRenderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", decimalFormat));
categoryPlot.setRenderer(barRenderer);
barRenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.HALF_ASCENT_CENTER));
barRenderer.setItemLabelsVisible(true);
barChart.getCategoryPlot().setRenderer(barRenderer);
ValueMarker marker = new ValueMarker(7);
marker.setLabel("Required Level");
marker.setLabelAnchor(RectangleAnchor.BOTTOM_RIGHT);
marker.setLabelTextAnchor(TextAnchor.TOP_RIGHT);
marker.setPaint(Color.BLACK);
categoryPlot.addRangeMarker(marker);
categoryPlot.setRangeGridlinePaint(Color.BLUE);
//The JFrame that the bar chart will be in.
ChartFrame chartFrame = new ChartFrame("Bar Chart for Parameters", barChart);
chartFrame.setVisible(true);
chartFrame.setSize(600, 600);
我猜你在犯一个小错误,那就是with in for loop for each iteration of loop you are creating a new DefaultCategoryDataset instance
。因此,每次将每个项目添加到一个单独的DefaultCategoryDataset
对象中,并使用DefaultCategoryDataset
具有最后一个值的最终实例来创建图表时,这就是在图表中仅获得最后一个值的唯一原因。
解决方案是仅在一次for循环之前和之后创建DefaultCategoryDataset对象,如下所示:
DefaultCategoryDataset barChartDataset = new DefaultCategoryDataset();
for (int l = 0; l < data.length; l++) {
// barChartDataset.setValue(new Double(data[l]), "Scores", stu);
barChartDataset.addValue(new Double(data[l]), "Scores", stu);
System.out.println(data[l]);
}
JFreeChart barChart = ChartFactory.createBarChart3D("Summary", "Name", "Scores", barChartDataset, PlotOrientation.VERTICAL, false, true, false);
这是我的一个应用程序中的代码片段,它工作正常:
DefaultCategoryDataset dataset= new DefaultCategoryDataset();
// Get today as a Calendar....
Calendar today = Calendar.getInstance();
for(int i=0; i<15 ;i++)
{
//get util.Date class object for today date.....
java.util.Date today_date=new java.util.Date(today.getTimeInMillis());
//convert date in string format to display on chart.....
String today_string_date = new SimpleDateFormat("dd/MM/yy").format(today_date);
// set values to DefaultCategoryDataset to display on chart...
dataset.setValue(rs1.getInt("login_count"),"Login Frequency", today_string_date);
today.add(Calendar.DATE, -1);
}// for closing...
JFreeChart chart = ChartFactory.createBarChart3D("ISIS:Overall login history for last 15 days", "Date -->", "No of user(s) login per day -->", dataset, PlotOrientation.VERTICAL, true, true, false);
CategoryPlot p = chart.getCategoryPlot();
NumberAxis rangeAxis = (NumberAxis) p.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
BarRenderer renderer = (BarRenderer) p.getRenderer();
DecimalFormat decimalformat1 = new DecimalFormat("##");
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", decimalformat1));
renderer.setItemLabelsVisible(true);
ChartUtilities.saveChartAsPNG(new File(filePath +"/chart1.png"), chart ,1250, 400);
希望它能解决您的问题。
主要内容:什么是JFreeChart 条形图,JFreeChart 条形图的示例什么是JFreeChart 条形图 条形图是用矩形表示分组数据的图表。条形的高度或长度是代表条形的值的命题。 下图显示了 JFreeChart 库中包含的一些条形图的演示版本: JFreeChart 条形图的示例 让我们以人口数量作为样本数据。 年份 美国(百万) 中国(百万) 印度(百万) 2005年 10 15 20 2010年 15 20 25 2015年 20 25 30 以下代码根据上述
我使用,并希望显示玩家得分的条形图,得分在y轴上,玩家的游戏在x轴上分组。 例如 由于玩家不必玩相同数量的游戏,因此在创建数据集时会产生大量空白,因为它试图为玩家2绘制一个条 有谁能帮我把这个空白处补上吗?理论上,玩家1可以继续玩100场游戏,而玩家2和3只玩几场,所以这看起来很荒谬!我是JFreeChart的新手,所以可能有一个明显的解决方案! 提前感谢您的帮助。
问题内容: 我想循环更改条形图数据,但我不知道该怎么做。我的代码: 问题答案: 更新 模型 ,随后将显示侦听 视图 。动画更新,而不会阻塞事件调度线程,使用; 根据需要调用。 经测试:
我得到了一个JFrame,在这个框架中有一个JPanel,JPanel中有一个JFreeChart(chart从一个方法中获取数据集),这个图表被添加到JPanel中创建的ChartPanel,然后ChartPanel被添加到JPanel中。此外,我在JPanel中获得了JComboBox,如果我更改了JComboBox中的选项,ActionListener将更新DataSet的值。返回datas
默认条形图 <?php declare(strict_types = 1); $config = [ 'path' => './tests', ]; $dataHeader = [ 'Number', 'Batch 1', 'Batch 2', ]; $dataRows = [ [2, 10, 30], [3, 40, 60], [4, 50
条形图通过比较特定类别中的值来提供数据趋势的高级概览。 垂直条形图 垂直堆积条形图 水平条形图 水平堆积条形图 图表属性 选择图表类型后,可以更改其属性来自定义图表: 选项 描述 常规 背景颜色 设置图表区域的背景颜色。 不透明度 设置背景颜色的不透明度。 显示边框 显示图表外部边框。 边界颜色 设置图表外部边框的颜色。 显示标题 显示图表的主要标题。 标题 指定图表的标题。 标题字体 设置标题的