【问题标题】:Draw Gaussian curve in Java用Java绘制高斯曲线
【发布时间】:2009-03-31 21:33:16
【问题描述】:

我正在使用Piccolo 编写一个交互式小程序,我需要在其中包含一条高斯曲线(又名Normal distribution chart)。

我想任何一种 Java 实现都足够了,但我找不到。理想情况下,我想传递一组值并将图表绘制在面板、图像对象或任何可以嵌入到小程序中的东西中。

在自己动手编写代码之前,有没有人知道有一段工作代码可以做到这一点?

欢迎使用其他语言的实现,只要它们易于移植到 Java。

【问题讨论】:

  • 您在数学或库方面有问题吗?
  • 只是库 :) 我可以自己编写代码,但不想重新发明轮子并浪费时间;)

标签: java applet charts piccolo


【解决方案1】:

不知道它是否有效,但谷歌抛出了this code to plot a Gaussian distribution

这个项目的主页是here

如果 Piccolo 没有为您执行绘图,我可能会使用 JFreeChart 进行实际绘图,因为它得到了广泛的支持并且非常强大。 (我对短笛不熟悉)

【讨论】:

  • 看起来很有希望;在谷歌上没找到。如果可行,我会尝试并接受这个答案,谢谢:)
  • 最后,我没有使用高斯图,而是使用传统的条形图。无论如何,这个答案是最好的,因为你提供了一个工作代码的链接(尽管约翰也给出了一些很好的例子),所以我接受它。
【解决方案2】:

编辑:看起来Apache Commons Math library 有一个统计部分。具体来说,一个完整的包在公共Distributions 上。希望那里有一些数学人,因为我不记得基本的统计数据……这是我尝试使用他们的库的尝试。我这里只有一个滑动窗口并计算这些值之间的 P。从中获取 PDF 的真正方法是什么?它们只有一个 CDF 函数。

public void testNormalDist() throws MathException {
    DistributionFactory f = DistributionFactory.newInstance();
    NormalDistribution n = f.createNormalDistribution(0.0d, 1.0d);
    double lastx = Double.NEGATIVE_INFINITY;
    double nextx = Double.NEGATIVE_INFINITY;
    for (int i=-100; i < 100; i++) {
        nextx = i / 100d;
        System.out.println(n.cumulativeProbability(lastx, nextx));
        lastx = nextx;
    }
}

我假设您想要图表的概率密度函数。 equations are on wikipedia,因为我不知道如何在此处包含数学标记。只需使用 p(x) 作为您的 Y 值和 X 作为您的 X 值,您就可以从中得到一个非常简单的二维图。

你看过Mathtools under Java吗?

好的,这个怎么样...你给它一个 X 点数组(标准化,当然,你可以通过将每个像素位置除以图像的宽度来将你的 X 像素转换为这些),它会返回分布曲线的高度(再次乘以归一化因子)。这是平均值为 0,标准差为 1 的基本情况。

public double[] normalDistBasic(double[] xarray, double mu) {
    double[] yarray = new double[xarray.length];
    double rad2pi = 2.50662827d;
    for (int off = 0; off < yarray.length; off++) {
        double x = xarray[off];
        double ss = -1d * x * x / 2d;
        yarray[off] = (-1f / rad2pi) * Math.exp(ss);
    }
    return yarray;
}

如果在网上找不到,那么实现一个采用任意均值和标准差的方法应该很容易。

【讨论】:

  • 是的,我已经看到了这些方程式,如果我找不到已经工作的库,我会使用这些方程式。还是谢谢!
  • 听起来不错!我搜索得越多,我认为我必须自己编写代码,所以这真的很受欢迎。谢谢!
猜你喜欢
  • 2023-03-17
  • 2019-08-14
  • 2012-03-02
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2021-10-14
相关资源
最近更新 更多