Skip to content

axis & grid tick interval issue #924

@fred4ets

Description

@fred4ets

Running the following complete minimal example (from cmap_image_plot.py) with arg t >= 20 shows the trick: the x axis tick interval (every 2 h) does not match the x grid tick interval (every 3 h):

#!/usr/bin/env python3
"""
Draws a colormapped image plot
 - Left-drag pans the plot.
 - Mousewheel up and down zooms the plot in and out.
 - Pressing "z" brings up the Zoom Box, and you can click-drag a rectangular
   region to zoom.  If you use a sequence of zoom boxes, pressing alt-left-arrow
   and alt-right-arrow moves you forwards and backwards through the "zoom
   history".
"""

# Major library imports
from numpy import exp, linspace, meshgrid
from sys import argv
# Enthought library imports
from enable.api import Component, ComponentEditor
from traits.api import HasTraits, Instance
from traitsui.api import Item, Group, View

# Chaco imports
from chaco.api import ArrayPlotData, viridis, Plot
from chaco.tools.api import PanTool, ZoomTool

from chaco.scales.api import CalendarScaleSystem, ScaleSystem
from chaco.scales.time_scale import HMSScales, MDYScales
from chaco.scales_tick_generator import ScalesTickGenerator

# ===============================================================================
# # Create the Chaco plot.
# ===============================================================================
def _create_plot_component():
    # Create a scalar field to colormap
    t = int(argv[1])
    xs = linspace(0, t*3600, 600) - 3600
    ys = linspace(0, 5, 600)
    x, y = meshgrid(xs, ys)
    z = exp(-((x/xs.max()) ** 2 + y ** 2) / 100)

    # Create a plot data object and give it this data
    pd = ArrayPlotData()
    pd.set_data("imagedata", z)

    # Create the plot
    plot = Plot(pd)
    img_plot = plot.img_plot(
        "imagedata",
        xbounds=(xs.min(), xs.max()),
        ybounds=(0, 5),
        colormap=viridis
    )[0]

    xgrid, ygrid, xaxis, yaxis = plot.underlays
    print([a.orientation for a in plot.underlays])
    xgrid.tick_generator = ScalesTickGenerator(scale=CalendarScaleSystem(scales=HMSScales))
    xgrid.visible = True
    xaxis.tick_generator = ScalesTickGenerator(scale=CalendarScaleSystem(scales=HMSScales))
      ygrid.visible = xgrid.visible
    xgrid.line_color = ygrid.line_color = (0, 0, 0)

    # Attach some tools to the plot
    plot.tools.append(PanTool(plot))
    zoom = ZoomTool(component=img_plot, tool_mode="box", always_on=False)
    img_plot.overlays.append(zoom)

    return plot


# ===============================================================================
# Attributes to use for the plot view.
size = (1200, 800)
title = "Basic Colormapped Image Plot"

# ===============================================================================
# # Demo class that is used by the demo.py application.
# ===============================================================================
class Demo(HasTraits):
    plot = Instance(Component)

    traits_view = View(
        Group(
            Item("plot", editor=ComponentEditor(size=size), show_label=False),
            orientation="vertical",
        ),
        resizable=True,
        title=title,
    )

    def _plot_default(self):
        return _create_plot_component()


demo = Demo()

if __name__ == "__main__":
    demo.configure_traits()```

Any idea?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions