Autoscaling imagesc plot and imshow plots
Matlab / GNU Octave default axis scaling scales “x” and “y” axes proportionally to the axes values. If one axis values span a much wider range than the other axis, the smaller span axis gets very thin and almost invisible.
Fix invisible axis in plot by axis('square') after imagesc()
rdat = rand(1000,10);
imagesc(rdat)
axis('square')Axes representing actual data size has the axes to be representative of number of data elements (skinny images appear skinny)–insert axis('equal') after imagesc().
rdat = rand(1000,10);
imagesc(rdat)
axis('equal')In Python Matplotlib, the same issue can be overcome with aspect='auto' property of ax.imshow().
Conversely allow the “true” axes ratio driven by the actual data aspect='equal'
Set this after the plot is created in axes ax by
import numpy as np
import matplotlib.pyplot as plt
rdat = np.random.rand(1000,10)
fg = plt.figure(layout='constrained')
ax = fg.gca()
ax.imshow(rdat)
# %% pick ONE of the following
# non-shared axes
ax.set_aspect('equal','box')
# shared axes only (e.g. subplots(sharex=True))
ax.set_aspect('equal','box-forced')
plt.show()