Hướng dẫn python scipy contour

Một đường vạch hoặc isoline của một hàm của hai biến là một đường cong dọc theo hàm đó có một giá trị không đổi.

Nó là một mặt cắt ngang của đồ thị ba chiều của hàm f (x, y) song song với mặt phẳng x, y.

Đường viền được sử dụng

, ví dụ,trong địa lý và khí tượng học.

Trong bản đồ, một đường viền nối các điểm có độ cao (chiều cao) tương

đương, đường đồng mức, chẳng hạn như mực nước biển trung bình.

Chúng ta cũng có thể nói một cách tổng quát hơn rằng một đường viền của một hàm có hai biến là một đường cong kết nối những điểm có cùng giá trị.

Bước 1: tạo một ‘meshgrid’ (ý nghĩa xem tại: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.meshgrid.html)

>>> import numpy as np

>>> xlist = np.linspace(-3.0, 3.0, 3)

>>> ylist = np.linspace(-3.0, 3.0, 4)

>>> X, Y = np.meshgrid(xlist, ylist)

>>> print(xlist)

[-3.  0.  3.]

>>> print(ylist)

[-3. -1.  1.  3.]

>>> print(X)

[[-3.  0.  3.]

 [-3.  0.  3.]

 [-3.  0.  3.]

 [-3.  0.  3.]]

>>> print(Y)

[[-3. -3. -3.]

 [-1. -1. -1.]

 [ 1.  1.  1.]

 [ 3.  3.  3.]]

Bước 2: tính giá trị Z

>>> Z = np.sqrt(X**2 + Y**2)

>>> print(Z)

[[ 4.24264069  3.          4.24264069]

 [ 3.16227766  1.          3.16227766]

 [ 3.16227766  1.          3.16227766]

 [ 4.24264069  3.          4.24264069]]

>>>

Bước 3: Dùng phương thức contour() của pyplot để vẽ một contour mong muốn từ X,Y,Z

>>> import matplotlib.pyplot as plt
>>> plt.figure()

>>> cp = plt.contour(X, Y, Z)
>>> plt.clabel(cp, inline=True,
...           fontsize=10)

>>> plt.title('Contour Plot')

>>> plt.xlabel('x (cm)')

>>> plt.ylabel('y (cm)')

>>> plt.show()
>>>
Hướng dẫn python scipy contour
Ta thực hành với nhiều style của contour, như kiểu line, màu sắc.
Ví dụ 1. Thay đổi màu và kiểu đường.
>>> import matplotlib.pyplot as plt
>>> plt.figure()

>>> cp = plt.contour(X, Y, Z, colors='black', linestyles='dashed')
>>> plt.clabel(cp, inline=True,
...           fontsize=10)

>>> plt.title('Contour Plot')

>>> plt.xlabel('x (cm)')

>>> plt.ylabel('y (cm)')

>>> plt.show()
Hướng dẫn python scipy contour
Ví dụ 2: tô màu cho các contours
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> xlist = np.linspace(-3.0, 3.0, 100)
>>> ylist = np.linspace(-3.0, 3.0, 100)
>>> X, Y = np.meshgrid(xlist, ylist)
>>> Z = np.sqrt(X**2 + Y**2)
>>> plt.figure()

>>> cp = plt.contourf(X, Y, Z,cmap='magma')
>>> plt.colorbar(cp)

>>> plt.title('Filled Contours Plot')

>>> plt.xlabel('x (cm)')

>>> plt.ylabel('y (cm)')

>>> plt.show()
Hướng dẫn python scipy contour
Thay vì dùng cmap, các mức khác nhau sẽ được vẽ bằng các màu khác nhau theo thứ tự được chỉ định qua đối số ‘colors’.
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> xlist = np.linspace(-3.0, 3.0, 100)
>>> ylist = np.linspace(-3.0, 3.0, 100)
>>> X, Y = np.meshgrid(xlist, ylist)
>>> Z = np.sqrt(X**2 + Y**2)
>>> plt.figure()

>>> contour = plt.contourf(X, Y, Z)
>>> plt.clabel(contour, colors = 'k', fmt = '%2.1f', fontsize=12)

>>> c = ('#ff0000', '#ffff00', '#0000FF', '0.6', 'c', 'm','C1','xkcd:soft pink')
>>> contour_filled = plt.contourf(X, Y, Z, colors=c)
>>> plt.colorbar(contour_filled)

>>> plt.title('Filled Contours Plot')

>>> plt.xlabel('x (cm)')

>>> plt.ylabel('y (cm)')

>>> plt.show()
>>> 
Hướng dẫn python scipy contour
Chúng ta có thể tự định nghĩa bằng các levels, bằng cách cung cấp một danh sách các levels như một tham số thứ tư. Đường viền sẽ được vẽ cho mỗi giá trị trong danh sách, nếu chúng ta sử dụng contour(). Đối với contourf(), sẽ có  màu các khu vực giữa các giá trị trong danh sách.
>>> import matplotlib.pyplot as plt
>>> xlist = np.linspace(-3.0, 3.0, 100)
>>> ylist = np.linspace(-3.0, 3.0, 100)
>>> X, Y = np.meshgrid(xlist, ylist)
>>> Z = np.sqrt(X ** 2 + Y ** 2 )
>>> plt.figure()

>>> levels = [0.0, 0.2, 0.5, 0.9, 1.5, 2.5, 3.5]
>>> contour = plt.contour(X, Y, Z, levels, colors='k')
>>> plt.clabel(contour, colors = 'k', fmt = '%2.1f', fontsize=12)

>>> contour_filled = plt.contourf(X, Y, Z, levels)
>>> plt.colorbar(contour_filled)

>>> plt.title('Plot from level list')

>>> plt.xlabel('x (cm)')

>>> plt.ylabel('y (cm)')

>>> plt.show()
Hướng dẫn python scipy contour

Kết Luận

Qua bài học này, bạn đọc đã học được cách sử dụng contour để mô tả dữ liệu của mình. Một loại đồ thì khá thú vị mà ta thường bắt gặp trong các bài học về địa lý khi còn học phổ thông.