数字轴 setTickUnit 包含指定数字

2024-03-10

我使用 JFreeChart 显示正态分布,并将刻度数更改为标准差;但我也希望在刻度出现的中间始终存在“平均”值。交叉发布.

所以标准差 = 2 ;平均值 = 1

-3 -1  1 3 5

标准差 = 5 ;平均值 = 15

0 5 10 15 20 25 30

JFreeChart.java

public class JFreeChartPanel extends JPanel {
    private final XYPlot plot;
    double mean = 0.0, sd = 1.0;
    XYDataset dataset = initDataset();
    NumberAxis domain = new NumberAxis("Y") {
    @Override
    protected double calculateLowestVisibleTickValue() {
        double lowTickValue = super.calculateLowestVisibleTickValue();
        if (mean % 2 == 1) {
            return lowTickValue + 1;
        } else {
            return lowTickValue;
        }
    }
};
    public JFreeChartPanel(){
        JFreeChart chart = ChartFactory.createXYLineChart(
            "Normal Distribution",
            "X", 
            "PDF", 
            dataset,
            PlotOrientation.VERTICAL,
            false,
            false,
            false
        );
        plot=chart.getXYPlot();
        domain.setAutoRangeStickyZero(false);
        domain.setTickUnit(new NumberTickUnit(sd));
        plot.setDomainAxis(domain);
        final ChartPanel chartPanel = new ChartPanel(chart);
        setLayout(new BorderLayout());
        add(chartPanel);
    }

    private XYDataset initDataset() {
        double minX=mean-(4*sd),maxX=mean+(4*sd);
        Function2D normal = new NormalDistributionFunction2D(mean, sd);
        XYDataset dataset = DatasetUtilities.sampleFunction2D(normal, minX, maxX, 100, "Normal");
        return dataset;
    }

    public double getMean() {
        return mean;
    }

    public void setMean(double mean) {
       this.mean = mean;
       plot.setDataset(initDataset());
    }

    public double getSd() {
        return sd;
    }

    public void setSd(double sd) {
        this.sd = sd;
        domain.setTickUnit(new NumberTickUnit(sd));
        plot.setDataset(initDataset());
    }
}

UI.java

public class UI extends javax.swing.JFrame {

    public UI() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    private void initComponents() {
      Auto-generated Netbeans GUI COde
    }                     

    public void updateMean()
    {
        try{
            double m = Double.parseDouble(mean.getText());
            jFreeChartPanel.setMean(m);
        }catch(Exception e){
        }
    }
    public void updateSd()
    {
        try{
            double sd = Double.parseDouble(standardDeviation.getText());
            jFreeChartPanel.setSd(sd);
        }catch(Exception e){
        }
    }

    public static void main(String args[]) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Windows".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {

        }
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UI().setVisible(true);
            }
        });
    }

    private javax.swing.JPanel inputPanel;
    private main.JFreeChartPanel jFreeChartPanel;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JToggleButton jToggleButton1;
    private javax.swing.JTextField mean;
    private javax.swing.JLabel meanLabel;
    private javax.swing.JTextField standardDeviation;
    private javax.swing.JLabel standardDeviationLabel;
}

