CombinedDomainXYPlot 不重新缩放域轴

2023-12-23

当我从使用 CombinedDomainXYPlot 的图表中隐藏系列数时,所有范围轴都会很好地自动重新缩放。但是,域轴不会重新缩放。有没有办法手动刷新缩放,或者我可能缺少一个设置来启用此设置中域轴的自动缩放?


CombinedDomainXYPlot建立组合最大Range为其共享域轴getDataRange()。这是允许共享轴所必需的。更改系列的可见性对共享域轴没有影响;改变Dataset通过其更新共享域轴configure()方法。在任何一种情况下,子图的范围轴都可以独立更新。

下面的示例允许您独立更新子图或更改系列的可见性。打断configure()看看效果。您的切换建议setAutoRange ()可以通过一次调用来替换configure();但效果应该为零,因为数据及其组合最大Range没有变化。

mainPlot.getDomainAxis().configure();

要自动更新共享域轴,请使用addSeries() or removeSeries()代替setSeriesVisible().

顺便说一句,不要忽视初始线程 http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html and pack().

import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.Random;
import javax.swing.*;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import static org.jfree.chart.renderer.xy.StandardXYItemRenderer.*;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 * @see https://stackoverflow.com/a/64508866/230513
 * @see https://stackoverflow.com/q/11870416/230513
 */
public class CombinedPlot {

    private static final int MAX = 3;
    private static final Random RND = new Random();

    public static void main(String[] args) {
        EventQueue.invokeLater(CombinedPlot::init);
    }

    private static void init() {
        XYItemRenderer renderer = new StandardXYItemRenderer(SHAPES_AND_LINES);
        XYPlot plot1 = new XYPlot(
            generateData(), null, new NumberAxis("Range 1"), renderer);
        XYPlot plot2 = new XYPlot(
            generateData(), null, new NumberAxis("Range 2"), renderer);
        final CombinedDomainXYPlot plot =
            new CombinedDomainXYPlot(new NumberAxis("Domain"));
        plot.setDomainPannable(true);
        plot.setRangePannable(true);
        plot.add(plot1);
        plot.add(plot2);
        plot.setOrientation(PlotOrientation.VERTICAL);
        JFreeChart chart = new JFreeChart(
            "Combined Plots", JFreeChart.DEFAULT_TITLE_FONT, plot, true);
        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(800, 500));

        JPanel controlPanel = new JPanel();
        controlPanel.add(new JButton(new UpdateAction(plot, 0)));
        controlPanel.add(new JButton(new UpdateAction(plot, 1)));
        for (int i = 0; i < MAX; i++) {
            JCheckBox jcb = new JCheckBox(new VisibleAction(renderer, i));
            jcb.setSelected(true);
            renderer.setSeriesVisible(i, true);
            controlPanel.add(jcb);
        }

