Python cung cấp một trong những thư viện vẽ sơ đồ phổ biến nhất có tên là Matplotlib. Nó là mã nguồn mở, đa nền tảng để tạo các biểu đồ 2D từ dữ liệu trong mảng. Nó thường được sử dụng để trực quan hóa dữ liệu và biểu thị thông qua các biểu đồ khác nhau
Matplotlib ban đầu được hình thành bởi John D. Thợ săn năm 2003. Phiên bản gần đây của matplotlib là 2. 2. 0 phát hành vào tháng 1 năm 2018
Trước khi bắt đầu làm việc với thư viện matplotlib, chúng ta cần cài đặt trong môi trường Python của mình
Cài đặt Matplotlib
Nhập lệnh sau trong thiết bị đầu cuối của bạn và nhấn enter
Lệnh trên sẽ cài đặt thư viện matplotlib và gói phụ thuộc của nó trên hệ điều hành Window
Khái niệm cơ bản về Matplotlib
Một biểu đồ chứa các phần sau. Hãy hiểu những phần này
Nhân vật. Đó là một hình toàn bộ có thể chứa một hoặc nhiều trục [ô]. Chúng ta có thể coi Hình như một khung vẽ chứa các ô
trục. Một Hình có thể chứa một số Trục. Nó bao gồm hai hoặc ba đối tượng Trục [trong trường hợp 3D]. Mỗi Trục bao gồm tiêu đề, nhãn x và nhãn y
trục. Các trục là số lượng các đối tượng giống như đường và chịu trách nhiệm tạo ra các giới hạn biểu đồ
Nghệ sĩ. Nghệ sĩ là tất cả những gì chúng ta thấy trên biểu đồ như đối tượng Văn bản, đối tượng Line2D và đối tượng bộ sưu tập. Hầu hết các nghệ sĩ đều bị ràng buộc với Axes
Giới thiệu pyplot
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. Gói pyplot chứa nhiều hàm dùng để tạo hình, tạo vùng vẽ trong hình, trang trí đồ thị bằng nhãn, vẽ một số đường trong vùng vẽ, v.v.
Chúng ta có thể vẽ đồ thị bằng pyplot một cách nhanh chóng. Hãy cùng xem ví dụ sau
Ví dụ cơ bản về vẽ đồ thị
Đây là ví dụ cơ bản về tạo một biểu đồ đơn giản;
đầu ra
Vẽ các loại đồ thị khác nhau
Chúng ta có thể vẽ đồ thị khác nhau bằng cách sử dụng mô-đun pyplot. Hãy hiểu các ví dụ sau đây
1. đồ thị đường
Biểu đồ đường được sử dụng để hiển thị thông tin dưới dạng một chuỗi các đường. Thật dễ dàng để âm mưu. Xem xét ví dụ sau
Thí dụ -
đầu ra
Dòng có thể được sửa đổi bằng các chức năng khác nhau. Nó làm cho biểu đồ hấp dẫn hơn. Dưới đây là ví dụ
Thí dụ -
2. Thanh biểu đồ
Biểu đồ thanh là một trong những biểu đồ phổ biến nhất và nó được sử dụng để biểu thị dữ liệu được liên kết với các biến phân loại. Hàm bar[] chấp nhận ba đối số - biến phân loại, giá trị và màu sắc
Thí dụ -
3. Biểu đồ tròn
Biểu đồ là một đồ thị hình tròn được chia thành các phần con hoặc đoạn. Nó được sử dụng để biểu thị dữ liệu tỷ lệ phần trăm hoặc tỷ lệ trong đó mỗi lát bánh đại diện cho một danh mục cụ thể. Hãy hiểu ví dụ dưới đây
Thí dụ -
đầu ra
4. Biểu đồ
Biểu đồ và biểu đồ thanh khá giống nhau nhưng có một sự khác biệt nhỏ giữa chúng. Một biểu đồ được sử dụng để biểu thị phân phối và biểu đồ thanh được sử dụng để so sánh các thực thể khác nhau. Biểu đồ thường được sử dụng để vẽ biểu đồ tần suất của một số giá trị so với một tập hợp các phạm vi giá trị
Trong ví dụ sau, chúng tôi đã lấy dữ liệu về tỷ lệ phần trăm điểm khác nhau của học sinh và vẽ biểu đồ theo số lượng học sinh. Hãy hiểu ví dụ sau
Thí dụ -
đầu ra
Hãy hiểu một ví dụ khác
Ví dụ - 2
đầu ra
5. Âm mưu phân tán
Biểu đồ phân tán được sử dụng để so sánh biến này với các biến khác. Nó được định nghĩa là cách một biến ảnh hưởng đến biến kia. Dữ liệu được biểu diễn dưới dạng tập hợp các điểm. Hãy hiểu ví dụ sau
Thí dụ -
đầu ra
Ví dụ - 2
đầu ra
Trong hướng dẫn này, chúng ta đã thảo luận về tất cả các loại biểu đồ cơ bản được sử dụng trong trực quan hóa dữ liệu. Để tìm hiểu thêm về biểu đồ, hãy truy cập hướng dẫn matplotlib của chúng tôi
Hình trên cho thấy một đồ thị có trọng số đơn giản và chúng ta có thể biểu diễn đồ thị này dưới dạng tập hợp sáu đỉnh
$$V = \{a, b, c, d, e, f\}$$và tập chín cạnh
$$E = \{[a,b,7],[a,c,9],[a,f,14],[b,d,15],[b,c,10],[c,dĐường đi trong đồ thị là dãy các đỉnh nối với nhau bằng các cạnh. Chúng ta thường định nghĩa một đường dẫn là $w_1, w_2,. , w_n$ sao cho $[w_i, w_{i+1}] \in E$ với mọi $1 \le i \le n-1$. Độ dài đường dẫn không trọng số là số cạnh trong đường dẫn $[n-1]$. Độ dài đường dẫn có trọng số là tổng trọng số của tất cả các cạnh trong đường dẫn. Ví dụ ở hình trên, đường đi từ $a$ đến $e$ là dãy các đỉnh $[a, c, d, e]$. Các cạnh là $\{[a, c, 9], [c, d, 11], [d, e, 6]\}$
Chu trình trong đồ thị có hướng là đường đi bắt đầu và kết thúc tại cùng một đỉnh. Đồ thị không có chu trình gọi là đồ thị tuần hoàn. Đồ thị có hướng không có chu trình được gọi là đồ thị có hướng theo chu trình hoặc DAG
Trong mã, chúng tôi tạo hai lớp. Biểu đồ, chứa danh sách chính của các đỉnh và Vertex, biểu thị từng đỉnh trong biểu đồ
class Vertex: def __init__[self, node]: self.id = node self.adjacent = {} def __str__[self]: return str[self.id] + ' adjacent: ' + str[[x.id for x in self.adjacent]] def add_neighbor[self, neighbor, weight=0]: self.adjacent[neighbor] = weight def get_connections[self]: return self.adjacent.keys[] def get_id[self]: return self.id def get_weight[self, neighbor]: return self.adjacent[neighbor] class Graph: def __init__[self]: self.vert_dict = {} self.num_vertices = 0 def __iter__[self]: return iter[self.vert_dict.values[]] def add_vertex[self, node]: self.num_vertices = self.num_vertices + 1 new_vertex = Vertex[node] self.vert_dict[node] = new_vertex return new_vertex def get_vertex[self, n]: if n in self.vert_dict: return self.vert_dict[n] else: return None def add_edge[self, frm, to, cost = 0]: if frm not in self.vert_dict: self.add_vertex[frm] if to not in self.vert_dict: self.add_vertex[to] self.vert_dict[frm].add_neighbor[self.vert_dict[to], cost] self.vert_dict[to].add_neighbor[self.vert_dict[frm], cost] def get_vertices[self]: return self.vert_dict.keys[] if __name__ == '__main__': g = Graph[] g.add_vertex['a'] g.add_vertex['b'] g.add_vertex['c'] g.add_vertex['d'] g.add_vertex['e'] g.add_vertex['f'] g.add_edge['a', 'b', 7] g.add_edge['a', 'c', 9] g.add_edge['a', 'f', 14] g.add_edge['b', 'c', 10] g.add_edge['b', 'd', 15] g.add_edge['c', 'd', 11] g.add_edge['c', 'f', 2] g.add_edge['d', 'e', 6] g.add_edge['e', 'f', 9] for v in g: for w in v.get_connections[]: vid = v.get_id[] wid = w.get_id[] print '[ %s , %s, %3d]' % [ vid, wid, v.get_weight[w]] for v in g: print 'g.vert_dict[%s]=%s' %[v.get_id[], g.vert_dict[v.get_id[]]]
Lớp Vertex sử dụng một từ điển [liền kề] để theo dõi các đỉnh mà nó được kết nối và trọng số của mỗi cạnh. Hàm tạo Vertex khởi tạo id, thường là một chuỗi và từ điển liền kề. Phương thức add_neighbor[] được sử dụng để thêm kết nối từ đỉnh này sang đỉnh khác. Phương thức get_connections[] trả về tất cả các đỉnh trong danh sách kề. Phương thức get_weight[] trả về trọng số của cạnh từ đỉnh này đến đỉnh được truyền dưới dạng tham số
Lớp Graph chứa một từ điển [vert-dict] ánh xạ tên đỉnh tới các đối tượng đỉnh và chúng ta có thể thấy đầu ra bằng phương thức __str__[] của lớp Vertex
g.vert_dict[a]=a adjacent: ['f', 'c', 'b']
Đồ thị cũng cung cấp các phương thức để thêm các đỉnh vào biểu đồ và kết nối đỉnh này với đỉnh khác. Phương thức get_vertices[] trả về tên của tất cả các đỉnh trong biểu đồ. Ngoài ra, chúng ta có phương thức __iter__[] để dễ dàng lặp lại tất cả các đối tượng đỉnh trong một biểu đồ cụ thể. Cùng với nhau, hai phương thức cho phép chúng ta lặp qua các đỉnh trong biểu đồ theo tên hoặc theo chính các đối tượng
Trong hàm main[], chúng tôi đã tạo sáu đỉnh có tên là 'a' đến 'f'. Sau đó, chúng tôi hiển thị từ điển đỉnh. Lưu ý rằng đối với mỗi khóa 'a' đến 'f', chúng tôi đã tạo một phiên bản của Vertex. Tiếp theo, chúng ta thêm các cạnh nối các đỉnh lại với nhau. Cuối cùng, một vòng lặp lồng nhau xác minh rằng mỗi cạnh trong biểu đồ được lưu trữ đúng cách