0
的Python 2.7,matplotlib 1.5.1,WIN 7,64Matplotlib三維散自動縮放問題
我想在繪製&其幾何最近鄰(即不其最近相連的鄰居)的節點之間的最短距離使用Dijkstra算法的圖。
該算法運行良好,但當涉及繪圖時,當繪製某些節點時,matplotlib的縮放會嚇倒。
代碼片段:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Find the paths between a given node & its nearest neighbours
def plotPath(pathStart, pathEnd, pointCol='b'):
shortPath = graph.dijkstra(pathStart, pathEnd) # this calculates the shortest path
pathNodesIdx = [i-1 for i in shortPath] # Algorithm returns 1 indexed whilst Python uses 0 indexed
pathCoords = L3.nodes[pathNodesIdx, 1:4] # retrieves the coordinate for the nodes on the path
ax.scatter(pathCoords[1:-1,0], pathCoords[1:-1,1], pathCoords[1:-1,2], s=240, c=pointCol, marker='o')
startNode = pathCoords[0]
endNode = pathCoords[-1]
ax.scatter(startNode[0], startNode[1], startNode[2], s=240, c='g', marker='o')
ax.scatter(endNode[0], endNode[1], endNode[2], s=240, c='r', marker='o')
for node in pathCoords[1:]:
ax.plot([startNode[0], node[0]], [startNode[1], node[1]], [startNode[2], node[2]], color=pointCol, linewidth=2.0)
startNode = node
return pathCoords
pointCol = 'b'
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
pathStart = 1 # given node
graph=Graph(L3.trabGraph) # L3.trabGraph is list conataining the edge/node/cost information for the graph
# Return indices for nearest neighbours
nearest = [i+1 for i in L3.nodeNeighbours(pathStart, numNeighs=6, method='brute')[1:]]
比如我剛剛繪製使用plotPath(1, nearest[2])
第二近鄰的路徑獲得:
但是如果我添加使用其他最近的鄰居,
p0 = plotPath(1, nearest[0])
p1 = plotPath(1, nearest[1])
p2 = plotPath(1, nearest[2])
p3 = plotPath(1, nearest[3])
p4 = plotPath(1, nearest[4])
我得到:
僅供參考每個個案的節點的座標:
p0 = array([[ 1.094, 1.76 , 1.125],
[ 1.188, 1.75 , 1.104]])
p1 = array([[ 1.094, 1.76 , 1.125],
[ 1.104, 1.875, 1.094]])
p2 = array([[ 1.094, 1.76 , 1.125],
[ 1.188, 1.75 , 1.104],
[ 1.188, 1.688, 1.094]])
p3 = array([[ 1.094, 1.76 , 1.125],
[ 1.198, 1.76 , 1.198]])
p4 = array([[ 1.094, 1.76 , 1.125],
[ 1.198, 1.76 , 1.198],
[ 1.188, 1.708, 1.198]])
對於我的生活我不明白爲什麼matplotlib做到這一點?有人知道嗎?
我已經遺漏了Dijkstra算法的實現(來自Rosetta代碼FYI)&爲了簡潔起見創建圖表&我無權共享圖表信息。
你能告訴我們matplotlib做什麼,你不喜歡/期望在這裏以及你會如何看待結果?不知道你想達到什麼目標,沒有人能幫助你。也許[這](http://stackoverflow.com/help/how-to-ask)有幫助。 – ImportanceOfBeingErnest
帖子中的2張圖片包含相同的數據。在第一張圖片中,您可以看到圖形已自動縮放以適合畫布的大小。在第二幅圖像中,圖形中增加了7個點,但自動縮放增加了畫布的大小,以至於現在所有點都聚集在角落。從帖子末尾的點列表可以看出,所有點只佔用新自動縮放畫布的非常小的一部分。 – DrBwts
是的,的確如此。但究竟是什麼問題? – ImportanceOfBeingErnest