4

これは非常に具体的なインフォグラフィックの課題ですが、基本的な問題は、matplotlib、cario、またはその他のpythonライブラリを使用して単語間にアーチを構築する方法です。

次のデータ構造が与えられます。

私、あなた、7 | 私、リンゴ、9 | アップル、あなた、1 | バイク、私、5

名前は、他の名前よりも関係が最も大きい名前を水平方向に表示し、名前の間に重み付きのアーチが表示されます。10加重アーチは、5加重アーチの2倍の厚さになります。

インスピレーションは次のとおりです。同様の多様性。http://similardiversity.net/

チャレンジを始めましょう!

4

3 に答える 3

4

matplotlib 汎用グラフィックライブラリではないため、ここでは適切なライブラリではありません。ここで必要なのは、Cairoのようなものか、PyQtなどのGUIツールキットのグラフィックス機能を使用して実行できるはるかに単純なものです。もう1つの実行可能なアプローチは、優れた描画機能も備えたPyGameです。

例が必要な場合は、このカイロのサンプルページ、最初のサンプル-アークを参照してください。テキストワードを記述してから、それらの間の任意の幅と色のアークにアークコードを使用します。

于 2009-11-05T16:46:24.337 に答える
1

いくつかのライブラリがあり、そのうちの少なくとも1つは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(同じリード開発者)と非常によく似ています。

于 2009-11-22T14:26:48.750 に答える
0

難しさや挑戦がどこにあるのか、私にはよくわかりません。必要なのは、テキストと半円を描画できるグラフィックライブラリだけです。これは、ほとんどすべてで可能です。ベジェ曲線は必要ありません。たとえば、SVGファイルを作成するだけで済みます(ライブラリは必要なく、これをWebページにうまく埋め込んで、JavaScriptを使用してインタラクティブにすることができます)。

実際のプロットは単純です。円の中心は2つの単語の中間にあり、半径は2つの単語間の距離の半分です。次に、ストロークを調整して他の量を反映させることができます。

于 2009-11-05T13:53:49.890 に答える