|
|
pylab_examples_Examples 39_contour_image. |
H.Kamifuji . |
輪郭線、塗りつぶし輪郭線、および画像プロットの組み合わせをテストします。 輪郭ラベリングについては、contour_demo.py を参照してください。 このデモの重点は、輪郭を画像上に正しく登録する方法と、それらの両方を所望の方向に向ける方法を示すことです。 特に、imshow と contour の "origin" と "extent" キーワード引数の使用に注意してください。 この事例は、Windows10_1909 で Python 3.9.0 環境では、動作しません。( Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) がデグレートしたのか? ) ''' Test combinations of contouring, filled contouring, and image plotting. For contour labelling, see contour_demo.py. The emphasis in this demo is on showing how to make contours register correctly on images, and on how to get both of them oriented as desired. In particular, note the usage of the "origin" and "extent" keyword arguments to imshow and contour. ''' import matplotlib.pyplot as plt import numpy as np from matplotlib import mlab, cm # Default delta is large because that makes it fast, and it illustrates # the correct registration between image and contours. delta = 0.5 extent = (-3, 4, -4, 3) x = np.arange(-3.0, 4.001, delta) y = np.arange(-4.0, 3.001, delta) X, Y = np.meshgrid(x, y) Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) Z = (Z1 - Z2) * 10 levels = np.arange(-2.0, 1.601, 0.4) # Boost the upper limit to avoid truncation errors. norm = cm.colors.Normalize(vmax=abs(Z).max(), vmin=-abs(Z).max()) cmap = cm.PRGn fig = plt.figure() fig.subplots_adjust(hspace=0.3) plt.subplot(2, 2, 1) cset1 = plt.contourf(X, Y, Z, levels, cmap=cm.get_cmap(cmap, len(levels) - 1), norm=norm, ) # It is not necessary, but for the colormap, we need only the # number of levels minus 1. To avoid discretization error, use # either this number or a large number such as the default (256). # If we want lines as well as filled regions, we need to call # contour separately; don't try to change the edgecolor or edgewidth # of the polygons in the collections returned by contourf. # Use levels output from previous call to guarantee they are the same. cset2 = plt.contour(X, Y, Z, cset1.levels, colors='k') # We don't really need dashed contour lines to indicate negative # regions, so let's turn them off. for c in cset2.collections: c.set_linestyle('solid') # It is easier here to make a separate call to contour than # to set up an array of colors and linewidths. # We are making a thick green line as a zero contour. # Specify the zero level as a tuple with only 0 in it. cset3 = plt.contour(X, Y, Z, (0,), colors='g', linewidths=2) plt.title('Filled contours') plt.colorbar(cset1) plt.subplot(2, 2, 2) plt.imshow(Z, extent=extent, cmap=cmap, norm=norm) v = plt.axis() plt.contour(Z, levels, colors='k', origin='upper', extent=extent) plt.axis(v) plt.title("Image, origin 'upper'") plt.subplot(2, 2, 3) plt.imshow(Z, origin='lower', extent=extent, cmap=cmap, norm=norm) v = plt.axis() plt.contour(Z, levels, colors='k', origin='lower', extent=extent) plt.axis(v) plt.title("Image, origin 'lower'") plt.subplot(2, 2, 4) # We will use the interpolation "nearest" here to show the actual # image pixels. # Note that the contour lines don't extend to the edge of the box. # This is intentional. The Z values are defined at the center of each # image pixel (each color block on the following subplot), so the # domain that is contoured does not extend beyond these pixel centers. im = plt.imshow(Z, interpolation='nearest', extent=extent, cmap=cmap, norm=norm) v = plt.axis() plt.contour(Z, levels, colors='k', origin='image', extent=extent) plt.axis(v) ylim = plt.get(plt.gca(), 'ylim') plt.setp(plt.gca(), ylim=ylim[::-1]) plt.title("Origin from rc, reversed y-axis") plt.colorbar(im) plt.show() |
![]() Python 3.11.2 見直しました。上記のコードでは、下記のエラーが発生します。 Traceback (most recent call last): File "_:\contour_image.py", line 23, in <module> Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) ^^^^^^^^^^^^^^^^^^^^^ AttributeError: module 'matplotlib.mlab' has no attribute 'bivariate_normal' matplotlib 内部のエラーのようです。matplotlib の改修(先祖帰りバグの改修)を待つしかない。 Python 3.11.6 (matplotlib 3.7.1) では、下記のようなエラーがあり、実行できない。 Traceback (most recent call last): File "M:\______\contour_image.py", line 23, inPython 3.12.0 (matplotlib 3.8.1) では、下記のようなエラーがあり、実行できない。 Traceback (most recent call last): File "E:\______\contour_image.py", line 23, inPython 3.11.6 (matplotlib 3.7.1) 及び Python 3.12.0 (matplotlib 3.8.1) で、見直し中、新しいサンプル(images-contours-and-fields-contour-image-py) を見つけ、下記のコードで、正常に実行できました。 """ ============= Contour Image ============= Test combinations of contouring, filled contouring, and image plotting. For contour labelling, see also the :doc:`contour demo example </gallery/images_contours_and_fields/contour_demo>`. The emphasis in this demo is on showing how to make contours register correctly on images, and on how to get both of them oriented as desired. In particular, note the usage of the :ref:`"origin" and "extent" <imshow_extent>` keyword arguments to imshow and contour. """ import matplotlib.pyplot as plt import numpy as np from matplotlib import cm # Default delta is large because that makes it fast, and it illustrates # the correct registration between image and contours. delta = 0.5 extent = (-3, 4, -4, 3) x = np.arange(-3.0, 4.001, delta) y = np.arange(-4.0, 3.001, delta) X, Y = np.meshgrid(x, y) Z1 = np.exp(-X**2 - Y**2) Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) Z = (Z1 - Z2) * 2 # Boost the upper limit to avoid truncation errors. levels = np.arange(-2.0, 1.601, 0.4) norm = cm.colors.Normalize(vmax=abs(Z).max(), vmin=-abs(Z).max()) cmap = cm.PRGn fig, _axs = plt.subplots(nrows=2, ncols=2) fig.subplots_adjust(hspace=0.3) axs = _axs.flatten() cset1 = axs[0].contourf(X, Y, Z, levels, norm=norm, cmap=cmap.resampled(len(levels) - 1)) # It is not necessary, but for the colormap, we need only the # number of levels minus 1. To avoid discretization error, use # either this number or a large number such as the default (256). # If we want lines as well as filled regions, we need to call # contour separately; don't try to change the edgecolor or edgewidth # of the polygons in the collections returned by contourf. # Use levels output from previous call to guarantee they are the same. cset2 = axs[0].contour(X, Y, Z, cset1.levels, colors='k') # We don't really need dashed contour lines to indicate negative # regions, so let's turn them off. cset2.set_linestyle('solid') # It is easier here to make a separate call to contour than # to set up an array of colors and linewidths. # We are making a thick green line as a zero contour. # Specify the zero level as a tuple with only 0 in it. cset3 = axs[0].contour(X, Y, Z, (0,), colors='g', linewidths=2) axs[0].set_title('Filled contours') fig.colorbar(cset1, ax=axs[0]) axs[1].imshow(Z, extent=extent, cmap=cmap, norm=norm) axs[1].contour(Z, levels, colors='k', origin='upper', extent=extent) axs[1].set_title("Image, origin 'upper'") axs[2].imshow(Z, origin='lower', extent=extent, cmap=cmap, norm=norm) axs[2].contour(Z, levels, colors='k', origin='lower', extent=extent) axs[2].set_title("Image, origin 'lower'") # We will use the interpolation "nearest" here to show the actual # image pixels. # Note that the contour lines don't extend to the edge of the box. # This is intentional. The Z values are defined at the center of each # image pixel (each color block on the following subplot), so the # domain that is contoured does not extend beyond these pixel centers. im = axs[3].imshow(Z, interpolation='nearest', extent=extent, cmap=cmap, norm=norm) axs[3].contour(Z, levels, colors='k', origin='image', extent=extent) ylim = axs[3].get_ylim() axs[3].set_ylim(ylim[::-1]) axs[3].set_title("Origin from rc, reversed y-axis") fig.colorbar(im, ax=axs[3]) fig.tight_layout() plt.show() # %% # # .. admonition:: References # # The use of the following functions, methods, classes and modules is shown # in this example: # # - `matplotlib.axes.Axes.contour` / `matplotlib.pyplot.contour` # - `matplotlib.axes.Axes.imshow` / `matplotlib.pyplot.imshow` # - `matplotlib.figure.Figure.colorbar` / `matplotlib.pyplot.colorbar` # - `matplotlib.colors.Normalize`Python 3.11.6 (matplotlib 3.7.1) では、下記のようなエラーがあり、実行できない。 Traceback (most recent call last): File "M:\______\contour_image_2.py", line 59, in ![]() |
pylab_examples_Examples code: contour_image.py images-contours-and-fields-contour-image-py |
|