从此开始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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数字轴 setTickUnit 包含指定数字 的相关文章

  • 将 allMatch、noneMatch 和 anyMatch 合并到单个流上

    我想要以下逻辑 我知道它不起作用 因为它多次消耗流 但我不知道如何实现它 Stream
  • Java中如何合并两个数组?

    它不是连接而是合并两个数组 使它们成为名称值对的数组 firstarray a aa aaa secondarray b bb bbb result a b aa bb aaa bbb 最好的方法是什么 in Java public sta
  • Java 7u51/7u55 带星号的清单变量

    我正在部署一个小程序 其中包含清单中的下一个变量 Manifest Version 2 0 Ant Version Apache Ant 1 8 2 Trusted Library true Permissions all permissi
  • 从 Eclipse 导出后,WAR 文件中缺少一些必要的库 - 为什么?

    我接手了一个大学的项目 其中包含一些 Web 服务 通过将项目导出为 WAR 文件 一些库包含在文件中 例如 Axis2 而另一些则不包含 hibernate JDBC 驱动程序 另外 添加到类路径中的 jar 尚未导出 所有库都位于硬盘驱
  • 如何在android中使用retrofit访问404错误?

    我正在使用改造 2 访问 REST API 以使用原始正文插入 JSON 数据 我从服务器获得成功响应 但在响应时收到 404 错误 我想访问404错误请帮我解决这个问题 ApiUtil getServiceClass sendFinalC
  • JSF-2 应用程序中的服务器端计时器

    在我正在开发的 JSF 2 应用程序中 当用户执行操作时 我需要启动服务器端计时器 这个计时器必须与应用程序本身相关 因此它必须在用户会话关闭时继续存在 为了解决这个问题 我想使用 java util Timer 类在应用程序范围的 bea
  • Java 套接字 - 读和写

    问题 客户端没有收到任何消息 这是客户端和服务器的完整代码 CLIENT public class Client extends Socket public Client String hostName int port throws Un
  • 如何在 PuTTY 中保存并运行 Java 文件?

    我是 AWS 亚马逊网络服务 的新手 所以这可能是一个基本问题 我在 AWS 上创建了一个 EC2 实例 我有一台 Windows 计算机 因此我使用 PUTTY 来连接 Linux 实例 连接到我的 EC2 实例后 我使用以下命令编写 J
  • 无法删除临时文件夹(有时)

    当我启动应用程序时 我创建一个临时文件夹 public static File createTempDir String name throws IOException File tempDir File createTempFile na
  • 如何组合 3 个或更多 CompletionStages?

    如果有 2 个 CompletionStages 我可以将它们与thenCombine method CompletionStage a aCompletionStage getA CompletionStage b bCompletion
  • 覆盖Java中的属性[重复]

    这个问题在这里已经有答案了 在 Java 中 我最近有几个项目 我使用了这样的设计模式 public abstract class A public abstract int getProperty public class B exten
  • java charAt() 和startsWith() 哪个更快? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我的问题是 如果我想检查特定索引中字符串的一个字符 仅检查一个字符 哪种方法非常有效charAt or startsWith 我的意思是 据我所
  • 有没有办法删除 JShell 中的导入?

    我正在发现 JShell 并且发现默认添加的导入 jshell gt imports import java io import java math import java net import java nio file import j
  • 从 Java 应用程序读取的文件是否会调用系统调用?

    我的理解是 请求文件系统路径 例如 aFile 的用户应用程序将调用文件系统并获取所请求文件的虚拟地址 然后应用程序将尝试以该地址作为参数 即作为 CPU 指令 进行读 写操作 执行读取命令时 内存管理单元会将该地址转换为物理地址 并查看页
  • 为什么 CompletableFuture 的 thenAccept() 不在主线程上运行

    我在 CompletableFuture 的 SupplyAsync 中处理长时间运行的操作 并将结果放入 thenAccept 中 有时 thenAccept 在主线程上执行 但有时它在工作线程上运行 但我只想在主线程上运行 thenAc
  • 图标和导航视图之间的左边距

    我必须在图标和图标之间添加左边距NavigationView 如下图中箭头所示 我知道根据谷歌规范 这个边距必须有16dp但我需要改变它 我努力了
  • Java 9:AES-GCM 性能

    我进行了一个简单的测试来测量AES GCM https en wikipedia org wiki Galois Counter Mode表现在Java 9 通过在循环中加密字节缓冲区 结果有些令人困惑 本机 硬件 加速似乎有效 但并非总是
  • 隐藏 JTable 临时列

    我正在使用 JTable 显示数据库中的数据 现在我想通过 Jcombobox 过滤我的 jtable 我正在使用 Jcombo 框 其中包含 030 024 045 等值 这些值已在 jtable 中设置为列标题 当我单击组合时 选定的列
  • “mvn”不被识别为内部或外部命令、可操作程序或批处理文件

    可能是之前问过问题 但我发现了非常奇怪的错误 当我跑步时mvn versionbin 中的命令给出了版本和其他信息 但是 当我跑到垃圾箱外面时 它会出现异常 下面提到的结果 C Program Files apache maven 3 0
  • 为什么我们不能在函数式接口中重载抽象方法? (爪哇)

    所以我熟悉java中的函数式接口 以及它们与lambda表达式的使用 一个函数式接口只能包含一个抽象方法 当从 lambda 表达式使用这一孤独方法时 您不需要指定其名称 因为接口中只有一个抽象方法 编译器知道这就是您正在引用的方法 Exa

随机推荐

  • Silverlight 控件由于命令而未被垃圾回收

    我的控制之所以能保持活力 是因为它必须服从命令 我怎样才能打破这个参考 这导致我的应用程序中出现严重的内存泄漏 该控件位于 DataTemplate 内部 因此我无法直接访问它 这是我的 ANTS 内存配置文件 我到底该如何断开这种连接 虽
  • 有没有办法通过为每个测试打开浏览器实例来并行运行量角器测试?

    我的量角器测试面临同步问题 我想与我的实际设置相比并行运行我的测试 事实上 目前我的测试一个接一个地运行 我知道如何使用 TestsNG 执行此操作 但不确定如何使用 Jasmin Framework 执行此操作 要在两个浏览器之间分配测试
  • IDEA Groovy 测试类已经存在

    IDEA 向我的 groovy 类发出警告 类 MyClassTest 已存在于 my class package 中 当我运行测试时 它似乎也没有很好地保持类的更新 我将添加一个保证失败或成功的断言 直到稍后它才会识别它 到目前为止似乎是
  • 确定 Java 中的有效日期

    我有一个家庭作业 要求用户以 mm dd yyyy 格式在 Java 中输入日期 然后确定输入的日期是否有效 我已经能够成功地对每个月 除了二月 执行此操作 因为您必须考虑闰年 我有这个代码 import java util Scanner
  • 使用 WPF 将二进制文件检索回图像和数据库并保存到文件夹中

    我已成功将图像转换为二进制并使用 linq to sql WPF 将其保存到数据库中 现在我想将其检索回图像格式并将其保存到计算机中的特定文件夹中 我读过很多博客和文章 它们从数据库检索图像二进制文件 然后将其显示到 PictureBox
  • 如何在Python中正确编码json转储[重复]

    这个问题在这里已经有答案了 我有一个 python 3 脚本 应该从 csv 文件获取一些数据并将其写入 json 文件 在我的处理过程中 编码是正确的 因此德语变音 或度数符号 就像它们本来的样子 coding cp1252 在头部 但是
  • 使用布尔索引复制或查看 numpy 子数组

    给定一个 2D numpy 数组 即 import numpy as np data np array 11 12 13 21 22 23 31 32 33 41 42 43 我需要创建一个新的子数组 或者根据所需行和列的两个掩码向量修改选
  • 在 Python ConfigParser 中按字母顺序导出

    是否有任何解决方案可以强制 RawConfigParser write 方法按字母顺序导出配置文件 即使原始 加载的配置文件已排序 模块也会任意地将节和选项混合到节中 并且手动编辑巨大的未排序配置文件确实很烦人 PD 我正在使用 pytho
  • 为什么 WriteResultChecking 默认设置为 NONE?

    根据Spring Data MongoDB 文档 http docs spring io spring data mongodb docs current reference html mongo template writeresultc
  • 在 TFS 2012 中运行 Jasmine 的 Chutzpah 找不到测试中的引用文件

    我正在使用 Chutzpah 来运行我们的 Jasmine 测试 我已将 Chutzpah dll 添加到解决方案中 并更新了构建以运行 js 测试 项目结构如下 MyApp Web Scripts App Home DateControl
  • AVPlayer播放ts文件

    我想从服务器播放 ts 文件 void play NSURL url NSURL URLWithString http 10 0 0 18 11 ts player AVPlayer alloc initWithURL url player
  • 使用 Datagridview C# 进行多线程处理

    这里我正在做一个检查用户名的过程 我创建了一个 datagridview 并从文本文件加载了数据 因此 datagridview 在前两列中包含用户的名字和姓氏 我需要做的是逐行读取这些值 并发现第一个和最后一个没有相同的名称 这些操作是在
  • 当你没有 Linq 时像 Linq 一样查询

    我目前正在开发一个项目 但它目前仅支持 net Framework 2 0 我喜欢linq 但由于框架版本的原因我无法使用它 我想要的并不是 ORM 方面的东西 而是 Linq 的 可查询性 这甚至是一个词吗 到目前为止最接近的是llblg
  • Laravel 无法连接到数据库

    我正在跟踪快速入门指南 http laravel com docs quick displaying data 并到达实际连接到数据库以获取用户表的部分 并收到以下错误 SQLSTATE 28000 1045 用户 root localho
  • a、&a 和 &a[0] 之间的类型区别是什么?

    include
  • 如何从 Dom4j Node.selectObject 或 Node.selectNodes 获取字符串列表

    希望你有美好的一天 Dom4j javadoc 表单Node selectObject String xpathExpression 说如下 返回的对象可以是一个或多个 Node 实例的列表 也可以是标量对象 例如String或 Numbe
  • TortoiseHg 更新后 Mercurial 无法工作

    我最近将 TortoiseHg 更新到 2 0 3 使用 Mercurial 1 8 2 更新后 Mercurial 不再通过命令行 Windows 7 x64 运行 但可以通过 TortoiseHg GUI 运行 尝试通过命令行使用任何
  • 如何从 Instagram API 获取历史数据

    我正在制作一个 Instagram 分析网络应用程序 我仔细阅读了所有 Instagram API 端点 但找不到任何方法来获取历史数据 即一段时间内的关注者 我所需要的只是一个类似日期的东西 附加到每个关注者对象上 不过 有一些 Inst
  • 如何控制rpmbuild的buildroot和安装目录

    我对 rpmbuild 中的一些目录感到困惑 1 buildroot 用于存储最终用户安装二进制包时应安装的文件 问题 如何控制这个目录 构建根是什么意思 cat 3 spec BuildRoot opt abc prep echo bui
  • 数字轴 setTickUnit 包含指定数字

    我使用 JFreeChart 显示正态分布 并将刻度数更改为标准差 但我也希望在刻度出现的中间始终存在 平均 值 交叉发布 所以标准差 2 平均值 1 3 1 1 3 5 标准差 5 平均值 15 0 5 10 15 20 25 30 JF