从此开始example https://stackoverflow.com/a/40167139/230513,我根据您的修改进行了以下更改,以获得如下所示的 µ=15 和 σ=5 的结果:
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
…
private double mean = 15.0, sigma = 5.0;
…
private XYDataset initDataset() {
double minX = mean - (3 * sigma), maxX = mean + (3 * sigma);
Function2D normal = new NormalDistributionFunction2D(mean, sigma);
XYDataset dataset = DatasetUtilities.sampleFunction2D(normal, minX, maxX, 100, "Normal");
return dataset;
}
…
public JFreeChartPanel() {
…
plot = chart.getXYPlot();
NumberAxis domain = (NumberAxis) plot.getDomainAxis();
domain.setTickUnit(new NumberTickUnit(sigma));
…
}
您的另一种情况,μ=1 和 σ=2,需要覆盖NumberAxis
method calculateLowestVisibleTickValue()
使刻度落在奇数上。
NumberAxis domain = new NumberAxis("Y") {
@Override
protected double calculateLowestVisibleTickValue() {
double lowTickValue = super.calculateLowestVisibleTickValue();
if (mean % 2 == 1) {
return lowTickValue + 1;
} else {
return lowTickValue;
}
}
};
domain.setTickUnit(new NumberTickUnit(sigma));
plot = chart.getXYPlot();
plot.setDomainAxis(domain);
为什么图表对于平均值 3 和标准差 1 以及平均值 6 sd 2、平均值 9 sd 3 等都略有倾斜;这里有一个picture https://i.stack.imgur.com/PwzV8.jpg显示这个。
正如所讨论的,有一个“当自动确定范围时影响添加到轴范围的边距大小的标志。”
domain.setAutoRangeStickyZero(false);
我添加了...代码。
添加您的实例修订版6 https://stackoverflow.com/revisions/40184461/6 JFreeChartPanel
to a JFrame
µ=1 且 σ=2 产生以下结果:
这种情况发生在均值较高的情况下。
您可以从自动范围中排除零。
domain.setAutoRangeIncludesZero(false);