-2

enter image description here

I am trying to use colormap bar function with the following code to have my x ticks on the top of the image as seen in the attached image.

Code

image_sample = cv2.cvtColor(image_sample, cv2.COLOR_RGB2GRAY)
plt.imshow(image_sample)

z = plt.colorbar()
z.set_xticks.tick_top() # x axis on top
z.set_xticks.set_label_position('top')
Christoph Rackwitz
  • 11,317
  • 4
  • 27
  • 36
Lolo
  • 31
  • 6

1 Answers1

0

You can use ax.xaxis.set to set those properties:

import matplotlib.pyplot as plt
import numpy as np

image = np.random.randint(0, 255, size=(64, 64))

fig, ax = plt.subplots()
im = ax.imshow(image)
cbar = fig.colorbar(im)

ax.xaxis.set(
    ticks_position="top",
    label_position="top",
    label_text="XAxis Label",
)

plt.show()

Resulting plot:

Plot with x axis on top

You can see all properties that you can set using ax.xaxis.set? in IPython / Jupyter Notebook:

>>> ax.xaxis.set?
Signature:
ax.xaxis.set(
    *,
    agg_filter=<UNSET>,
    alpha=<UNSET>,
    animated=<UNSET>,
    clip_box=<UNSET>,
    clip_on=<UNSET>,
    clip_path=<UNSET>,
    data_interval=<UNSET>,
    gid=<UNSET>,
    in_layout=<UNSET>,
    inverted=<UNSET>,
    label=<UNSET>,
    label_coords=<UNSET>,
    label_position=<UNSET>,
    label_text=<UNSET>,
    major_formatter=<UNSET>,
    major_locator=<UNSET>,
    minor_formatter=<UNSET>,
    minor_locator=<UNSET>,
    path_effects=<UNSET>,
    picker=<UNSET>,
    pickradius=<UNSET>,
    rasterized=<UNSET>,
    remove_overlapping_locs=<UNSET>,
    sketch_params=<UNSET>,
    snap=<UNSET>,
    tick_params=<UNSET>,
    ticklabels=<UNSET>,
    ticks=<UNSET>,
    ticks_position=<UNSET>,
    transform=<UNSET>,
    units=<UNSET>,
    url=<UNSET>,
    view_interval=<UNSET>,
    visible=<UNSET>,
    zorder=<UNSET>,
)
Docstring:
Set multiple properties at once.

Supported properties are

Properties:
    agg_filter: a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array
    alpha: scalar or None
    animated: bool
    clip_box: `.Bbox`
    clip_on: bool
    clip_path: Patch or (Path, Transform) or None
    data_interval: unknown
    figure: `.Figure`
    gid: str
    in_layout: bool
    inverted: unknown
    label: object
    label_coords: unknown
    label_position: {'top', 'bottom'}
    label_text: str
    major_formatter: `~matplotlib.ticker.Formatter`, ``str``, or function
    major_locator: `~matplotlib.ticker.Locator`
    minor_formatter: `~matplotlib.ticker.Formatter`, ``str``, or function
    minor_locator: `~matplotlib.ticker.Locator`
    path_effects: `.AbstractPathEffect`
    picker: None or bool or float or callable
    pickradius:  float
    rasterized: bool
    remove_overlapping_locs: unknown
    sketch_params: (scale: float, length: float, randomness: float)
    snap: bool or None
    tick_params: unknown
    ticklabels: sequence of str or of `.Text`\s
    ticks: list of floats
    ticks_position: {'top', 'bottom', 'both', 'default', 'none'}
    transform: `.Transform`
    units: units tag
    url: str
    view_interval: unknown
    visible: bool
    zorder: float
paime
  • 2,901
  • 1
  • 6
  • 17
  • Thank you for your help. it works but when I use the size of my image the color bar is still longer than the image itself. is there a way to make it as you did in your image the same size. I get issues when using this command. image = np.random.randint(0, 255, size=(1080, 1920)) Here's what I tried image_sample = cv2.cvtColor(image_sample, cv2.COLOR_BGR2RGB) fig, ax = plt.subplots() im = ax.imshow(image_sample) cbar = fig.colorbar(im) ax.xaxis.set( ticks_position="top", label_position="top", label_text="XAxis Label", ) plt.show() – Lolo Jul 06 '22 at 19:26
  • I wanted to add a legend bar for the colormap bar and make the size of the colormap bar the same size as my image. Any help @paime – Lolo Jul 06 '22 at 19:29
  • Yes you can, but that is another question, so I think you can close that one and make another post if necessary. But you'll find your questions already answered, e.g. ["matplotlib: colorbars and its text labels"](https://stackoverflow.com/questions/15908371/matplotlib-colorbars-and-its-text-labels) and ["Set Matplotlib colorbar size to match graph"](https://stackoverflow.com/questions/18195758/set-matplotlib-colorbar-size-to-match-graph). – paime Jul 07 '22 at 09:20