본문 바로가기
Python/matplotlib

[matplotlib] inset: inset_axes and indicate_inset_zoom

by ds31x 2024. 1. 23.

"Inset" is a small graph
which is presented within the other graph.

다음 예제는

  • 일정부분을 확대해서 보여주는 inset 의 예제임.
  • (matplotlib 사이트의 예제로 원본은 아래 Reference를 참고)

Axes 객체에서

  • imshow 의 경우, extent 파라메터를 통해 보여줄 x, y의 범위를 지정할 수 있음.

inset_axes method가 inset을 그리기 위한 Axes 객체를 반환 해주며, 다음의 parameters를 가짐.

  • 1st positional parameter:
    • inset이 그려질 영역을 나타내는 x 좌표, y 좌표, width, heigt로
    • 호출에 사용된 Axes 객체에서 해당 영역에 inset이 추가됨.
  • xlim:
    • inset 이 그릴 데이터의 x 범위.
    • 아래 예제의 경우 inset에 그려지는 데이터는 x값이 -1.5 ~ -0.9 범위 내에 있어야 그려짐.
  • ylim:
    • inset 이 그릴 데이터의 y 범위.
    • 아래 예제의 경우 inset에 그려지는 데이터는 y값이 -2.5 ~ -1.9 범위 내에 있어야 그려짐.

indicate_inset_zoom method:

  • inset의 Axes 객체를 첫번째 인자로 받으며,
  • 해당 Axes 객체의 xlim, ylim에 따라 박스를 호출한 Axes 객체에 그림.
  • 선의 색깔은 edgecolor을 이용하여 할당.
  • 호출한 Axes객체에서 inset이 그려지 실제 영역이 어디인지를 표시해줌.
import numpy as np

from matplotlib import cbook
from matplotlib import pyplot as plt

fig, ax = plt.subplots()

# make data
Z = cbook.get_sample_data("axes_grid/bivariate_normal.npy")  # 15x15 array
Z2 = np.zeros((150, 150))
ny, nx = Z.shape
Z2[30:30+ny, 30:30+nx] = Z
extent = (-3, 4, -4, 3)

ax.imshow(Z2, extent=extent, origin="lower")

# inset axes....
x1, x2, y1, y2 = -1.5, -0.9, -2.5, -1.9  # subregion of the original image
axins = ax.inset_axes(
    [0.5, 0.5, 0.47, 0.47],
    xlim=(x1, x2), ylim=(y1, y2), xticklabels=[], yticklabels=[])
axins.imshow(Z2, extent=extent, origin="lower")

ax.indicate_inset_zoom(axins, edgecolor="black")

plt.show()

References

https://matplotlib.org/stable/gallery/subplots_axes_and_figures/zoom_inset_axes.html#sphx-glr-gallery-subplots-axes-and-figures-zoom-inset-axes-py

 

Zoom region inset axes — Matplotlib 3.8.2 documentation

Zoom region inset axes Example of an inset axes and a rectangle showing where the zoom is located. import numpy as np from matplotlib import cbook from matplotlib import pyplot as plt fig, ax = plt.subplots() # make data Z = cbook.get_sample_data("axes_gri

matplotlib.org

 

728x90