        JFrame frame = new JFrame("Combined Plot Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(chartPanel, BorderLayout.CENTER);
        frame.add(controlPanel, BorderLayout.SOUTH);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private static class UpdateAction extends AbstractAction {

        private final XYPlot plot;

        public UpdateAction(CombinedDomainXYPlot plot, int i) {
            super("Update plot " + (i + 1));
            this.plot = (XYPlot) plot.getSubplots().get(i);
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            plot.setDataset(CombinedPlot.generateData());
        }
    }

    private static class VisibleAction extends AbstractAction {

        private XYItemRenderer renderer;
        private int i;

        public VisibleAction(XYItemRenderer renderer, int i) {
            super("Series " + (i + 1));
            this.renderer = renderer;
            this.i = i;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            renderer.setSeriesVisible(i, !renderer.getSeriesVisible(i));
        }
    }

    private static XYSeriesCollection generateData() {
        XYSeriesCollection data = new XYSeriesCollection();
        for (int i = 0; i < MAX; i++) {
            data.addSeries(generateSeries("Series " + (i + 1)));
        }
        return data;
    }

    private static XYSeries generateSeries(String key) {
        XYSeries series = new XYSeries(key);
        for (int i = 0; i < 16; i++) {
            series.add(RND.nextGaussian(), RND.nextGaussian());
        }
        return series;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CombinedDomainXYPlot 不重新缩放域轴 的相关文章

  • Android Toast 消息不起作用

    我正在通过 Andengine 为 Android 开发游戏 我有 MainActivity 类和 GameScene 类 我在 GameActivity 中使用 Toast 消息 它正在发挥作用 Toast makeText this H
  • 不支持的字段:将瞬间格式化为日期 ISO 时的年份[重复]

    这个问题在这里已经有答案了 我正在尝试将 Instant 格式化为 ldap 日期 ISO8601 但在 f format Instant now 处失败 String input 20161012235959 0Z DateTimeFor
  • 无论线程如何,对象是否总是能看到其最新的内部状态?

    假设我有一个带有简单整数计数变量的可运行对象 每次可运行对象运行时该变量都会递增 该对象的一个 实例被提交以在计划的执行程序服务中定期运行 class Counter implements Runnable private int coun
  • JAVA 中的 Composer 相当于什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前从 PHP 转向 java 有没有类似的工具composer https getcomposer org 在 PHP 中用于 JAV
  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • Java 小程序在 Mac 上闪烁

    这个问题很奇怪 问题并非在每个平台上都会发生 我在使用 MacOSX 的 Google Chrome 中出现了这种情况 但在 Safari 中却没有出现这种情况 对于使用 Windows 的朋友来说 在 Google Chrome 上运行得
  • 如何准确判断 double 是否为整数? [复制]

    这个问题在这里已经有答案了 具体来说 在 Java 中 我如何确定double是一个整数 为了澄清 我想知道如何确定 double 实际上不包含任何分数或小数 我主要关心的是浮点数的性质 我想到的方法 以及我通过谷歌找到的方法 基本上遵循以
  • Java Junit 测试 HTTP POST 请求

    我需要测试以下方法而不改变方法本身 该方法向服务器发出 POST 方法 但我需要制作一个独立于服务器的测试用例 在将其重定向到本地文件之前 我测试了类似的方法 但为此我将协议指定为文件 主机名指定为 localhost 端口指定为 1 我的
  • 使用 kryo 注册课程的策略

    我最近发现了 kryonet 库 它非常棒并且非常适合我的需求 然而 我遇到的一个问题是制定一种好的策略来注册所有可以转移的类 我知道我可以在每个对象中编写一个静态方法 该方法将返回它使用的所有类的列表 但我真的不想这样做 为了我自己的时间
  • 如何避免Eclipse在将类名放在注释中时导入类,以便checkstyle稍后不会抱怨?

    有时我将类名放在方法或类的注释中只是为了引用 但是 Eclipse 会自动执行导入并在文件中留下导入语句 这会导致稍后出现 未使用的导入 检查样式错误 当我在注释中输入类名时 是否可以更改一些配置以避免 Eclipse 自动导入 人们不同意
  • Spring HATEOAS 和 HAL:更改 _embedded 中的数组名称

    我正在尝试使用 Spring HATEOAS 构建符合 HAL 的 REST API 经过一番摆弄后我终于开始工作了mostly正如预期的那样 示例 输出现在看起来像这样 links self href http localhost 808
  • 使用 Jena 查询维基数据

    目前 Wikidata 有一个 SPARQL 端点 https query wikidata org https query wikidata org 我想使用 Jena 3 0 1 查询此网站 我使用以下代码 但收到错误消息 端点返回的
  • 但是创建静态实用方法不应该被过度使用吗?如何避免呢? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 随着时间的推移 java项目中引入了许多实用方法来完成更复杂和简单的任务 当使用静态方法时 我们在代码中引入了紧密耦合 这使得我们的代
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • java.lang.UnsatisfiedLinkError - android studio gradle 中的 NDK?

    文件夹结构 app main java jni Android mk Application mk hello jni c res 在构建 gradle apply plugin com android application androi
  • 如何使用eclipse调试JSP tomcat服务?

    我想使用 Eclipse IDE 调试器来调试单独运行的 JSP Struts Tomcat Hibernate 应用程序堆栈 如何设置 java JVM 和 eclipse 以便设置断点 监视变量值并查看当前正在执行的代码 我刚刚用谷歌搜
  • 为什么不能在 if 语句中声明变量?

    以下 Java 代码无法编译 int a 0 if a 1 int b 0 if a 1 b 1 为什么 不能有任何代码路径导致程序将 1 分配给b无需先声明 我突然想到b的变量范围可能仅限于第一个if声明 但后来我不明白为什么 如果我实在
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 我怎样才能限定我不“拥有”的自动装配设置器

    要点是 Spring Batch v2 测试框架具有JobLauncherTestUtils setJob与 Autowired注解 我们的测试套件有多个Job类提供者 由于这个类不是我可以修改的东西 我不确定如何限定它自动连接的作业 每个

随机推荐

  • Python 读取文件以使用 networkx 创建加权有向图

    我是 python 和 Spyder 的新手 我正在尝试使用 networkx 从具有格式的文本文件读取到图形中 FromNodeId ToNodeId Weight 0 1 0 15 0 2 0 95 0 3 0 8 0 4 0 5 0
  • 如何获取DataTemplate的逻辑树

    有没有可能访问 DataTemplate 的逻辑树
  • 学习组装时不知所措。请指导

    最近 我决定学习汇编将是一个好主意 但现在 我真的被我在论坛 这里 教程等中读到的所有关于汇编的材料淹没了 其中一些真的很旧 所以我很乐意对汇编语言有一些了解 如何 编译 等 我也希望它能够在我的CPU上运行 以便我可以练习 这是我来自CP
  • 使用 Windows 身份验证时向身份添加自定义声明

    我很难理解在 Net MVC 应用程序中使用 Windows 身份验证时如何添加自定义声明 这里的挑战是在登录时使用数据库中的自定义声明填充用户的身份 以避免每次我想检查自定义授权属性时都进行数据库调用 但使用 Windows 身份验证使事
  • 检查参数是否是Python模块?

    我如何 Python方式 检查参数是否是Python模块 没有像模块或包这样的类型 gt gt gt os
  • 如何更改 Apache 的默认目录和索引文件(通过 XAMPP 安装)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何更改 Apache 的默认目录和索引文件 通过 XAMPP 安装 而不是寻找htdocs and index 它寻找myPath and myFi
  • 在 Windows XP 中搜索 unicode 文本

    有没有办法在 Windows XP 下搜索文本文件中的 unicode 字符 例如 假设我希望查找带有欧元符号的文本文档 虽然标准 XP 搜索允许我搜索欧元符号 但当我知道它们至少应该有几个时 它不会产生任何匹配项 Wingrep 也有同样
  • 无法为使用 PEP 517 且无法直接安装的 _ 制造轮子 - Easy Solution

    我正在尝试安装一个使用 PEP 517 的软件包 由于涉及 517 的 Wheel 构建的错误 最新版本的 Pip 不允许我安装 过去 我通过降级 Pip 安装软件包并将 Pip 升级回最新版本来解决此问题 但是 在我的 virtualen
  • spring maven profile - 根据编译配置文件设置属性文件

    我会创建一些像这样的编译配置文件 个人资料名称 dev 配置文件名称 测试 配置文件名称 生产 在 src main resources 中我有 3 个文件夹 开发 文件 属性 测试 文件 属性 生产 文件 properties 每个文件包
  • - 讨论' aria-label='CSS 和 - 讨论'> CSS 和 - 讨论

    我想更改用于在网站上上传文件的输入和浏览按钮的样式 并且一直在阅读这实际上是不可能做到的 显然有一些黑客可能有效 未经测试 但在我浪费时间之前 我想知道为什么专业网站似乎没有问题 当我说专业时 我指的是可以上传简历的求职网站 可以上传脚本的
  • 如何在不使用 !important 或 javascript 的情况下覆盖内联 CSS?

    有没有办法在不使用的情况下覆盖内联CSS important并且不使用 JavaScript 例如 div style background color red div 我想知道是否可以在没有以下内容的情况下覆盖它 div backgrou
  • 如何使用 Databricks 将 CSV 写回 Azure Blob 存储?

    我正在努力写回 Azure Blob 存储容器 我可以使用以下内容从容器中读取内容 storage account name expstorage storage account key 1VP89J container source sp
  • Angular js 不起作用

    这是我的 html 文件 angular js 文件位于 java main webapp js 文件夹下 当我点击它时 Intellij 可以看到它 但代码不起作用 我在屏幕上打印出 helloMessage 而不是 hello worl
  • 当前上下文中不存在 MVC Razor 帮助程序

    我在 MVC4 Web 应用程序中创建了一个自定义剃刀助手 我需要在所有视图中使用它 在我的所有视图页面中 我似乎无法使用我的自定义助手 VS2012不只是看到它 请问我该如何解决这个问题 EDIT 当我运行页面时它确实有效 只是VS看不到
  • pytesseract 和 image.tif 文件

    我需要使用 pytesseract 将包含多个页面的 image tif 转录为文本 我有下一个代码 gt From PIL import Image gt Import pytesseract gt Pytesseract pytesse
  • 检测给定文件是否是图像以及java中特定类型的有效图像

    我需要从用户输入文件中获取该文件应该只是指定类型的图像 例如 仅有的JPEGs 其他文件必须被拒绝 所以我对文件实施了简单的基本检查 fileName toLowerCase endsWith jpg fileName toLowerCas
  • 对数据框列进行排序/对齐,以便行字符串值与主列表列匹配,如果列中不匹配则打印 0

    我想根据第一列 MASTER 中的字符串主列表对数据帧 3106 行 x 24 列 进行排序 以便数据帧的每一行中的字符串在存在匹配且存在时对齐不匹配则为该单元格打印 0 主列表包含任何列中的每个可能的字符串 但并非每个字符串都会出现在每列
  • 从表格上清除物体,何时何地?

    我有一个简单的 Windows 窗体应用程序 在表单上 我有一个自定义类 它有自己的 Dispose 方法 所以问题是我什么时候应该调用这个 FormClosed 事件 即 Form1 FormClosed 是否是执行此操作的正确位置 或者
  • .NET 的 StringBuilder 是线程安全的吗

    MSDN 文档的常规 线程安全 部分StringBuilder指出 不保证任何实例成员都是线程安全的 但这个语句感觉就像是为框架中的几乎每个类复制并粘贴了 http msdn microsoft com en us library syst
  • CombinedDomainXYPlot 不重新缩放域轴

    当我从使用 CombinedDomainXYPlot 的图表中隐藏系列数时 所有范围轴都会很好地自动重新缩放 但是 域轴不会重新缩放 有没有办法手动刷新缩放 或者我可能缺少一个设置来启用此设置中域轴的自动缩放 CombinedDomainX