当前位置: 首页 > 知识库问答 >
问题:

JFreeChart水平图

向锦
2023-03-14

我使用CombinedDomainXyplot绘制图表。我有另一个要求,我需要显示两个图表水平。

CombinedDomainXYPlot plot = new CombinedDomainXYPlot();
plot.add(getChart1(), 2);
plot.add(getChart2(), 2);

我有什么办法可以把这两张图表做成单行吗?

编辑:实际上,我希望它像您的thermometerdemo示例一样。为此,您使用了JPanel,但这里我使用的是JFrame

共有1个答案

颛孙和悌
2023-03-14

我希望它像您的ThermometerDemo示例一样。

基于此示例,下面的代码将两个面板添加到GridLayout(1,0)中。每个面板都包括它自己的图表和控制面板。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.Random;
import javax.swing.*;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 * @see https://stackoverflow.com/a/20243624/230513
 * @see https://stackoverflow.com/q/11870416/230513
 */
public class CombinedPlot {

    private static final int MAX = 3;
    private static final Random rand = new Random();

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                init();
            }
        });
    }

    private static void init() {
        JFrame frame = new JFrame("Combined Plot Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(1, 0));
        frame.add(createPanel());
        frame.add(createPanel());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private static JPanel createPanel() {
        JPanel p = new JPanel(new BorderLayout());
        XYItemRenderer renderer = new StandardXYItemRenderer();
        XYPlot plot1 = new XYPlot(
            generateData(), null, new NumberAxis("Range 1"), renderer);
        XYPlot plot2 = new XYPlot(
            generateData(), null, new NumberAxis("Range 2"), renderer);
        final CombinedDomainXYPlot plot
            = new CombinedDomainXYPlot(new NumberAxis("Domain"));
        plot.add(plot1);
        plot.add(plot2);
        plot.setOrientation(PlotOrientation.VERTICAL);
        JFreeChart chart = new JFreeChart(
            "Combined Plots", JFreeChart.DEFAULT_TITLE_FONT, plot, false);
        ChartPanel chartPanel = new ChartPanel(chart) {

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(320, 320);
            }
        };

        JPanel controlPanel = new JPanel();
        controlPanel.add(new JButton(new UpdateAction(plot, 0)));
        controlPanel.add(new JButton(new UpdateAction(plot, 1)));
        p.add(chartPanel, BorderLayout.CENTER);
        p.add(controlPanel, BorderLayout.SOUTH);
        return p;
    }

    private static class UpdateAction extends AbstractAction {

        private final XYPlot plot;

        public UpdateAction(CombinedDomainXYPlot plot, int i) {
            super("Update plot " + (i + 1));
            this.plot = (XYPlot) plot.getSubplots().get(i);
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            plot.setDataset(CombinedPlot.generateData());
        }
    }

    private static XYSeriesCollection generateData() {
        XYSeriesCollection data = new XYSeriesCollection();
        for (int i = 0; i < MAX; i++) {
            data.addSeries(generateSeries("Series " + (i + 1)));
        }
        return data;
    }

    private static XYSeries generateSeries(String key) {
        XYSeries series = new XYSeries(key);
        for (int i = 0; i < 16; i++) {
            series.add(rand.nextGaussian(), rand.nextGaussian());
        }
        return series;
    }
}
 类似资料:
  • 正如标题所说:如何将水平滚动条添加到我用JFreeChart创建的阴阳烛图表中?我希望用户在放大时能够水平滚动图表。现在放大起作用了,但我不能向左或向右移动。我试着把图表面板放入JScrollPane,但那是一个图表面板,而不是图表本身。我自定义的ChartPanel构造函数: 我的自定义Jboard,我在其中创建图表和图表面板,并将图表面板放在JScrollPane中: 然后,我将MyCandl

  • 有人知道如何在甘特图中的特定位置移动/绘制虚线吗?例如,我有这样的图表: 链接到图像 很难看到任务1和任务2以及任务3在哪里。 如果可能的话,画水平线不是在1,2,3线,而是在整个系列之后,以明确视觉分隔符。 谢谢

  • 实现水平方向的UITableView,即将TableView做90度的旋转。可以作为scrollView使用。注意,往表里添加内容的时候,一定要把cell也进行一定角度的旋转,不然内容会出现倒置的。 [Code4App.com]

  • 水平切分支架。 定义一个基本的“水平分片”系统,该系统允许会话在多个数据库中分发查询和持久性操作。 有关用法示例,请参见 水平切分 源分发中包含的示例。 API文档 Object Name Description ShardedQuery ShardedSession class sqlalchemy.ext.horizontal_shard.ShardedSession(shard_choose

  • 我想做的从右到左滚动与我猜将是一个recylcer视图,但不确定是否是这个。我只是需要有人给我指明正确的方向。我想我需要一个内部布局的回收视图。 如果有人能指点我在哪里找到答案,我会变得很伟大!

  • 问题内容: 我正在尝试创建一系列只能水平滚动的照片。 它应该看起来像这样的 但是,只有通过指定包含照片的的宽度,才能实现上述目的(因此它们不会“自动换行”)。如果我不放宽- 看起来像这样; 使用CSS可以防止固定宽度的图像发生变化,该怎么办。 谢谢 问题答案: 您可以使用与。这样写: