Lệnh nào được sử dụng để hiển thị biểu đồ trong python?

là tập hợp các hàm giúp matplotlib hoạt động giống như MATLAB. Mỗi hàm

plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
8 thực hiện một số thay đổi đối với một hình. e. g. , tạo hình, tạo vùng vẽ trong hình, vẽ một số đường trong vùng vẽ, trang trí ô bằng nhãn, v.v.

Ở các trạng thái khác nhau được giữ nguyên qua các lệnh gọi hàm, để nó theo dõi những thứ như hình hiện tại và khu vực vẽ đồ thị, đồng thời các hàm vẽ đồ thị được hướng đến các trục hiện tại [xin lưu ý rằng "các trục" ở đây và ở hầu hết các vị trí trong tài liệu đề cập đến

Ghi chú

API pyplot ẩn thường ít dài dòng hơn nhưng cũng không linh hoạt như API rõ ràng. Hầu hết các lệnh gọi hàm mà bạn thấy ở đây cũng có thể được gọi là các phương thức từ một đối tượng

plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
plt.axis[[0, 6, 0, 20]]
plt.show[]
0. Chúng tôi khuyên bạn nên duyệt các hướng dẫn và ví dụ để xem cách thức hoạt động của nó. Xem giải thích về sự đánh đổi của các API người dùng được hỗ trợ

Tạo trực quan hóa với pyplot rất nhanh

import matplotlib.pyplot as plt
plt.plot[[1, 2, 3, 4]]
plt.ylabel['some numbers']
plt.show[]

plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro'] plt.axis[[0, 6, 0, 20]] plt.show[] 2

là một hàm linh hoạt và sẽ nhận một số đối số tùy ý. Ví dụ, để vẽ đồ thị x so với y, bạn có thể viết

plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]

plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro'] plt.axis[[0, 6, 0, 20]] plt.show[]

plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro'] plt.axis[[0, 6, 0, 20]] plt.show[] 6 và chỉ định chế độ xem của các trục

Nếu matplotlib bị giới hạn làm việc với các danh sách, thì nó sẽ khá vô dụng đối với việc xử lý số. Nói chung, bạn sẽ sử dụng mảng có nhiều mảng. Trên thực tế, tất cả các chuỗi được chuyển đổi thành mảng có nhiều mảng bên trong. Ví dụ dưới đây minh họa việc vẽ một số dòng với các kiểu định dạng khác nhau trong một lệnh gọi hàm sử dụng mảng

import numpy as np

# evenly sampled time at 200ms intervals
t = np.arange[0., 5., 0.2]

