문제

이것은 매우 구체적인 정보 외과 적 챌린지 altough입니다. 자금 적 질문은 Matplotlib, Cario 또는 다른 Python Libary를 사용하여 단어 사이에 아치를 어떻게 만들 수 있습니까?

다음과 같은 데이터 구조가 주어졌습니다.

나, 너, 7 | 나, 사과, 9 | 애플, 너, 1 | 자전거, 나, 5

이름은 다른 사람보다 가장 큰 관계를 가진 이름을 수평으로 표시하고 이름 사이에 가중치가있을 것입니다. 10 무게 아치는 5 무게 아치의 두 배가됩니다.

영감은 비슷한 diverstiy에서 비롯됩니다. http://similardiversity.net/

챌린지를 시작하십시오!

도움이 되었습니까?

해결책

적어도 하나는 Matplotlib에 의존하는 여러 라이브러리가 있습니다. 그래프 구조를 구축하려면 NetworkX (www.networkx.lanl.gov)를 권장 한 다음 관련 Matplotlib 메소드를 호출하여 플롯 할 수 있습니다. NetworkX와 Matplotlib는 함께 잘 작동합니다.

import networkx as NX
import matplotlib.pyplot as PLT
Gh = NX.Graph()
Gh.add_edge("You", "Bike", weight=1.0)
Gh.add_edge("Bike", "Apple", weight=0.9)
Gh.add_edge("Me", "Bike", weight=1.1)
all_nodes = Gh.nodes()
# to scale node size with degree:
scaled_node_size = lambda(node) : NX.degree(Gh, node) * 700
position = NX.spring_layout(Gh)    # just choose a layout scheme
NX.draw_networkx_nodes(Gh, position, node_size=map(scaled_node_size, all_nodes))
NX.draw_network_edges(Gh, position, Gh.edges(), width=1.0, alpha=1.0, edge_color="red")
# now for the Matplotlib part:
PLT.axis("off")
PLT.show()

보시다시피, '가중치'매개 변수를 '에지'메소드에 따라 요인을 적용하여 노드 스케일링을 위해 수행 한 것과 동일한 방식으로 가장자리를 적용하여 가장자리를 스케일링 할 수 있습니다.

또한 pygraphviz (분명히 GraphViz를 백엔드로 사용) 권장합니다. NetWWorkX (동일한 리드 개발자)와 매우 유사합니다.

다른 팁

matplotlib 범용 그래픽 라이브러리가 아니기 때문에 여기에 올바른 도서관이 아닙니다. 여기에 필요한 것은 것입니다 카이로, 또는 훨씬 간단한 경우 PYQT와 같은 GUI 툴킷의 그래픽 기능을 수행 할 수 있습니다. 또 다른 실행 가능한 접근 방식은 Pygame이며, 이는 도면 기능도 좋습니다.

예를 원하시면 이것을 참조하십시오 카이로 샘플 페이지, 첫 번째 샘플 - 아크. 텍스트 단어를 작성한 다음 너비와 색상의 아크에 아크 코드를 사용합니다.

난 어려움이나 도전이 어디에 있는지 알지 못합니다. 필요한 것은 텍스트와 반 원을 그릴 수있는 그래픽 라이브러리 만 있으면 거의 모든 것이 가능합니다. 베 지어 곡선이 필요하지 않습니다. 예를 들어 SVG 파일을 만들 수 있습니다 (그런 다음 라이브러리가 필요하지 않으며 웹 페이지에 이것을 잘 포함하고 일부 JavaScript를 사용하여 대화식으로 만들 수 있습니다).

실제 음모는 간단합니다. 원의 중심은 두 단어 사이의 중간에 있고, 반경은 그들 사이의 거리의 절반입니다. 그런 다음 뇌졸중을 조정하여 다른 수량을 반영 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top