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

JFreeChart简单图(抛物线)

呼延沈义
2023-03-14
问题内容

我使用JFreeChart编写了一个简单的抛物线图。

package parabolademo;

import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.function.Function2D;
import org.jfree.data.function.PolynomialFunction2D;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;


public class ParabolaDemo extends ApplicationFrame {

/*
 * @param title  the frame title.
 */
public ParabolaDemo(final String title) {

    super(title);
    double[] a = {0.0, 0.0, 3.0};
    Function2D p = new PolynomialFunction2D(a);
    XYDataset dataset = DatasetUtilities.sampleFunction2D(p, -20.0, 20.0, 100, "Function");
    final JFreeChart chart = ChartFactory.createXYLineChart(
        "Parabola",
        "X", 
        "Y", 
        dataset,
        PlotOrientation.VERTICAL,
        true,
        true,
        false
    );

    final ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.addChartMouseListener(new ChartMouseListener() {

        @Override
        public void chartMouseClicked(ChartMouseEvent cme) {
            Point2D po = chartPanel.translateScreenToJava2D(cme.getTrigger().getPoint());
            Rectangle2D plotArea = chartPanel.getScreenDataArea();
            XYPlot plot = (XYPlot) chart.getPlot(); // your plot
            double chartX = plot.getDomainAxis().java2DToValue(po.getX(), plotArea, plot.getDomainAxisEdge());
            double chartY = plot.getRangeAxis().java2DToValue(po.getY(), plotArea, plot.getRangeAxisEdge());
            System.out.println("Clicked!");
            System.out.println("X:" + chartX + ", Y:" + chartY);
        }

        @Override
        public void chartMouseMoved(ChartMouseEvent cme) {

        }
    });
    chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
    setContentPane(chartPanel);
}

public static void main(final String[] args) {

    final ParabolaDemo demo = new ParabolaDemo("Parabola Plot Demo");
    demo.pack();
    RefineryUtilities.centerFrameOnScreen(demo);
    demo.setVisible(true);
}

}

如何获取功能图点的坐标(我的chartMouseListener获取窗口中任意点的坐标)?用户移动鼠标并释放鼠标按钮后如何接收点坐标?我希望单击鼠标时,绘图的点紧跟鼠标,因此将重新构建绘图(为此,有必要再次计算系数,同时要知道该坐标并采用其他任意两个坐标)。怎么做?如何用新系数重建图?


问题答案:

给定一个ChartMouseEvent名为cmd,忽略任何类型的实体 其他XYItemEntity。知道实体后,请勿插值-
只需查询数据集即可。

ChartEntity ce = cme.getEntity();
if (ce instanceof XYItemEntity) {
    XYItemEntity e = (XYItemEntity) ce;
    XYDataset d = e.getDataset();
    int s = e.getSeriesIndex();
    int i = e.getItem();
    System.out.println("X:" + d.getX(s, i) + ", Y:" + d.getY(s, i));
}

还可以考虑调用setBaseShapesVisible(true)绘图的渲染器。



 类似资料:
  • 我使用JFreeChart编写了一个简单的抛物线图。 } 如何获得函数绘图点的坐标(我的chartMouseListener获得窗口中任意点的坐标)?如何接收点坐标后,用户移动鼠标和释放鼠标按钮?我希望当点击鼠标,点的曲线跟随鼠标,这样的曲线将被重建(为此目的,有必要再次计算系数,知道这个坐标和采取任何2个其他坐标)。怎么做?如何用新系数重建图?

  • 我使用的是JFreeChart,我希望有一个只有一个维度的图表:一个X轴(表示毫秒)和形状(表示事件)。 我创建了一个XYLineChart和一个带有隐藏y轴的XYPlot: 在数据集中,我使用了一个固定的y坐标。 显然,如果存在另一种适当的图表类型会更好。 多谢.

  • 到这时,我们算搭建了一个简单的REST服务了。接着我们可以简单的做一个最小的物联网系统,将我们的单片机、MCU等等连上网。 硬件结构图 考虑到如果我们只是单一连接各个节点,那么系统的结构图,同下所示 全连接 下面的星形结构图类似于我们在接下来所要构建的系统 星形结构图 一个用于控制真实电器的硬件实物图 简单实物图 18.1 硬件通信 18.1.1 串口通信 Arduino与Raspberry Pi

  • 本文向大家介绍JFreeChart简单实现光滑曲线绘制,包括了JFreeChart简单实现光滑曲线绘制的使用技巧和注意事项,需要的朋友参考一下 用JFreeChart绘制光滑曲线,利用最小二乘法数学原理计算,供大家参考,具体内容如下 绘制图形:   代码: FittingCurve.java 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 我尝试在图表中表示的数据通常会显示沿底部或x轴的时间戳记(日期和时间)以及各种数据(将来将始终是简单的整数或可能是浮点数据)在左轴上显示。基本上,它将沿着底部映射事件,例如沿左侧映射性能。 我正在使用JFreeChart,但是不幸的是,不存在对开发人员的支持,因此我不会为他们的教程付费。我马上就可以看到许多可以使用的图表类型,这篇文章要求我使用最合适的集合和图表对象。 最初,我使用XY

  • 主要内容:什么是JFreeChart 折线图,JFreeChart 折线图的示例什么是JFreeChart 折线图 折线图是由直线段连接的一系列点。信息通过这些连接线显示。折线图表示数据如何以相同的时间频率变化。 下图显示了 JFreeChart 库中包含的折线图的一些演示版本: JFreeChart 折线图的示例 让我们考虑一个示例数据,它显示了我们网站www.xnip.cn上的流量数据。 日期 每日访客人数 2016-12-19 200 2016-12-20 150 20