# red dashes, blue squares and green triangles
plt.plot[t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^']
plt.show[]

plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro'] plt.axis[[0, 6, 0, 20]] plt.show[] 9. Nếu được cung cấp, thì bạn có thể tạo các ô có chuỗi tương ứng với các biến này

data = {'a': np.arange[50],
        'c': np.random.randint[0, 50, 50],
        'd': np.random.randn[50]}
data['b'] = data['a'] + 10 * np.random.randn[50]
data['d'] = np.abs[data['d']] * 100

plt.scatter['a', 'b', c='c', s='d', data=data]
plt.xlabel['entry a']
plt.ylabel['entry b']
plt.show[]

plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro'] plt.axis[[0, 6, 0, 20]] plt.show[] 0

plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro'] plt.axis[[0, 6, 0, 20]] plt.show[] 1

  • Sử dụng các phương thức setter của một phiên bản

    import numpy as np
    
    # evenly sampled time at 200ms intervals
    t = np.arange[0., 5., 0.2]
    
    # red dashes, blue squares and green triangles
    plt.plot[t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^']
    plt.show[]
    
    1.
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    1 trả về danh sách các đối tượng
    import numpy as np
    
    # evenly sampled time at 200ms intervals
    t = np.arange[0., 5., 0.2]
    
    # red dashes, blue squares and green triangles
    plt.plot[t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^']
    plt.show[]
    
    1; . g. ,
    import numpy as np
    
    # evenly sampled time at 200ms intervals
    t = np.arange[0., 5., 0.2]
    
    # red dashes, blue squares and green triangles
    plt.plot[t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^']
    plt.show[]
    
    4. Trong đoạn mã dưới đây, chúng tôi sẽ giả sử rằng chúng tôi chỉ có một dòng để danh sách được trả về có độ dài 1. Chúng tôi sử dụng giải nén tuple với
    import numpy as np
    
    # evenly sampled time at 200ms intervals
    t = np.arange[0., 5., 0.2]
    
    # red dashes, blue squares and green triangles
    plt.plot[t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^']
    plt.show[]
    
    5 để lấy phần tử đầu tiên của danh sách đó

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    7

  • Sử dụng. Ví dụ dưới đây sử dụng hàm kiểu MATLAB để đặt nhiều thuộc tính trên danh sách các dòng.

    import numpy as np
    
    # evenly sampled time at 200ms intervals
    t = np.arange[0., 5., 0.2]
    
    # red dashes, blue squares and green triangles
    plt.plot[t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^']
    plt.show[]
    
    6 hoạt động minh bạch với một danh sách các đối tượng hoặc một đối tượng. Bạn có thể sử dụng các đối số từ khóa python hoặc các cặp giá trị/chuỗi kiểu MATLAB

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    9

  • Dưới đây là các thuộc tính có sẵn

    Tài sản

    Loại giá trị

    chữ cái

    trôi nổi

    hoạt hình

    [Thật. Sai]

    khử răng cưa hoặc aa

    [Thật. Sai]

    clip_box

    một matplotlib. biến đổi. Ví dụ Bbox

    clip_on

    [Thật. Sai]

    clip_path

    một phiên bản Đường dẫn và một phiên bản Chuyển đổi, một Bản vá

    màu hoặc c

    bất kỳ màu matplotlib nào

    chứa

    chức năng kiểm tra lượt truy cập

    dash_capstyle

    [

    import numpy as np
    
    # evenly sampled time at 200ms intervals
    t = np.arange[0., 5., 0.2]
    
    # red dashes, blue squares and green triangles
    plt.plot[t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^']
    plt.show[]
    
    9.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    0.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    1]

    dash_joinstyle

    [

    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    2.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    0.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    4]

    dấu gạch ngang

    trình tự bật/tắt mực theo điểm

    dữ liệu

    [np. mảng xdata, np. mảng ydata]

    nhân vật

    một matplotlib. nhân vật. ví dụ hình

    nhãn mác

    bất kỳ chuỗi nào

    kiểu dáng hoặc ls

    [

    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    5.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    6.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    7.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    8.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    9. . ]

    băng thông hoặc lw

    giá trị float tính bằng điểm

    đánh dấu

    [

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    00.
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    01.
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    02.
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    03.
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    04.
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    05.
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    06 ]

    markeredgecolor hoặc mec

    bất kỳ màu matplotlib nào

    markeredgewidth hoặc mew

    giá trị float tính bằng điểm

    đánh dấufacecolor hoặc mfc

    bất kỳ màu matplotlib nào

    kích thước điểm đánh dấu hoặc ms

    trôi nổi

    đánh dấu

    [ Không có. số nguyên. [khởi động, sải chân] ]

    người hái

    được sử dụng trong lựa chọn dòng tương tác

    bán kính hái

    bán kính lựa chọn chọn dòng

    solid_capstyle

    [

    import numpy as np
    
    # evenly sampled time at 200ms intervals
    t = np.arange[0., 5., 0.2]
    
    # red dashes, blue squares and green triangles
    plt.plot[t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^']
    plt.show[]
    
    9.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    0.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    1]

    solid_joinstyle

    [

    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    2.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    0.
    data = {'a': np.arange[50],
            'c': np.random.randint[0, 50, 50],
            'd': np.random.randn[50]}
    data['b'] = data['a'] + 10 * np.random.randn[50]
    data['d'] = np.abs[data['d']] * 100
    
    plt.scatter['a', 'b', c='c', s='d', data=data]
    plt.xlabel['entry a']
    plt.ylabel['entry b']
    plt.show[]
    
    4]

    biến đổi

    một matplotlib. biến đổi. Ví dụ chuyển đổi

    dễ thấy

    [Thật. Sai]

    xdữ liệu

    np. mảng

    ydata

    np. mảng

    thứ tự

    bất kỳ số nào

    Để có danh sách các thuộc tính dòng có thể thiết lập, hãy gọi hàm với một hoặc nhiều dòng làm đối số

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
    
    4

    Làm việc với nhiều hình và trục

    MATLAB, và , có khái niệm về hình hiện tại và các trục hiện tại. Tất cả các chức năng vẽ đồ thị áp dụng cho các trục hiện tại. Hàm trả về các trục hiện tại [một thể hiện] và trả về hình hiện tại [một thể hiện]. Thông thường, bạn không phải lo lắng về điều này, vì tất cả đã được lo liệu ở hậu trường. Dưới đây là một tập lệnh để tạo hai ô con

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
    
    0

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro'] plt.axis[[0, 6, 0, 20]] plt.show[] 70 rõ ràng] nếu không tồn tại. Cuộc gọi chỉ định
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    72 trong đó
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    73 nằm trong khoảng từ 1 đến
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    74. Dấu phẩy trong cuộc gọi
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    71 là tùy chọn nếu
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    76. Vì vậy,
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    77 giống hệt với
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    78

    Bạn có thể tạo số lượng ô con và trục tùy ý. Nếu bạn muốn đặt Trục theo cách thủ công, tôi. e. , không phải trên lưới hình chữ nhật, hãy sử dụng , cho phép bạn chỉ định vị trí là

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16], 'ro']
    plt.axis[[0, 6, 0, 20]]
    plt.show[]
    
    90 trong đó tất cả các giá trị nằm trong tọa độ phân số [0 đến 1]. Xem Trình diễn trục để biết ví dụ về cách đặt trục theo cách thủ công và Nhiều ô con để biết .

    Bạn có thể tạo nhiều hình bằng cách sử dụng nhiều cuộc gọi với số hình tăng dần. Tất nhiên, mỗi hình có thể chứa bao nhiêu trục và ô phụ tùy ý bạn muốn

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
    
    1

    Bạn có thể xóa hình hiện tại bằng và các trục hiện tại bằng. Nếu bạn cảm thấy khó chịu khi các trạng thái [cụ thể là hình ảnh, hình và trục hiện tại] đang được duy trì ở hậu trường cho bạn, đừng tuyệt vọng. đây chỉ là một trình bao bọc trạng thái mỏng xung quanh một API hướng đối tượng mà bạn có thể sử dụng thay thế [xem Hướng dẫn dành cho nghệ sĩ ]

    Nếu bạn đang tạo ra nhiều số liệu, bạn cần lưu ý một điều nữa. bộ nhớ cần thiết cho một hình không được giải phóng hoàn toàn cho đến khi hình được đóng rõ ràng bằng. Xóa tất cả các tham chiếu đến hình và/hoặc sử dụng trình quản lý cửa sổ để tắt cửa sổ mà hình xuất hiện trên màn hình là không đủ, vì pyplot duy trì các tham chiếu bên trong cho đến khi được gọi

    Làm việc với văn bản

    có thể được sử dụng để thêm văn bản vào một vị trí tùy ý và , và được sử dụng để thêm văn bản vào các vị trí được chỉ định [xem Văn bản trong Lô Matplotlib for a more detailed example]

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
    
    2

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]] 3

    Các thuộc tính này được trình bày chi tiết hơn trong Các thuộc tính và bố cục văn bản .

    Sử dụng biểu thức toán học trong văn bản

    matplotlib chấp nhận các biểu thức phương trình TeX trong bất kỳ biểu thức văn bản nào. Ví dụ: để viết biểu thức \[\sigma_i=15\] trong tiêu đề, bạn có thể viết biểu thức TeX được bao quanh bởi các ký hiệu đô la.

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
    
    4

    _______443 trước chuỗi tiêu đề rất quan trọng -- nó biểu thị rằng chuỗi đó là một chuỗi thô và không coi các dấu gạch chéo ngược là dấu gạch chéo ngược khi trăn thoát. matplotlib có một trình phân tích cú pháp biểu thức TeX tích hợp sẵn và công cụ bố cục, đồng thời cung cấp các phông chữ toán học của riêng nó -- để biết chi tiết, hãy xem Viết biểu thức toán học . Do đó, bạn có thể sử dụng văn bản toán học trên nhiều nền tảng mà không cần cài đặt TeX. Đối với những người đã cài đặt LaTeX và dvipng, bạn cũng có thể sử dụng LaTeX để định dạng văn bản của mình và kết hợp đầu ra trực tiếp vào số liệu hiển thị hoặc phần tái bút đã lưu -- xem Kết xuất văn bản bằng LaTeX.

    Chú thích văn bản

    Việc sử dụng chức năng cơ bản ở trên đặt văn bản ở một vị trí tùy ý trên Trục. Một cách sử dụng phổ biến cho văn bản là chú thích một số tính năng của cốt truyện và phương thức này cung cấp chức năng của trình trợ giúp để tạo chú thích dễ dàng. Trong một chú thích, có hai điểm cần xem xét. vị trí được chú thích được đại diện bởi đối số

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
    
    46 và vị trí của văn bản
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
    
    47. Cả hai đối số này đều là bộ dữ liệu
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
    
    48

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
    
    5

    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]] 46 [đầu mũi tên] và
    plt.plot[[1, 2, 3, 4], [1, 4, 9, 16]]
    
    47 [vị trí văn bản] đều nằm trong tọa độ dữ liệu. Có nhiều hệ tọa độ khác mà người ta có thể chọn -- xem và để biết chi tiết. Bạn có thể tìm thấy nhiều ví dụ hơn trong Các ô chú thích .

    Logarit và các trục phi tuyến tính khác

    hỗ trợ không chỉ thang đo trục tuyến tính, mà cả thang đo logarit và logit. Điều này thường được sử dụng nếu dữ liệu kéo dài nhiều bậc độ lớn. Thay đổi tỷ lệ của một trục là dễ dàng

    Cái gì được sử dụng để vẽ đồ thị trong Python?

    Matplotlib cung cấp gói pyplot được sử dụng để vẽ đồ thị của dữ liệu đã cho. matplotlib. pyplot là một tập hợp các hàm kiểu lệnh giúp matplotlib hoạt động giống như MATLAB

    Có thể sử dụng hàm Matplotlib nào để hiển thị biểu đồ ra màn hình?

    Nếu bạn đang sử dụng Matplotlib từ bên trong tập lệnh, chức năng plt. show[] là bạn của bạn.

    Chủ Đề