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

java jfreechart库气泡大小问题

洪雨石
2023-03-14

我有一个jfreechart应用程序,它在气泡图中显示三个变量的值。我有问题,使图表显示的泡泡。只有当你试图缩小时,它才是可见的。但是如果Ii将第三列/数组中的值更改为整数,如1、2、3、4、5,气泡开始变得可见。拜托谁能帮帮我。我希望气泡有一个特定的大小为所有绘制的点。

下面是我的源代码:

package javaapplication2;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Shape;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.DefaultXYZDataset;
import org.jfree.data.xy.XYZDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.util.ShapeUtilities;

public class JavaApplication2 extends ApplicationFrame {

    public JavaApplication2(String s) {
        super(s);
        JPanel jpanel = createDemoPanel();
        jpanel.setPreferredSize(new Dimension(560, 370));
        setContentPane(jpanel);
    }

    private static JFreeChart createChart(XYZDataset xyzdataset) {
        JFreeChart jfreechart = ChartFactory.createBubbleChart(
            "AGE vs WEIGHT vs WORK",
            "Weight",
            "AGE",
            xyzdataset,
            PlotOrientation.HORIZONTAL,
            true, true, false);
        XYPlot xyplot = (XYPlot) jfreechart.getPlot();
        xyplot.setForegroundAlpha(0.65F);
        XYItemRenderer xyitemrenderer = xyplot.getRenderer();
        xyitemrenderer.setSeriesPaint(0, Color.blue);
        NumberAxis numberaxis = (NumberAxis) xyplot.getDomainAxis();
        numberaxis.setLowerMargin(0.2);
        numberaxis.setUpperMargin(0.5);
        NumberAxis numberaxis1 = (NumberAxis) xyplot.getRangeAxis();
        numberaxis1.setLowerMargin(0.8);
        numberaxis1.setUpperMargin(0.9);

        return jfreechart;
    }

    public static XYZDataset createDataset() {
        DefaultXYZDataset defaultxyzdataset = new DefaultXYZDataset();

        double ad[] = {426081.759473, 426095.238564, 426109.490941, 426121.967623, 426130.564392, 426138.69481};
        double ad1[] = {113322.88289, 113271.915074, 113221.586484, 113172.511533, 113128.370338, 113085.254484};
        double ad2[] = {0.460819752574555, 0.850726080807893, 0.571903719860673, -0.013658463858901, -0.231945599223777, -0.256564887488579};
        double ad3[][] = {ad, ad1, ad2};
        defaultxyzdataset.addSeries("Series 1", ad3);

        return defaultxyzdataset;
    }

    public static JPanel createDemoPanel() {
        JFreeChart jfreechart = createChart(createDataset());
        ChartPanel chartpanel = new ChartPanel(jfreechart);

        chartpanel.setDomainZoomable(true);
        chartpanel.setRangeZoomable(true);

        return chartpanel;
    }

    public static void main(String args[]) {
        JavaApplication2 bubblechart = new JavaApplication2("Bubble Chart_frame");

        bubblechart.pack();
        RefineryUtilities.centerFrameOnScreen(bubblechart);
        bubblechart.setVisible(true);
    }
}

共有1个答案

冷翼
2023-03-14

默认情况下,chartfactory.createBubbleChart()指定一个XYBubbleRenderer具有Scale_on_range_axis,但是x和y数据比z数据大几个数量级。因此,没有像素是可见的。您可能需要对数据进行缩放以获得所需的效果。您可以通过使用默认呈现器并使用上下文菜单(右键单击)在两个轴上放大来查看对数据的影响:

XYBubbleRenderer renderer = new XYBubbleRenderer(); //SCALE_ON_BOTH_AXES
xyPlot.setRenderer(renderer);

在下面的参考示例中,我在垂直图中使用了更简单的数据来简化实验。请注意,(1,1)、(2,2)和(3,3)处气泡的大小与z坐标的比值为:2/3:3:4/3

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBubbleRenderer;
import org.jfree.data.xy.DefaultXYZDataset;
import org.jfree.data.xy.XYZDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import static org.jfree.chart.renderer.xy.XYBubbleRenderer.*;

/** @see http://stackoverflow.com/a/41575283/230513 */
public class BubbleChartTest extends ApplicationFrame {

