当前位置: 首页 > 面试题库 >

使用Jfreechart更改条形图中值轴的起始值

莫振
2023-03-14
问题内容

我的Java Web
应用程序的BAR图表中显示了以下值。9.46373791E8 9.45942547E8 9.45559945E8 9.45187023E8 9.44856693E8
9.44417826E8 9.44007878E8

如您所见,这些值实际上很接近,并且有微小的差异。当我
使用Jfreechart生成条形图时,所有条形都显示几乎相同的
高度,并且无法从视觉上分辨出差异。所以我想
将(0,0)更改为(0,9),以使x轴在y轴上的数字为9。我仍然想
显示条形图代表条形图顶部的真实值。

请提出想法。我尝试了以下内容,但没有成功

    Double d=(double) 9;
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setLowerMargin(d);

编辑:这是我的原始程序供您参考

JFreeChart chart =
            ChartFactory.createBarChart(
                    title,
            "File Date",
            "File Size",
            dataset,
            PlotOrientation.VERTICAL,
            true,
            true,
            false);
         chart.setBackgroundPaint(Color.white);



      // Set the background color of the chart
        chart.getTitle().setPaint(Color.DARK_GRAY);
        chart.setBorderVisible(true);
        // Adjust the color of the title
        CategoryPlot plot = chart.getCategoryPlot();
        plot.getRangeAxis().setLowerBound(d);
        // Get the Plot object for a bar graph

        plot.setBackgroundPaint(Color.white);     
        plot.setRangeGridlinePaint(Color.blue);
        CategoryItemRenderer renderer = plot.getRenderer();
        renderer.setSeriesPaint(0, Color.decode("#00008B"));

问题答案:

我想您想执行以下操作:

barChart.getCategoryPlot().getRangeAxis().setLowerBound(9.0);

你在哪里barChart JFreeChart Object

但是,由于您的值高于9.0E8(超过9000),因此您不应该将
下限设置为9.0E8而不是9.0,因为
当您达到9.0E8或更高时,0和9之间的差异并不大。

编辑:我已经测试了您的代码,并且可以在Windows
Vista下的计算机上正常工作…

我的完整代码在这里:

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
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.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

public class ChartTester extends JFrame {

    private static final long serialVersionUID = 1L;

    public ChartTester(final String title) {
        super(title);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        final CategoryDataset dataset = createDataset();
        final JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(500, 270));
        setContentPane(chartPanel);

    }

    /**
     * Returns a sample dataset.
     * @return The dataset.
     */
    private CategoryDataset createDataset() {
        final String rowName = "Row";
        final String[] columnName = { "Column1","Column2","Column3","Column4","Column5"};
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(9.2, rowName, columnName[0]);
        dataset.addValue(9.3, rowName, columnName[1]);
        dataset.addValue(9.4, rowName, columnName[2]);
        dataset.addValue(9.5, rowName, columnName[3]);
        dataset.addValue(10.0, rowName, columnName[4]);

        return dataset;
    }

    /**
     * Creates a sample chart.
     * @param dataset  the dataset.
     * @return The chart.
     */
    private JFreeChart createChart(final CategoryDataset dataset) {
        double d =9.0;
        final JFreeChart chart =
            ChartFactory.createBarChart(
                    "Chart Title",
                    "X Axis",
                    "Y Axis",
                    dataset,
                    PlotOrientation.VERTICAL,
                    true,
                    true,
                    false);
        chart.setBackgroundPaint(Color.white);  
        // Set the background color of the chart
        chart.getTitle().setPaint(Color.DARK_GRAY);
        chart.setBorderVisible(true);
        // Adjust the color of the title
        CategoryPlot plot = chart.getCategoryPlot();
        plot.getRangeAxis().setLowerBound(d);
        // Get the Plot object for a bar graph
        plot.setBackgroundPaint(Color.white);     
        plot.setRangeGridlinePaint(Color.blue);
        CategoryItemRenderer renderer = plot.getRenderer();
        renderer.setSeriesPaint(0, Color.decode("#00008B"));
        return chart;
    }

    public static void main(final String[] args) {
        final ChartTester test = new ChartTester("Test");
        test.pack();
        test.setVisible(true);
    }
}


 类似资料:
  • 问题内容: 我想循环更改条形图数据,但我不知道该怎么做。我的代码: 问题答案: 更新 模型 ,随后将显示侦听 视图 。动画更新,而不会阻塞事件调度线程,使用; 根据需要调用。 经测试:

  • 主要内容:什么是JFreeChart 条形图,JFreeChart 条形图的示例什么是JFreeChart 条形图 条形图是用矩形表示分组数据的图表。条形的高度或长度是代表条形的值的命题。 下图显示了 JFreeChart 库中包含的一些条形图的演示版本: JFreeChart 条形图的示例 让我们以人口数量作为样本数据。 年份 美国(百万) 中国(百万) 印度(百万) 2005年 10 15 20 2010年 15 20 25 2015年 20 25 30 以下代码根据上述

  • 我试图做一个条形图,它将显示数据超过和低于基础起点,这不是0。 我尝试使用yAxes缩放选项的最小值和最大值,但它只是隐藏了超过设置最小值/最大值的条形图,并将“beginAtZero”设置为false。

  • 我试图在JFreeChart初始化期间加载数据集。但每次我尝试创建一个“每个系列的项目数”越高的数据集时,图表中显示的数据(所有数据)越多(数据集越大,图表越小)。但实际上,我想要的是在图表上显示固定范围的数据集值,而其余的数据集值仍然隐藏。数据通常以同样的方式显示在实际的交易平台上,比如Metatrader(MT4)。第一次打开图表时,我可以看到屏幕上充满了图表的唯一可见数据集,如果我向左滚动图

  • 问题内容: 我正在尝试创建一个条形图,该条形图从for循环内生成一个数据集。 数据是。现在,当数据经过所有这些操作并生成图形时,仅显示值5的条。值10的分隔条在哪里?有人知道我在做什么错吗?任何帮助表示赞赏。谢谢 编辑:这是条形图的代码: 问题答案: 我猜你在犯一个小错误,那就是。因此,每次将每个项目添加到一个单独的对象中,并使用具有最后一个值的最终实例来创建图表时,这就是在图表中仅获得最后一个值

  • 我已经在网上搜索了足够多的东西,但没有运气。 我已经创建了一个堆叠的3D条形图,其中我无法更改默认颜色。我试了所有提供的建议。 EvenI使用了,但它不起作用。与图表、情节和渲染器中的创作顺序有关吗? 当我打印行和列时,我得到以下信息: