JFreeChart 中的 LogAxis 上未显示小刻度

2024-01-06

我在用着JFreeChart绘制一些数据并使用LogAxis对于范围轴。我很困惑为什么我似乎无法在轴上显示小刻度,但网格线显示得很好。

如果我不使用LogAxis我可以使用以下命令打开和关闭小刻度setMinorTickMarksVisible()。下面的例子:

public ChartOne(){

    XYSeriesCollection xysc = new XYSeriesCollection();

    XYSeries x1 = new XYSeries("Series 1");
    x1.add(0.5, 2);
    x1.add(1, 2.2);
    x1.add(2, 2.4);
    x1.add(10, 2.75);
    x1.add(30, 4);
    x1.add(120, 7);
    xysc.addSeries(x1);

    XYSeries x2 = new XYSeries("Series 2");
    x2.add(0.5, 6);
    x2.add(1, 7);
    x2.add(2, 8);
    x2.add(10, 14);
    x2.add(30, 18);
    x2.add(120, 22);
    xysc.addSeries(x2);

    XYDataset xyd = xysc;

    JFreeChart chart = ChartFactory.createXYLineChart(
            "Data",     
            "Exposure",                     
            "Percentage uptake",                    
            xyd,                 
            PlotOrientation.VERTICAL,
            false,                     
            true,                     
            false                     
            );

    LogAxis xAxis = new LogAxis("exposure time");
    xAxis.setBase(10);
    xAxis.setTickUnit(new NumberTickUnit(1.0, NumberFormat.getInstance(Locale.ENGLISH), 9));

    xAxis.setRange(0.1, 200.0);

    xAxis.setMinorTickMarksVisible(true); //they don't show up

    XYPlot plot = (XYPlot) chart.getPlot();
    plot.setDomainAxis(xAxis);
    plot.setDomainMinorGridlinesVisible(true);
    plot.setDomainGridlinePaint(Color.BLACK);
    plot.setDomainMinorGridlinePaint(Color.BLACK);
    plot.setBackgroundPaint(Color.WHITE);

    ChartPanel chartPanel = new ChartPanel(chart);

    add(chartPanel);

}

public static void main(String[] args) {
    JFrame frame = new JFrame("Chart");

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.getContentPane().add(new ChartOne(), BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);

}

注意当前的 x 轴(左)和带有小刻度的所需 x 轴效果示例(右)。


LogAxis https://github.com/jfree/jfreechart/blob/master/src/main/java/org/jfree/chart/axis/LogAxis.java支持网格线的小刻度,如您的片段所示。相比之下LogarithmicAxis https://github.com/jfree/jfreechart/blob/master/src/main/java/org/jfree/chart/axis/LogarithmicAxis.java允许完全自定义刻度线,如下所示。为了强调,刻度线的颜色和笔划已被夸大。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.BasicStroke;
import java.text.NumberFormat;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.LogarithmicAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

//** @see https://stackoverflow.com/a/54097313/230513 */
public class ChartOne {

    public static ChartPanel createChart() {

        XYSeriesCollection dataset = new XYSeriesCollection();
        XYSeries x1 = new XYSeries("Series 1");
        x1.add(0.5, 2);
        x1.add(1, 2.2);
        x1.add(2, 2.4);
        x1.add(10, 2.75);
        x1.add(30, 4);
        x1.add(120, 7);
        dataset.addSeries(x1);
        XYSeries x2 = new XYSeries("Series 2");
        x2.add(0.5, 6);
        x2.add(1, 7);
        x2.add(2, 8);
        x2.add(10, 14);
        x2.add(30, 18);
        x2.add(120, 22);
        dataset.addSeries(x2);

        JFreeChart chart = ChartFactory.createXYLineChart(
            "Data", "Exposure", "Percentage uptake", dataset,
            PlotOrientation.VERTICAL, false,  true, false);

        LogarithmicAxis xAxis = new LogarithmicAxis("Time");
        xAxis.setTickUnit(new NumberTickUnit(1.0, NumberFormat.getInstance(), 9));
                xAxis.setTickMarkInsideLength(2f);
                xAxis.setTickMarkOutsideLength(4f);
                xAxis.setTickMarkPaint(Color.GREEN);
                xAxis.setTickMarkStroke(new BasicStroke(2f));
        xAxis.setMinorTickMarksVisible(true);

        XYPlot plot = (XYPlot) chart.getPlot();
        plot.setDomainAxis(xAxis);
        plot.setDomainMinorGridlinesVisible(true);
        plot.setDomainGridlinePaint(Color.BLACK);
        plot.setDomainMinorGridlinePaint(Color.BLACK);
        plot.setBackgroundPaint(Color.WHITE);
        return new ChartPanel(chart){
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(600, 400);
            }
        };
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            JFrame frame = new JFrame("Chart");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(createChart(), BorderLayout.CENTER);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JFreeChart 中的 LogAxis 上未显示小刻度 的相关文章

  • 如何知道 HTTP 服务器何时完成发送数据

    我正在开发一个面向浏览器 代理的项目 我需要下载网页 向 Web 服务器发送自定义 HTTP 请求后 我开始监听服务器响应 读取响应时 我检查响应标头中的 Content Length row 如果我得到其中之一 很容易确定服务器何时完成发
  • HibernateTemplate 可以与 EntityManager 共存吗?

    我们有一个 spring 3 应用程序 它仍然使用已弃用的HibernateTemplate为了持久性并希望迁移到更现代的 JPAEntityManager 是否可以在迁移过程中并行使用这两个 API 甚至可能在单个事务中同时使用 以便我们
  • 无法执行目标 org.codehaus.mojo:exec-maven-plugin:1.5.0:exec

    三周前 我完成了一个网络应用程序的工作 一切都运行没有问题 现在 三周后 没有任何更改 我想再次运行该应用程序 但这次我收到以下错误消息 An error occurred while parsing the server response
  • 如何注入“运行时”依赖项,例如登录用户,该依赖项在应用程序启动时不可用?

    我只是不明白这个 我在我的 java GWT 应用程序中使用 Gin 来进行 DI 登录屏幕集成到完整的应用程序窗口中 用户登录后 我想将用户对象注入到我创建的其他类 例如 GUI Presenters 中 因此我相信存在某种运行时依赖性
  • 检查两个日期周期是否重叠[重复]

    这个问题在这里已经有答案了 我有两个日期范围 start1 end1 gt gt date1 start2 end2 gt gt date2 我想检查两个日期是否重叠 我的流程图我假设 运算符对于比较是有效的 boolean isOverL
  • Spring MVC 和 Struts MVC 之间的区别 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Spring MVC 和 Struts MVC 之间的主要区别是什么 Spring MVC 和 Struts 之间的主要区别是 Spr
  • 将 Swing 集成到简单的文本冒险游戏中

    我对 Java 中的一些中级概念相当陌生 最近 我制作了一款名为 DazzleQuest 的文本冒险游戏 它完全在开发者控制台 终端中运行 它涉及到我的朋友作为角色 所以我想向他们展示它 并通过将命令行的功能和控制台的输出转移到一个简单的
  • Cognito SRP 身份验证 JAVA SDK

    我正在尝试使用 Cognito 验证 Java 应用程序 我在Python中使用了warrant库 效果非常好 但我现在想在java中做同样的事情 我的 Python 函数用于身份验证warrant https github com cap
  • 如何在休眠中持久保存实体期间验证实体的约束

    我有一个带有字段名称的实体 我希望它不超过255 所以我这样定义它 Entity public class A implements Serializable NotNull Size max 255 private String name
  • Java TCP Echo 服务器 - 广播

    我有一个简单的回显服务器 我希望当连接的用户向服务器键入任何内容时 所有其他客户端和该客户端都会收到消息 MOD 它现在不会发送给所有客户端 但它应该发送 而且我只是不知道我的代码出了什么问题 所以现在它只会将消息 MOD 发送给发送消息的
  • 不带破折号的 CliBuilder 参数

