用Java绘制高斯曲线

时间:2009-03-31 21:33:16

标签: java applet charts piccolo

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

我想任何类型的Java实现都足够了,但我找不到任何。理想情况下,我想传递一组值,并在面板,图像对象或可嵌入applet中的任何内容中绘制图表。

在亲自编写自己的代码之前,是否有人知道要执行的代码?

欢迎使用其他语言的实现,只要它们可以轻松移植到Java。

2 个答案:

答案 0 :(得分:4)

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

此项目的主页为here

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

答案 1 :(得分: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;
}

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