モジュールの解説[表示] [編集] [履歴] [キャッシュを破棄]

このモジュールは、日本の人口を円グラフにあらわしたものを表示します。使い方は以下のとおりです。

入力
{{#invoke:日本の人口|_}}
出力


解説

local function create() 	local indexlist={} 	for i=0,100-1 do 		table.insert(indexlist,i) 	end 	return { 		width=1024, 		height=320, 		signals={ 			{ 				name="demo", 				init={ 					require("Module:日本の人口/data") 				}, 				streams={ 					{ 						type="arc:click,arc:touchend", 						expr="if(datum.a.b.data==0,[demo[0],datum.z],if(datum.a.b.data==1,[demo[0],demo[1],datum.z],if(datum.a.b.data==2,[demo[0],demo[1],demo[2],datum.z],[demo[0],demo[1],demo[2],demo[3]])))" 					} 				} 			}, 			{ 				name="active", 				init=nil, 				streams={ 					{ 						type="arc:mouseover", 						expr="datum.z" 					}, 					{ 						type="arc:mouseout", 						expr="null" 					} 				} 			} 		}, 		data={ 			{ 				name="i", 				values=indexlist 			}, 			{ 				name="base", 				values={0}, 				transform={ 					{ 						type="cross", 						with="i" 					}, 					{ 						type="filter", 						test="datum.b.data<demo.length" 					}, 					{ 						type="formula", 						field="z", 						expr="demo[datum.b.data]" 					} 				} 			} 		}, 		marks={ 			{ 				type="text", 				from={ 					data="base" 				}, 				properties={ 					enter={ 						align={ 							value="center" 						}, 						baseline={ 							value="middle" 						}, 						fill={ 							value="black" 						}, 						font={ 							value="TakaoExGothic" 						}, 						x={ 							field="b.data", 							mult=256, 							offset=128 						}, 						y={ 							value=128*2+32 						}, 						fontSize={ 							value=24 						} 					}, 					update={ 						text={ 							field="z.name" 						} 					} 				} 			}, 			{ 				type="text", 				from={ 					data="base", 					transform={ 						{ 							type="formula", 							field="text", 							expr="replace(floor(datum.z.population/100000000)+'億'+slice('0000'+floor(datum.z.population/10000)%10000,-4)+'万'+slice('0000'+datum.z.population%10000,-4),regexp('^[0億万]+'),'')+'人'" 						} 					} 				}, 				properties={ 					enter={ 						align={ 							value="center" 						}, 						baseline={ 							value="middle" 						}, 						fill={ 							value="black" 						}, 						font={ 							value="TakaoExGothic" 						}, 						x={ 							field="b.data", 							mult=256, 							offset=128 						}, 						y={ 							value=128*2+32*2 						}, 						fontSize={ 							value=16 						} 					}, 					update={ 						text={ 							field="text" 						} 					} 				} 			}, 			{ 				type="group", 				from={ 					data="base", 					transform={ 						{ 							type="facet", 							groupby={"b.data"}, 							transform={ 								{ 									type="cross", 									with="i" 								}, 								{ 									type="filter", 									test="datum.a.z.children!=null&&datum.b.data<datum.a.z.children.length" 								}, 								{ 									type="formula", 									field="z", 									expr="datum.a.z.children[datum.b.data]" 								}, 								{ 									type="pie", 									field="z.population", 									sort=true 								} 							} 						} 					} 				}, 				properties={ 					enter={ 						x={ 							field="key", 							mult=256 						}, 						y={ 							value=0 						}, 						width={ 							value=256 						}, 						height={ 							value=256 						} 					} 				}, 				marks={ 					{ 						type="arc", 						from={ 							transform={ 								{ 									type="formula", 									field="l", 									expr="if(datum.z==active,0.8,0.9)" 								}, 								{ 									type="formula", 									field="s", 									expr="if(demo[datum.a.b.data+1]==null||demo[datum.a.b.data+1]==datum.z,1,0.6)" 								} 							} 						}, 						properties={ 							enter={ 								stroke={ 									value="black" 								}, 								strokeWidth={ 									value=0.25 								} 							}, 							update={ 								fill={ 									h={ 										value=240 									}, 									l={ 										field="l" 									}, 									s={ 										field="s" 									} 								}, 								x={ 									value=128 								}, 								y={ 									value=128 								}, 								startAngle={ 									field="layout_end", 									mult=-1, 									offset=math.pi*2 								}, 								endAngle={ 									field="layout_start", 									mult=-1, 									offset=math.pi*2 								}, 								innerRadius={ 									value=32 								}, 								outerRadius={ 									value=128-8 								}, 								cursor={ 									value="pointer" 								} 							} 						} 					}, 					{ 						type="group", 						from={ 							transform={ 								{ 									type="filter", 									test="datum.layout_end-datum.layout_start>PI/20||datum.z==active" 								}, 								{ 									type="cross", 									with="i" 								}, 								{ 									type="filter", 									test="datum.b.data<datum.a.z.name.length" 								}, 								{ 									type="formula", 									field="u", 									expr="datum.b.data-(datum.a.z.name.length-1)/2" 								}, 								{ 									type="formula", 									field="v", 									expr="if(floor((floor(datum.a.layout_mid/(PI/4))+1)/2)%2==1,[1,0],[0,1])" 								}, 								{ 									type="formula", 									field="size", 									expr="if(datum.a.z==active,16,12)" 								}, 								{ 									type="formula", 									field="p", 									expr="[-sin(datum.a.layout_mid)*80+128+datum.u*datum.v[0]*datum.size*1.1,-cos(datum.a.layout_mid)*80+128+datum.u*datum.v[1]*datum.size*1.1]" 								}, 								{ 									type="formula", 									field="c", 									expr="datum.a.z.name[datum.b.data]" 								}, 								{ 									type="facet" 								} 							} 						}, 						marks={ 							{ 								type="text", 								interactive=false, 								properties={ 									enter={ 										align={ 											value="center" 										}, 										baseline={ 											value="middle" 										}, 										fill={ 											value="black" 										}, 										font={ 											value="TakaoExGothic" 										} 									}, 									update={ 										x={ 											field="p[0]" 										}, 										y={ 											field="p[1]" 										}, 										text={ 											field="c" 										}, 										fontSize={ 											field="size" 										} 									} 								} 							} 						} 					} 				} 			} 		} 	} end return { 	_=function(frame) 		return frame:extensionTag('graph',mw.text.jsonEncode(create()),{mode='interactive'}) 	end }