    使用 Groovy CliBuilder 理想情况下我希望有一个命令行 如下所示 MyProgram groovy CommandName arg1 arg2 arg3 是否可以使用 CliBuilder 解析提取 CommandName
  • 如何在 WebSphere Liberty Batch 中配置事务超时?

    的作用是什么javax transaction global timeout 我是否需要实施检查点 超时 中的方法检查点算法 服务器配置级别有什么东西吗 它如何与应用程序级别的设置进行交互 2016年12月2日编辑 重新设计并解释了为应用程
  • toArray 与预先确定大小的数组

    使用时ar toArray new String ar size 安卓工作室3 2 1警告预先确定大小的数组并建议空数组 有两种方式将集合转换为数组 使用 预先确定大小的数组 如 c toArray new String c size 或使
  • BODMAS系统的加法和减法

    我一直在构建一个简单的公式计算器 但一直被加法和减法困扰 正如您应该知道的 在计算方程时 您遵循优先级算术规则 即括号 顺序 幂函数 除法 乘法 加法和减法 问题是加法和减法具有相同的优先级 因此您可以从左到右阅读 到目前为止 这是我的代码
  • 在Linux中执行jar文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我创建了一个可执行的 Java jar 文件 也就是说 我将 java 程序正确打包到 jar 文件中 包括 META INF MANIFEST 文件
  • 谷歌的Json解析Gson库:JsonElement和JsonObject有什么区别?

    public abstract class JsonElement extends Object 表示 Json 元素的类 它可以是 JsonObject JsonArray JsonPrimitive 或 JsonNull public
  • Java:易失性足以使类线程安全?

    我有一个关于 Java 中 volatile 语句的问题 请看这个构造的例子 class Master Foo is a class with thread safe methods public volatile Foo foo clas
  • 确保 MAVEN_HOME 设置正确

    这里是 Java 和 Maven 菜鸟 使用 OSX 10 8 并使用 HomeBrew 安装 Maven 1 如果我说which mvn我会得到这个 usr local bin mvn 2 如果我说echo MAVEN HOME我不会得到
  • 在android中测量不规则多边形的面积

    我正在开发一个应用程序 在其中我在地图上绘制多边形 并且我使用的地图不是谷歌 它的Mapsforge开源离线地图库 我可以通过将地理点转换为像素点来轻松在地图上绘制多边形 但在这里我想发现是不规则的多边形 为此我做了很多尝试 但它让我失败了
  • 项目级别的@PowerMockIgnore

    在 Maven 中运行时 我的 powermock 测试用例出现以下错误 java lang LinkageError loader constraint violation loader instance of org powermock

随机推荐

  • C++ 内联函数可以防止复制吗?

    假设编译器实际上内联foo这两个语句之间有性能差异吗 inline int foo int val return val int main std cout lt lt foo 123 lt lt std endl std cout lt
  • Google API(方向)-创建避开某些点的路线[重复]

    这个问题在这里已经有答案了 Google Maps API 似乎没有提供创建避开或倾向于避开某些点的路线的方法 有人做过这样的事情吗 我想在路线上创建例外规则 例如 显示没有交通信号的路线 我遇到了同样的问题 这是迄今为止我找到的最好的解决
  • System.Web.WebPages.TypeHelper.ObjectToDictionaryUncached

    我刚刚更新到最新的 ASP NET MVC 我得到 Method not found System Web Routing RouteValueDictionary System Web WebPages TypeHelper Object
  • 如何创建 package.json 文件?

    In Mac Terminal https en wikipedia org wiki Terminal macOS Terminal package json This is most likely not a problem with
  • 在 props 中传递 Redux store

    我正在大学练习使用 React 和 Redux 构建应用程序 当我使用 Yarn 启动服务器时 出现以下错误 Passing redux store in props has been removed and does not do any
  • Autofac 和 BeginLifetimeScope 的内存泄漏 / DbContext 已被处置 / C# asp.net

