Logo address

Other Examples

2012/11/29

折れ線グラフ

あなたのブラウザは SVG をサポートしていません。最新のブラウザをお使いください。

この SVG ファイルを生成する Python のコードは

# encoding: utf-8
import svg
from table import *

data="""
年度	発電電力量(GWH)	発電時間(H)	設備利用率(%)	時間稼働率(%)
累計	533,014	836,521	70.6	72.3
2011	1,065	881	4.6	4.4
2010	16,961	18,778	74.0	72.3
2009	13,639	13,560	59.5	58.4
2008	11,031	12,924	48.1	47.9
2007	14,294	16,278	62.2	63.2
2006	16,304	19,666	71.1	71.5
2005	17,776	20,672	77.5	76.8
2004	19,965	22,647	87.1	86.3
2003	19,485	22,111	84.8	84.2
2002	18,569	21,947	81.0	80.9
2001	18,358	21,836	80.1	81.1
2000	18,863	17,427	82.3	82.5
1999	6,061	7,690	26.4	26.9
1998	20,755	23,134	90.5	91.1
1997	17,824	27,390	73.1	74.6
1996	20,227	28,780	83.0	84.2
1995	18,534	27,004	75.8	77.3
1994	20,157	28,743	82.7	83.9
1993	18,474	20,396	75.8	76.2
1992	19,441	28,124	79.7	81.1
1991	18,564	26,983	75.9	77.4
1990	20,340	29,767	83.4	85.2
1989	18,046	25,758	74.0	75.5
1988	19,153	26,085	78.6	80.1
1987	18,396	26,339	75.3	77.2
1986	12,349	21,995	80.1	82.6
1985	10,966	20,858	77.1	79.4
1984	9,696	18,980	68.2	71.1
1983	10,135	20,324	71.1	75.0
1982	8,264	17,758	58.1	61.8
1981	8,178	16,424	57.5	62.0
1980	10,059	20,361	70.8	75.6
1979	8,845	18,694	62.0	68.0
1978	5,753	16,645	73.2	82.3
1977	2,155	10,926	47.0	54.6
1976	3,154	14,359	68.8	79.9
1975	2,392	12,023	52.1	61.4
1974	2,514	12,361	54.9	65.2
1973	3,494	15,225	76.3	86.4
1972	3,244	14,512	70.8	81.9
1971	3,174	13,999	69.1	77.1
1970	3,288	14,173	74.4	81.3
1969	938	6,227	58.7	69.1
1968	1,037	7,048	71.3	80.5
1967	605	4,310	41.5	49.1
1966	490	4,401	49.2	73.4
 """
d = nlist(data)
d1 = d[2:]
d1.sort()
z = col(d1,0,3) # extract columns 0 and 3
c = svg.Canvas(0,0,800,450,map=(1950,110,2020,-20))
c.grid(10,10,range=(1960,0,2015,100))
for n in range(1960,2015,10):
  c.text(n,0,text=n,anchor="N",pad=0.5)
for n in range(0,101,10):
  c.text(1960,n,text=n,anchor="E",pad=0.5)
c.text(1985,-10,text="年度",anchor="C")
c.text(1955,55,text="稼働率(%)",rotate=-90,anchor="C")
c.text(1970,25,text="日本原子力発電(株)の原発施設稼働率の推移",font="size:16",anchor="W")

c.line(z)
c.close()

ここに使われている table も筆者のライブラリで、読み取ったテーブル形式のデータから簡単にリストや辞書を使ったテーブルを作成できる。
グラフのラベル付けなどを自動化したいのであるが、まだ未完成である。

テキストを 90度回転する場面が発生しているか、これをやってみると、SVG の text タグは

<text x="X" y="Y" transform="rotate(A)" .../>
の形式の扱いは困難で
<text transform="translate(X,Y) rotate(A)" .../>
とやらないと、うまく回転できないことが分かった。(回転の中心ポイントの問題)