作者:俊欣
來源:關于數據分析與可視化
流程圖存在于我們生活的方方面面,對于我們追蹤項目的進展,做出各種事情的決策都有著巨大的幫助,而對于萬能的Python/ target=_blank class=infotextkey>Python而言呢,繪制流程圖也是十分輕松的,今天小編就來為大家介紹兩個用于繪制流程圖的模塊,我們先來看第一個。
SchemDraw
那么在SchemDraw模塊當中呢,有六個元素用來代表流程圖的主要節點的,橢圓形代表的是決策的開始和結束,代碼如下
import schemdrawfrom schemdraw.flow import *with schemdraw.Drawing() as d: d += Start().label("Start")
output
箭頭表示的是決策的走向,用來連接各個節點的,代碼如下
with schemdraw.Drawing() as d: d += Arrow(w = 5).right().label("Connector")
output
平行四邊形代表的是你所要去處理和解決的問題,而長方形所代表的是你所要為此做出的努力或者說是過程,代碼如下
with schemdraw.Drawing() as d: d += Data(w = 5).label("What's the problem")
output
with schemdraw.Drawing() as d: d += Process(w = 5).label("Processing")
output
而菱形代表的則是決策的具體情況,代碼如下
with schemdraw.Drawing() as d: d += Decision(w = 5).label("Decisions")
output
我們來繪制一個簡單的流程圖,假如周末的時候我們想著要不要出去露營(Camping),那既然要去露營的話,我們肯定是需要查看一下天氣,看一下是否是晴天(Sunny),如果是下雨天(Rainy)的話,就不去,按照這種邏輯,我們來繪制一下流程圖,代碼如下
import schemdrawfrom schemdraw.flow import *with schemdraw.Drawing() as d: d+= Start().label("Start") d+= Arrow().down(d.unit/2) # 具體是啥問題嘞 d+= Data(w = 4).label("Go camping or not") d+= Arrow().down(d.unit/2) # 第一步 查看天氣 d+= Box(w = 4).label("Check weather first") d+= Arrow().down(d.unit/2) # 是否是晴天 d+= (decision := Decision(w = 5, h= 5, S = "True", E = "False").label("See if it's sunny")) # 如果是真的話 d+= Arrow().length(d.unit/2) d+= (true := Box(w = 5).label("Sunny, go camping")) d+= Arrow().length(d.unit/2) # 結束 d+= (end := Ellipse().label("End")) # 如果不是晴天的話 d+= Arrow().right(d.unit).at(decision.E) # 那如果是下雨天的話,就不能去露營咯 d+= (false := Box(w = 5).label("Rainy, stay at home")) # 決策的走向 d+= Arrow().down(d.unit*2.5).at(false.S) # 決策的走向 d+= Arrow().left(d.unit*2.15) d.save("palindrome flowchart.jpeg", dpi = 300)
output
Networkx模塊用來創建和處理復雜的圖網絡結構,生成多種隨機網絡和經典網絡,分析網絡結構和建立網絡模型,例如在繪制人脈關系網的案例當中就可以用到networkx模塊,
而例如一個公司的組織架構圖,也可以用到該模塊,來簡單直觀的繪制公司的整體架構,代碼如下
import networkx as nximport matplotlib.pyplot as pltimport numpy as npG = nx.DiGraph()nodes = np.arange(0, 8).tolist()G.add_nodes_from(nodes)# 節點連接的信息,哪些節點的是相連接的G.add_edges_from([(0,1), (0,2), (1,3), (1, 4), (2, 5), (2, 6), (2,7)])# 節點的位置pos = {0:(10, 10), 1:(7.5, 7.5), 2:(12.5, 7.5), 3:(6, 6), 4:(9, 6), 5:(11, 6), 6:(14, 6), 7:(17, 6)}# 節點的標記labels = {0:"CEO", 1: "Team A Lead", 2: "Team B Lead", 3: "Staff A", 4: "Staff B", 5: "Staff C", 6: "Staff D", 7: "Staff E"}nx.draw_networkx(G, pos = pos, labels = labels, arrows = True, node_shape = "s", node_color = "white")plt.title("Company Structure")plt.show()
output
看到這里,大家可能會覺得會指出來的結果有點簡單,想要添加上去些許顏色,代碼如下
nx.draw_networkx(G, pos = pos, labels = labels, bbox = dict(facecolor = "skyblue", boxstyle = "round", ec = "silver", pad = 0.3), edge_color = "gray" )plt.title("Company Structure")plt.show()
output