    我正在使用 NServiceBus Scheduler 这就是为什么我被迫使用 BeginLifetimeScope 来避免内存泄漏 Method public void Start using var scope lifetimeScop
  • 使用 Tweepy 自动直接消息响应

    我目前正在使用 python 中的 tweepy 包作为 DM 侦听器 我希望在收到发件人的消息后回复他们 我有以下内容 class StdOutListener StreamListener def init self self twee
  • 如何写入 7z 存档格式的二进制数据?

    我一直在研究 7z 存档格式的格式描述和源代码 但在编写有效的容器时仍然遇到困难 我想我可以创建一个空容器 无论如何 这是我的开始 std ofstream ofs archivename c str std ios binary std
  • 批处理文件编辑 ini 文件中的行

    我有一个自动生成的 ini 文件 它的第二行始终是 Version W XX Y ZZ Where W是主版本号 XX是次要版本 Y是构建和ZZ是修订版 我需要打开该 ini 文件并使用批处理文件编辑该行 以便删除该版本中的内部版本号和修订
  • 使用 C++ 在 Linux 中创建计时器队列 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在 Windows 中使用 C 实现了一个项目 该项目创建一个计时器队列 向其中添加条目 在计时器到期时执行回调函数 等待下一个计时
  • 如何使用Java日历从日期中减去X天?

    有人知道使用Java日历从日期中减去X天的简单方法吗 我还没有找到任何函数可以让我直接从 Java 中的日期减去 X 天 有人能指出我正确的方向吗 取自这里的文档 http docs oracle com javase 7 docs api
  • 获得 Android 用户消息平台的同意

    我正在尝试使用 Admob 实现 UE 同意 让用户选择是否想要在 Android 中显示个性化广告 我正在通过用户消息平台的 资金选择 来做到这一点 我遵循了这个快速入门指南 https developers google com adm
  • Sphinx实时索引配置?

    我是 Sphinx 的新手 我需要 Linux 服务器中实时索引 sphinx config 的示例代码 对于近实时索引 您可以使用增量方法 http sphinxsearch com docs 1 10 delta updates htm
  • C 标准库中包含哪些内容?

    我将举一个例子GNU C 库 http www gnu org software libc manual html mono libc html Opening and Closing Files文档 13 1 打开和关闭文件 本节描述打开
  • 当你有 std::string 时如何使用 basic_istream

    我有一个使用 basic istream 作为参数的函数 并且我有一个 std string 其中包含我需要传递它的数据 我怎么做 您可以将字符串数据放入流中 std string x std stringstream ss x put s
  • 比较器 - int 不能取消引用[重复]

    这个问题在这里已经有答案了 我在这里看到了如何使用 Comparator 接口对 ArrayList 进行排序的示例 所以我尝试了一下 对于字符串 它工作得很好 但是对于我想要排序的一个变量是整数 它不会编译 说 int 不能取消引用 我该
  • 如何让屏幕暂停? [复制]

    这个问题在这里已经有答案了 可能的重复 如何阻止 C 控制台应用程序立即退出 https stackoverflow com questions 2529617 how to stop c console application from
  • 在 C++ 中使用 OpenCV 2.4 计算凸面缺陷

    我正在使用 OpenCV 2 4 来计算图像的凸包 我还进行了一些处理以消除图像中的一些噪声 这与问题并不真正相关 计算凸包的代码如下 cv Mat sourceImage assume something is already here
  • 如何将HTML文件转换为word? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要将 HTML 文档作为 Word DOC 文件保存在内存中 有人可以给我一些可以用来执行此操作的
  • JFreeChart 中的 LogAxis 上未显示小刻度

    我在用着JFreeChart绘制一些数据并使用LogAxis对于范围轴 我很困惑为什么我似乎无法在轴上显示小刻度 但网格线显示得很好 如果我不使用LogAxis我可以使用以下命令打开和关闭小刻度setMinorTickMarksVisibl