Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to size my imshow?

I generated a 2d intensity matrix with the following code:

H, x_e, y_e = np.histogram2d(test_y, test_x, bins=(y_e, x_e))

The values of x_e and y_e are:

x_e
array([ 0.05      ,  0.0530303 ,  0.05606061,  0.05909091,  0.06212121,
        0.06515152,  0.06818182,  0.07121212,  0.07424242,  0.07727273,
        0.08030303,  0.08333333,  0.08636364,  0.08939394,  0.09242424,
        0.09545455,  0.09848485,  0.10151515,  0.10454545,  0.10757576,
        0.11060606,  0.11363636,  0.11666667,  0.11969697,  0.12272727,
        0.12575758,  0.12878788,  0.13181818,  0.13484848,  0.13787879,
        0.14090909,  0.14393939,  0.1469697 ,  0.15      ,  0.1530303 ,
        0.15606061,  0.15909091,  0.16212121,  0.16515152,  0.16818182,
        0.17121212,  0.17424242,  0.17727273,  0.18030303,  0.18333333,
        0.18636364,  0.18939394,  0.19242424,  0.19545455,  0.19848485,
        0.20151515,  0.20454545,  0.20757576,  0.21060606,  0.21363636,
        0.21666667,  0.21969697,  0.22272727,  0.22575758,  0.22878788,
        0.23181818,  0.23484848,  0.23787879,  0.24090909,  0.24393939,
        0.2469697 ,  0.25      ,  0.2530303 ,  0.25606061,  0.25909091,
        0.26212121,  0.26515152,  0.26818182,  0.27121212,  0.27424242,
        0.27727273,  0.28030303,  0.28333333,  0.28636364,  0.28939394,
        0.29242424,  0.29545455,  0.29848485,  0.30151515,  0.30454545,
        0.30757576,  0.31060606,  0.31363636,  0.31666667,  0.31969697,
        0.32272727,  0.32575758,  0.32878788,  0.33181818,  0.33484848,
        0.33787879,  0.34090909,  0.34393939,  0.3469697 ,  0.35      ])
y_e
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

I cannot seem to achieve control over the shape of my plotted output with this code:

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111)
ax.set_title(feature_of_interest)
im = plt.imshow(H, interpolation='nearest', origin='low',
                extent=[y_e[0], y_e[-1], x_e[0], x_e[-1]])

This gives me a very squashed output where I can't see anything:

enter image description here

How can I adjust the parameters to get a better aspect ratio?

Here's what I've tried so far:

  • playing around with the extent parameter. This changes the shape, but not in a predictable way. Also that makes the axis labels incorrect.
  • changing the figsize parameter. This doesn't seem to have any effect.
like image 835
helloB Avatar asked Sep 01 '16 14:09

helloB


People also ask

How do you normalize Imshow?

Just specify vmin=0, vmax=1 . By default, imshow normalizes the data to its min and max. You can control this with either the vmin and vmax arguments or with the norm argument (if you want a non-linear scaling).


1 Answers

You can set the aspect ratio of the axes directly. This is independent of the figure size. Here's an example:

import numpy as np
from matplotlib import pyplot as plt

data = np.random.rand(5, 100)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.imshow(data, interpolation='nearest')
ax.set_aspect(5)

plt.show()

enter image description here

like image 197
Molly Avatar answered Oct 04 '22 02:10

Molly