    public BubbleChartTest(String s) {
        super(s);
        JPanel jpanel = createDemoPanel();
        jpanel.setPreferredSize(new Dimension(560, 370));
        setContentPane(jpanel);
    }

    private static JFreeChart createChart(XYZDataset xyzDataset) {
        JFreeChart jfreechart = ChartFactory.createBubbleChart(
            "X vs Y vs Z", "X", "Y", xyzDataset,
            PlotOrientation.VERTICAL, true, true, false);
        XYPlot xyPlot = (XYPlot) jfreechart.getPlot();
        xyPlot.setForegroundAlpha(0.5F);
        XYBubbleRenderer renderer = new XYBubbleRenderer(SCALE_ON_BOTH_AXES);
        xyPlot.setRenderer(renderer);
        renderer.setSeriesPaint(0, Color.blue);
        NumberAxis domain = (NumberAxis) xyPlot.getDomainAxis();
        domain.setLowerMargin(0.2);
        domain.setUpperMargin(0.4);
        NumberAxis range = (NumberAxis) xyPlot.getRangeAxis();
        range.setLowerMargin(0.2);
        range.setUpperMargin(0.4);

        return jfreechart;
    }

    public static XYZDataset createDataset() {
        DefaultXYZDataset dataset = new DefaultXYZDataset();
        double a[][] = {
            {1, 2, 3},
            {1, 2, 3},
            {2 / 3d, 3 / 3d, 4 / 3d}
        };
        dataset.addSeries("Series", a);
        return dataset;
    }

    public static JPanel createDemoPanel() {
        JFreeChart chart = createChart(createDataset());
        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setDomainZoomable(true);
        chartPanel.setRangeZoomable(true);
        return chartPanel;
    }

    public static void main(String args[]) {
        BubbleChartTest test = new BubbleChartTest("Bubble Chart");
        test.pack();
        RefineryUtilities.centerFrameOnScreen(test);
        test.setVisible(true);
    }
}
 类似资料:
  • 定义 气泡组件。 图片展示 代码演示 import Popover from 'pile/dist/components/popover' const {Tooltip} = Popover <Tooltip overlay={"说明文字"} placement='left' isShow={popleftshow} idName='newIndex' setTooltipC

  • 气泡图以气泡的形式可视化度量和维度。 气泡图是一组圆圈。维度字段的每个值表示圆圈,度量值表示这些圆圈的大小。 设置气泡的颜色以区分维度中存在的成员。以下是创建气泡图的步骤。 例如,考虑数据源(如样本超市),以及是否要查找不同出货模式的利润。然后, 第1步:拖动度量利润(Profit)并拖放到“大小(Size)”窗格中。 第2步:拖动维度Ship Mode并放入“Labels”窗格。 第3步:同时将

  • 主要内容:什么是JFreeChart 气泡图,JFreeChart 气泡图的示例什么是JFreeChart 气泡图 气泡图以三维方式表示信息。此图表是散点图(XY 图表)的变体,其中数据点由气泡替换,数据的附加维度(z 值)以气泡的大小表示。 下图显示了 JFreeChart 库中包含的气泡图的一些演示版本: JFreeChart 气泡图的示例 让我们考虑以下气泡图的示例数据。 国家 汽车 公交车 卡车 印度 40 65 70 美国 30 20 50 中国 80 50 80

  • 本章节我们将为大家介绍 Highcharts 的气泡图。 我们在前面的章节已经了解了 Highcharts 配置语法。接下来让我们来看下 Highcharts 的其他配置。 配置 chart 配置 配置 chart 的 type 为 'bubble' 。chart.type 描述了图表类型。默认值为 "line"。 chart.zoomType 属性可配置图表放大 ,通过拖动鼠标进行缩放,沿x轴或

  • 嗨,我用冒泡排序查看了其他帖子,但解决方案在我的例子中不起作用:所以算法在我循环时重复了几次之后才起作用。但我如何在不使用输入的情况下做到这一点?这是我的代码,你知道我的意思:

  • 气泡图用于同时显示三维数据。气泡的位置由前两个维度以及相应的水平和垂直轴线确定。第三个维度由单个气泡的大小来表示。 new Chart(document.getElementById("chartjs-6"),{"type":"bubble","data":{"datasets":[{"label":"First Dataset","data":[{"x":20,"y":30,"r":15},{"