Nếu bạn chưa làm như vậy, hãy cài đặt gói Matplotlib trong Python bằng lệnh bên dưới [trong Windows]
pip install matplotlib
Bạn có thể tham khảo hướng dẫn sau để biết hướng dẫn cài đặt gói trong Python
Bước 2. Thu thập dữ liệu cho biểu đồ thanh
Tiếp theo, thu thập dữ liệu cho biểu đồ thanh của bạn
Đối với mục đích minh họa, hãy sử dụng tập dữ liệu sau
quốc giagdp_per_capitaA45000B42000C52000D49000E47000Mục tiêu cuối cùng là mô tả dữ liệu trên bằng biểu đồ thanh
Bước 3. Nắm bắt dữ liệu trong Python
Đối với bước này, hãy chụp tập dữ liệu trên bằng Python. Bạn có thể nắm bắt tập dữ liệu này bằng cách sử dụng danh sách
country = ['A', 'B', 'C', 'D', 'E'] gdp_per_capita = [45000, 42000, 52000, 49000, 47000]
Bước 4. Tạo biểu đồ thanh trong Python bằng Matplotlib
Cuối cùng, bạn có thể sử dụng mẫu dưới đây để hỗ trợ bạn mô tả biểu đồ thanh
import matplotlib.pyplot as plt x_axis = ['value_1', 'value_2', 'value_3', ...] y_axis = ['value_1', 'value_2', 'value_3', ...] plt.bar[x_axis, y_axis] plt.title['title name'] plt.xlabel['x_axis name'] plt.ylabel['y_axis name'] plt.show[]
Ví dụ của chúng tôi, mã Python hoàn chỉnh sẽ như sau
import matplotlib.pyplot as plt country = ['A', 'B', 'C', 'D', 'E'] gdp_per_capita = [45000, 42000, 52000, 49000, 47000] plt.bar[country, gdp_per_capita] plt.title['Country Vs GDP Per Capita'] plt.xlabel['Country'] plt.ylabel['GDP Per Capita'] plt.show[]
Chạy mã và bạn sẽ nhận được biểu đồ thanh
Bạn có thể tạo kiểu thêm cho biểu đồ thanh bằng mã này
import matplotlib.pyplot as plt country = ['A', 'B', 'C', 'D', 'E'] gdp_per_capita = [45000, 42000, 52000, 49000, 47000] colors = ['green', 'blue', 'purple', 'brown', 'teal'] plt.bar[country, gdp_per_capita, color=colors] plt.title['Country Vs GDP Per Capita', fontsize=14] plt.xlabel['Country', fontsize=14] plt.ylabel['GDP Per Capita', fontsize=14] plt.grid[True] plt.show[]
Bây giờ, bạn sẽ có một biểu đồ thanh được tạo kiểu, trong đó mỗi quốc gia được thể hiện bằng một màu khác nhau
Tạo biểu đồ thanh bằng Python với Pandas DataFrame
Cho đến giờ, bạn đã biết cách tạo biểu đồ thanh bằng cách sử dụng danh sách
Ngoài ra, bạn có thể chụp tập dữ liệu trong Python bằng Pandas DataFrame, sau đó vẽ biểu đồ của bạn
Có nhiều tài liệu về thuật toán đồ thị, là một phần quan trọng của toán học rời rạc. Đồ thị cũng có nhiều ứng dụng thực tế trong các thuật toán máy tính. Có thể tìm thấy các ví dụ rõ ràng trong việc quản lý mạng, nhưng có rất nhiều ví dụ trong nhiều lĩnh vực khác. Chẳng hạn, mối quan hệ giữa người gọi và người gọi trong chương trình máy tính có thể được xem dưới dạng biểu đồ [trong đó các chu kỳ biểu thị đệ quy và các nút không thể truy cập biểu thị mã chết]
Rất ít ngôn ngữ lập trình cung cấp hỗ trợ trực tiếp cho biểu đồ dưới dạng kiểu dữ liệu và Python cũng không ngoại lệ. Tuy nhiên, đồ thị dễ dàng được xây dựng từ danh sách và từ điển. Chẳng hạn, đây là một biểu đồ đơn giản [tôi không thể sử dụng hình vẽ trong các cột này, vì vậy tôi viết ra các cung của biểu đồ]
A -> B A -> C B -> C B -> D C -> D D -> C E -> F F -> CĐồ thị này có sáu nút [A-F] và tám cung. Nó có thể được biểu diễn bằng cấu trúc dữ liệu Python sau.
graph = {'A': ['B', 'C'], 'B': ['C', 'D'], 'C': ['D'], 'D': ['C'], 'E': ['F'], 'F': ['C']}Đây là một cuốn từ điển có khóa là các nút của biểu đồ. Với mỗi khóa, giá trị tương ứng là danh sách chứa các nút được nối với nhau bằng một cung trực tiếp từ nút này. Điều này càng đơn giản càng tốt [thậm chí còn đơn giản hơn, các nút có thể được biểu thị bằng số thay vì tên, nhưng tên thuận tiện hơn và có thể dễ dàng tạo ra để mang nhiều thông tin hơn, chẳng hạn như tên thành phố]
Hãy viết một hàm đơn giản để xác định đường đi giữa hai nút. Nó lấy một biểu đồ và các nút bắt đầu và kết thúc làm đối số. Nó sẽ trả về một danh sách các nút [bao gồm cả nút bắt đầu và nút kết thúc] bao gồm đường dẫn. Khi không tìm thấy đường dẫn, nó trả về Không có. Nút tương tự sẽ không xảy ra nhiều lần trên đường dẫn được trả về [i. e. nó sẽ không chứa chu kỳ]. Thuật toán sử dụng một kỹ thuật quan trọng được gọi là quay lui. nó lần lượt thử từng khả năng cho đến khi tìm ra giải pháp
def find_path[graph, start, end, path=[]]: path = path + [start] if start == end: return path if not graph.has_key[start]: return None for node in graph[start]: if node not in path: newpath = find_path[graph, node, end, path] if newpath: return newpath return NoneMột lần chạy mẫu [sử dụng biểu đồ ở trên].
>>> find_path[graph, 'A', 'D'] ['A', 'B', 'C', 'D'] >>>Câu lệnh 'nếu' thứ hai chỉ cần thiết trong trường hợp có các nút được liệt kê là điểm cuối của các cung nhưng bản thân chúng không có các cung đi ra và hoàn toàn không được liệt kê trong biểu đồ. Các nút như vậy cũng có thể được chứa trong biểu đồ, với một danh sách trống các cung đi ra, nhưng đôi khi sẽ thuận tiện hơn nếu không yêu cầu điều này
Lưu ý rằng trong khi người dùng gọi
A -> B A -> C B -> C B -> D C -> D D -> C E -> F F -> C2 với ba đối số, nó sẽ gọi chính nó bằng đối số thứ tư. con đường đã đi qua. Giá trị mặc định cho đối số này là danh sách trống, '[]', nghĩa là chưa có nút nào được duyệt qua. Đối số này được sử dụng để tránh các chu kỳ ['if' đầu tiên bên trong vòng lặp 'for']. Đối số 'đường dẫn' không được sửa đổi. phép gán "path = path + [start]" tạo một danh sách mới. Nếu chúng ta đã viết "con đường. append[start]" thay vào đó, chúng tôi sẽ sửa đổi biến 'đường dẫn' trong trình gọi, với kết quả thảm hại. [Sử dụng các bộ dữ liệu, chúng ta có thể chắc chắn rằng điều này sẽ không xảy ra, với cái giá phải trả là phải viết "path = path + [start,]" vì "[start]" không phải là một bộ dữ liệu đơn -- nó chỉ là một bộ trong ngoặc đơn . ]
Thật đơn giản để thay đổi chức năng này để trả về danh sách tất cả các đường dẫn [không có chu trình] thay vì đường dẫn đầu tiên mà nó tìm thấy
country = ['A', 'B', 'C', 'D', 'E'] gdp_per_capita = [45000, 42000, 52000, 49000, 47000]0A chạy mẫu.
country = ['A', 'B', 'C', 'D', 'E'] gdp_per_capita = [45000, 42000, 52000, 49000, 47000]1Một biến thể khác tìm đường đi ngắn nhất.
country = ['A', 'B', 'C', 'D', 'E'] gdp_per_capita = [45000, 42000, 52000, 49000, 47000]2Chạy mẫu.
country = ['A', 'B', 'C', 'D', 'E'] gdp_per_capita = [45000, 42000, 52000, 49000, 47000]3Các chức năng này đơn giản như chúng nhận được. Tuy nhiên, chúng gần như tối ưu [đối với mã được viết bằng Python]. Trong một cột Mẫu Python khác, tôi sẽ cố gắng phân tích tốc độ chạy của chúng và cải thiện hiệu suất của chúng, với chi phí là nhiều mã hơn
CẬP NHẬT. Eryk Kopczyński đã chỉ ra rằng các chức năng này không tối ưu. Ngược lại, "chương trình này chạy theo thời gian hàm mũ, trong khi find_shortest_path có thể được thực hiện trong thời gian tuyến tính bằng cách sử dụng BFS [Tìm kiếm theo chiều rộng đầu tiên]. Hơn nữa, một BFS tuyến tính đơn giản hơn. "
country = ['A', 'B', 'C', 'D', 'E'] gdp_per_capita = [45000, 42000, 52000, 49000, 47000]4Lưu ý rằng điều này trả về đường dẫn ở định dạng lạ, e. g. ,
A -> B A -> C B -> C B -> D C -> D D -> C E -> F F -> C4. Cụ thể,
A -> B A -> C B -> C B -> D C -> D D -> C E -> F F -> C5 sẽ đưa ra câu trả lời sai [2, vì danh sách bên ngoài có độ dài 2]. Điều này là do việc thêm vào được thực hiện dưới dạng
A -> B A -> C B -> C B -> D C -> D D -> C E -> F F -> C6 thay vì
A -> B A -> C B -> C B -> D C -> D D -> C E -> F F -> C7. Phương pháp thứ hai sẽ sử dụng thời gian bậc hai và bộ nhớ, nhưng vẫn ổn đối với các đồ thị tương đối nhỏ;
Một biến thể khác là thêm nhiều dữ liệu trừu tượng hơn. tạo một lớp để biểu diễn các biểu đồ, có các phương thức thực hiện các thuật toán khác nhau. Mặc dù điều này thu hút mong muốn lập trình có cấu trúc, nhưng nó không làm cho mã hiệu quả hơn [ngược lại]. Việc thêm các nhãn khác nhau vào các nút hoặc cung và thêm các thuật toán tính đến các nhãn đó giúp dễ dàng hơn [e. g. để tìm con đường ngắn nhất giữa hai thành phố trên bản đồ]. Đây cũng sẽ là chủ đề của một chuyên mục khác