nysol-view 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/m2gv.rb +812 -0
- data/bin/mautocolor.rb +244 -0
- data/bin/mbar.rb +818 -0
- data/bin/mdtree.rb +1017 -0
- data/bin/mgv.rb +809 -0
- data/bin/mnest2tree.rb +159 -0
- data/bin/mpie.rb +733 -0
- data/bin/msankey.rb +644 -0
- data/lib/nysol/viewjs.rb +13490 -0
- metadata +101 -0
data/bin/mautocolor.rb
ADDED
@@ -0,0 +1,244 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#-*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "nysol/mcmd"
|
6
|
+
require "set"
|
7
|
+
|
8
|
+
# ver="1.0" # 初期リリース 2016/12/12
|
9
|
+
$cmd=$0.sub(/.*\//,"")
|
10
|
+
|
11
|
+
$version=1.0
|
12
|
+
$revision="###VERSION###"
|
13
|
+
|
14
|
+
def help
|
15
|
+
|
16
|
+
STDERR.puts <<EOF
|
17
|
+
------------------------
|
18
|
+
#{$cmd} version #{$version}
|
19
|
+
------------------------
|
20
|
+
概要) 値に応じた色を自動的に割り付ける
|
21
|
+
|
22
|
+
書式1) #{$cmd} f= col= [order=alpha|descend|ascend] [transmit=] o=
|
23
|
+
|
24
|
+
f= : カラー項目名(この値に応じてカラーの値が決まる,1項目のみ指定可)。
|
25
|
+
col=category|2色HEXコード(ex. FF0000,0000FF)
|
26
|
+
categoryを指定した場合は、f=の値をカテゴリとして扱い、
|
27
|
+
アルファベット順にRGBの値を以下の順番で設定していく。
|
28
|
+
FF,80,C0,40,E0,60,A0,20,F0,70,B0,30,D0,50,90,10
|
29
|
+
また上記各値の中でRGBの組合わせをR,G,B,RG,GB,RBの順に設定する。
|
30
|
+
よって、16 x 6=96通りの色が設定される。
|
31
|
+
カテゴリの数が96を超えた場合、超えた分は000000(黒)として出力される。
|
32
|
+
FF0000,00FF00,0000FF,FFFF00,00FFFF,FF00FF,800000,008000,000080,...
|
33
|
+
2色のHEXコードを指定した場合、f=の値を数値として扱い、
|
34
|
+
指定した2色間のグラデーションを数値の大きさに応じて割り当てる。
|
35
|
+
FF0000,0000FFの2色を指定した場合、f=項目の最小値がFF0000で、最大値が0000FFとなる。
|
36
|
+
f=項目の値をv,最小値をmin,最大をmaxとすると、
|
37
|
+
vに対して割り当てられるR(赤)要素のカラー値は以下の通り計算される。
|
38
|
+
floor(r0+(r1-r0)*dist) ただし、dist:(v-min)/(max-min)
|
39
|
+
r0: color=で指定した色範囲開始のR要素
|
40
|
+
r1: color=で指定した色範囲終了のR要素
|
41
|
+
ex) color=FF0000,0000FFと指定していれば、r0=FF,r1=00
|
42
|
+
与えられた値が全て同じ場合は計算不能のため、null値を出力する。
|
43
|
+
order=: col=categoryの場合、色の割り付け順序を指定する(デフォルトはalpha)
|
44
|
+
alpha: f=で指定した値をalphabet順
|
45
|
+
descend: f=で指定した値の件数が多い順
|
46
|
+
ascend: f=で指定した値の件数が少ない順
|
47
|
+
transmit= : 透過率を指定する。透過率は00からFFまでの値で、00で完全透明、FFで透明度0となる。
|
48
|
+
色コードの後ろに追加される。
|
49
|
+
o= : 出力ファイル名
|
50
|
+
|
51
|
+
-h,--help : ヘルプの表示
|
52
|
+
|
53
|
+
カテゴリデータをカラー化する例)
|
54
|
+
$ cat color.csv
|
55
|
+
num,class
|
56
|
+
01,B,10
|
57
|
+
02,A,15
|
58
|
+
03,C,11
|
59
|
+
04,D,29
|
60
|
+
05,B,32
|
61
|
+
06,A,
|
62
|
+
07,C,9
|
63
|
+
08,D,3
|
64
|
+
09,B,11
|
65
|
+
10,E,22
|
66
|
+
11,,21
|
67
|
+
12,C,35
|
68
|
+
$ mautocolor.rb f=class color=category a=color i=color.csv o=output1.csv↩
|
69
|
+
$ cat output1.csv
|
70
|
+
num,class1,value,color
|
71
|
+
01,B,10,00FF00
|
72
|
+
02,A,15,FF0000
|
73
|
+
03,C,11,0000FF
|
74
|
+
04,D,29,FFFF00
|
75
|
+
05,B,32,00FF00
|
76
|
+
06,A,,FF0000
|
77
|
+
07,C,9,0000FF
|
78
|
+
08,D,3,FFFF00
|
79
|
+
09,B,11,00FF00
|
80
|
+
10,E,22,00FFFF
|
81
|
+
11,,21,
|
82
|
+
12,C,35,0000FF
|
83
|
+
|
84
|
+
数値データをカラー化する例)
|
85
|
+
$ mautocolor.rb f=value color=FF0000,0000FF a=color i=color.csv o=output2.csv↩
|
86
|
+
$ cat output2.csv
|
87
|
+
num,class,value,color
|
88
|
+
01,B,10,c70037
|
89
|
+
02,A,15,9f005f
|
90
|
+
03,C,11,bf003f
|
91
|
+
04,D,29,2f00cf
|
92
|
+
05,B,32,1700e7
|
93
|
+
06,A,,
|
94
|
+
07,C,9,cf002f
|
95
|
+
08,D,3,ff0000
|
96
|
+
09,B,11,bf003f
|
97
|
+
10,E,22,670097
|
98
|
+
11,,21,6f008f
|
99
|
+
12,C,35,0000ff
|
100
|
+
EOF
|
101
|
+
exit
|
102
|
+
end
|
103
|
+
def ver()
|
104
|
+
$revision ="0" if $revision =~ /VERSION/
|
105
|
+
STDERR.puts "version #{$version} revision #{$revision}"
|
106
|
+
exit
|
107
|
+
end
|
108
|
+
|
109
|
+
class Color
|
110
|
+
def initialize(nc,ni,col,order)
|
111
|
+
@nc=nc
|
112
|
+
@ni=ni
|
113
|
+
@col=col
|
114
|
+
if @nc and @ni
|
115
|
+
if col=="category"
|
116
|
+
@type="category"
|
117
|
+
# preparing a color pallet
|
118
|
+
pallet=[]
|
119
|
+
val=["FF","80","C0","40","E0","60","A0","20","F0","70","B0","30","D0","50","90","10"]
|
120
|
+
val.each{|v|
|
121
|
+
pallet << "#{v}0000"
|
122
|
+
pallet << "00#{v}00"
|
123
|
+
pallet << "0000#{v}"
|
124
|
+
pallet << "#{v}#{v}00"
|
125
|
+
pallet << "00#{v}#{v}"
|
126
|
+
pallet << "#{v}00#{v}"
|
127
|
+
}
|
128
|
+
# read color field data and make a mapping table(data to pallet)
|
129
|
+
temp=MCMD::Mtemp.new
|
130
|
+
xxcTable=temp.file
|
131
|
+
f=""
|
132
|
+
f << "mcut f=#{nc}:ckey i=#{ni} |"
|
133
|
+
f << "mdelnull f=ckey |"
|
134
|
+
f << "mcount k=ckey a=freq |"
|
135
|
+
if order=="descend"
|
136
|
+
f << "mbest s=freq%nr,ckey from=0 size=96 o=#{xxcTable}"
|
137
|
+
elsif order=="ascend"
|
138
|
+
f << "mbest s=freq%n,ckey from=0 size=96 o=#{xxcTable}"
|
139
|
+
else
|
140
|
+
f << "mbest s=ckey from=0 size=96 o=#{xxcTable}"
|
141
|
+
end
|
142
|
+
system(f)
|
143
|
+
@cTable={}
|
144
|
+
iCSV=MCMD::Mcsvin.new("i=#{xxcTable}")
|
145
|
+
i=0
|
146
|
+
iCSV.each{|flds|
|
147
|
+
cKey=flds["ckey"]
|
148
|
+
@cTable[cKey]=pallet[i]
|
149
|
+
i+=1
|
150
|
+
}
|
151
|
+
else
|
152
|
+
@type="numeric"
|
153
|
+
ary=col.split(",")
|
154
|
+
if ary.size!=2 or ary[0].size!=6 or ary[1].size!=6
|
155
|
+
raise "col= takes two 6-digites HEX codes like FF0000,00FF00"
|
156
|
+
end
|
157
|
+
@r0=ary[0][0..1].hex
|
158
|
+
@g0=ary[0][2..3].hex
|
159
|
+
@b0=ary[0][4..5].hex
|
160
|
+
@r1=ary[1][0..1].hex
|
161
|
+
@g1=ary[1][2..3].hex
|
162
|
+
@b1=ary[1][4..5].hex
|
163
|
+
|
164
|
+
temp=MCMD::Mtemp.new
|
165
|
+
xxcTable=temp.file
|
166
|
+
f=""
|
167
|
+
f << "mcut f=#{nc}:ckey i=#{ni} |"
|
168
|
+
f << "mdelnull f=ckey |"
|
169
|
+
f << "msummary f=ckey c=min,max o=#{xxcTable}"
|
170
|
+
system(f)
|
171
|
+
|
172
|
+
# fld,min,max
|
173
|
+
# ckey,1,14
|
174
|
+
tbl=MCMD::Mtable.new("i=#{xxcTable}")
|
175
|
+
@min=tbl.cell(1)
|
176
|
+
@max=tbl.cell(2)
|
177
|
+
@min=@min.to_f if @min
|
178
|
+
@max=@max.to_f if @max
|
179
|
+
@range=@max-@min if @min and @max
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def getRGB(val)
|
185
|
+
return nil if val==nil or val==""
|
186
|
+
if @type=="category"
|
187
|
+
rgb=@cTable[val]
|
188
|
+
rgb="000000" unless rgb
|
189
|
+
return rgb
|
190
|
+
else
|
191
|
+
if @range==0 or @min==nil or @max==nil
|
192
|
+
rgb=nil
|
193
|
+
else
|
194
|
+
val=val.to_f
|
195
|
+
distance=(val-@min)/@range
|
196
|
+
r=(@r0+(@r1-@r0)*distance).to_i.to_s(16)
|
197
|
+
g=(@g0+(@g1-@g0)*distance).to_i.to_s(16)
|
198
|
+
b=(@b0+(@b1-@b0)*distance).to_i.to_s(16)
|
199
|
+
rgb=sprintf("%2s%2s%2s",r,g,b).gsub(" ","0")
|
200
|
+
end
|
201
|
+
return rgb
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
#############
|
207
|
+
# entry point
|
208
|
+
help() if ARGV.size <= 0 or ARGV[0]=="--help"
|
209
|
+
ver() if ARGV[0]=="--version"
|
210
|
+
|
211
|
+
# ===================================================================
|
212
|
+
# パラメータ処理
|
213
|
+
args=MCMD::Margs.new(ARGV,"f=,color=,order=,transmit=,a=,i=,o=","f=,i=,a=,color=")
|
214
|
+
|
215
|
+
# mcmdのメッセージは警告とエラーのみ
|
216
|
+
ENV["KG_VerboseLevel"]="2" unless args.bool("-mcmdenv")
|
217
|
+
|
218
|
+
iFile = args. file("i=","r")
|
219
|
+
fld = args.field("f=", iFile)["names"][0]
|
220
|
+
color = args.str("color=","category")
|
221
|
+
aFld = args.str("a=")
|
222
|
+
order = args.str("order=","alpha")
|
223
|
+
transmit = args.str("transmit=")
|
224
|
+
oFile = args.file("o=","w")
|
225
|
+
|
226
|
+
color=Color.new(fld,iFile,color,order)
|
227
|
+
iCSV=MCMD::Mcsvin.new("i=#{iFile} -array")
|
228
|
+
|
229
|
+
oFlds=[]
|
230
|
+
oFlds << iCSV.names
|
231
|
+
oFlds << aFld
|
232
|
+
oCSV=MCMD::Mcsvout.new("f=#{oFlds.join(',')} o=#{oFile}")
|
233
|
+
fldNum=iCSV.names.index(fld)
|
234
|
+
iCSV.each{|flds|
|
235
|
+
colVal=flds[fldNum]
|
236
|
+
colorStr=color.getRGB(colVal)
|
237
|
+
colorStr="#{colorStr}#{transmit}" if colorStr and transmit
|
238
|
+
flds << colorStr
|
239
|
+
oCSV.write(flds)
|
240
|
+
}
|
241
|
+
|
242
|
+
# 終了メッセージ
|
243
|
+
MCMD::endLog(args.cmdline)
|
244
|
+
|