3275765 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

2023.12
2023.11
2023.10
2023.09
2023.08

Freepage List

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2007.11.29
XML
カテゴリ:Python
Python から Graphviz を使う( pydot を日本語で出力)(10) からの引き続き、An Introduction to GraphViz の Figure 4. A Month Calendar に挑戦してみる。このシリーズ長くなってきて、どこに何を書いたのか分からなくなってきたので、今後のことを考えて題名をまとまりごとに付けることにする。

とりあえず、多少汎用性のあるものを作ってから、カレンダーを入れたものを作り直す。

まず、頭の部分につながっている下の部分は、それぞれサブグラフとして作って、頭につなげる。そして、それができあがったら、カレンダーをリストとして使う。そして、色を付けるなどして完成させる。まずは、サブグラフを作って頭につなげるところまでやってみる。

要素のリストからサブグラフを作る


細かいところは考えずに大枠を考えて作ってみる。

#!/usr/bin/env python
#-*- coding: utf-8 -*-

from pydot import Dot, Cluster, Node, Edge
import calendar

head_name = "200?年??月" # 頭の表示

# 列ごとのノードのダミー
node_list = [[u'日',u'月',u'火',u'水',u'木', u'金', u'土'],
['1', '2', '3', '4', '5', '6', '7'],
['8', '9', '10', '11', '12', '13', '14'],
['15', '16', '17', '18', '19', '20', '21'],
['23', '24', '25', '26', '27', '28', '29'],
['30', '31'],]

# グラフを用意する
g = Dot()
n = Node('node')
n.set_fontname('arialuni.ttf') # 日本語フォント指定
n.set_fontsize(9)
g.add_node(n)

# 列ごとにサブグラフを作る。
cluster = {}
for i, nodes in enumerate(node_list):
name = 'sub_%d' % i
cluster[i] = Cluster(graph_name=name)
edges = zip(nodes, nodes[1:])
g_nodes = [Edge(x[0], x[1]) for x in edges]
for n in g_nodes:
cluster[i].add_edge(n)
g.add_subgraph(cluster[i])

# リストの先頭をすべてヘッドにつなげる
top_node = [x[0] for x in node_list]
for n in top_node:
g.add_edge(Edge('head', n))

# 頭の属性を指定する
n = g.get_node('head')
n.set_label(head_name)
n.set_shape('Msquare')

g.write_png('calenda1.png')

calendar1.PNG

次へ続く。

365日月の満ち欠けがわかるインテリアカレンダー♪月齢ムーンカレンダーPHASES OF THE MOON

なかのひと






お気に入りの記事を「いいね!」で応援しよう

Last updated  2007.11.29 21:36:51
コメント(0) | コメントを書く



© Rakuten Group, Inc.