gpt4 book ai didi

java - 防止 JFreeChart DialPlot 以大值环绕?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:07 24 4
gpt4 key购买 nike

我的数据值可以在 0-100 之间变化。我想显示一个显示范围 0-30 的 JFreeChart DialPlot,其中大于 30 的值通过将指针固定在 30 来显示,但真实值显示在刻度盘上。

下图显示了我的示例代码当前生成的内容:

当前输出

dial example

我在这里显示值 50。刻度盘环绕指向 14。我希望将它设置为最大值 (30),就像燃料刻度盘一样:

期望的输出

enter image description here

这可以用 JFreeChart 实现吗?下面的 SSCCE 代码。

public class DemoChartProblem {

private final DefaultValueDataset dataset = new DefaultValueDataset(50);
private final JFrame frame = new JFrame();

public static void main(String[] args) throws Exception {
new DemoChartProblem();
}

public DemoChartProblem() {
frame.setPreferredSize(new Dimension(300, 300));
frame.add(buildDialPlot(0, 30, 5));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.setVisible(true);
}
});
}

private ChartPanel buildDialPlot(int minimumValue, int maximumValue,
int majorTickGap) {

DialPlot plot = new DialPlot(dataset);
plot.setDialFrame(new StandardDialFrame());
plot.addLayer(new DialValueIndicator(0));
plot.addLayer(new DialPointer.Pointer());

StandardDialScale scale = new StandardDialScale(minimumValue, maximumValue,
-120, -300, majorTickGap, majorTickGap - 1);
scale.setTickRadius(0.88);
scale.setTickLabelOffset(0.20);
plot.addScale(0, scale);

return new ChartPanel(new JFreeChart(plot));
}
}

最佳答案

I would be interested to hear if there are better methods.

DialValueIndicatormaximumValue 之间的差异可能令人困惑。或者,使用 StandardDialRange 表示不同的范围:

int redLine = 3 * maximumValue / 5;
plot.addLayer(new StandardDialRange(minimumValue, redLine, Color.blue));
plot.addLayer(new StandardDialRange(redLine, maximumValue, Color.red));

设置框架的首选大小是 problematic .相反,覆盖 ChartPanelgetPreferredSize() 方法:

return new ChartPanel(new JFreeChart(plot)) {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
};

test image

关于java - 防止 JFreeChart DialPlot 以大值环绕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16163964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com