Project/Web

์ƒํ™œ์ฝ”๋”ฉ ๋งˆ์ธ๋“œ๋งต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ cytoscape ์‚ฌ์šฉ๋ฒ•

TakeKnowledge 2023. 7. 13. 21:24
๋ฐ˜์‘ํ˜•

๐Ÿš€ ๋ฐœ๋‹จ

์ƒํ™œ์ฝ”๋”ฉ์— ์ ‘์†ํ•ด์„œ ์ˆ˜์—… ์†Œ๊ฐœ ์„น์…˜์œผ๋กœ ๊ฐ€๋ฉด ์ˆ˜์—…๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆ์ธ๋“œ ๋งต์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ ๊ฒƒ๋“ค์˜ ํ๋ฆ„์„ ์œ„์™€ ๊ฐ™์ด ์ •๋ฆฌํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ cytoscape๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธ ํ›„ ์ด๋ฅผ ํ™œ์šฉํ•ด ๋น„์Šทํ•œ ์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœ์„ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ cytoscape ๊ด€๋ จํ•œ ๋ณ„๋„์˜ ํ•œ๊ธ€ ์ •๋ณด๊ฐ€ ์—†์–ด ์˜์–ด๋ฅผ ์ž˜ ๋ชปํ•˜๋Š” ์ €๋Š” ์ˆ˜๋งŽ์€ ์‚ฝ์งˆ์˜ ์‹œ๊ฐ„์„ ๊ฑฐ์ณ์•ผ ํ–ˆ๊ธฐ์— ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ์“ฐ์‹ค ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์•Œ๊ฒŒ ๋œ ๊ฒƒ๋“ค์„ ํ•œ๊ธ€๊ธฐ๋ก์œผ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค. ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค!

 

๐Ÿงต ์ดˆ๊ธฐ ์„ค์ •

ํˆด์€ Visual Studio Code ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…๋“œ๋ฆฌ๊ณ  NPM์€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๋จผ์ € ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์„œ

 

npm init -y

 

๋กœ ์ดˆ๊ธฐํ™” ํ•œ ํ›„

 

npm install @babel/core @babel/preset-env @babel/preset-react babel-loader clean-webpack-plugin css-loader html-loader file-loader html-webpack-plugin mini-css-extract-plugin webpack webpack-cli webpack-dev-server cytoscape

 

๋ฅผ ์ž…๋ ฅํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ํ•ด ์ค๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ์—”

 

 

์œ„์™€ ๊ฐ™์ด ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

index.html

 

style.css

 

index.js

 

 

.babelrc

// .babelrc
{
    "presets": [
        "@babel/preset-env"
    ]
}

.gitignore

 

node_modules

 

package.json

 

webpack.config.js

 

์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•ด ์ค€ ๋‹ค์Œ

npm run start

์œ„์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•œ ํ›„ http://localhost:9000/ ๋กœ ์ ‘์†ํ•˜๋ฉด

 

 

์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ์ถœ๋ ฅ๋˜๊ณ , ์ด๋Ÿฌ๋ฉด ์ด์ œ ์„ธํŒ…์€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ฅ cytoscape ํ™œ์šฉ๋ฒ•

๐Ÿน ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ

cytoscape๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ๋จผ์ € node์™€ edge๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋จผ์ € ๊ฑฐ์ ์ด ๋˜๋Š” node๋Š”

 

"data": {
  "id": 'id',
  "url": '๋งํฌ๊ฑธ๊ณ  ์‹ถ์€ ์ฃผ์†Œ(์˜ต์…˜)'
  "label": 'ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ(์˜ต์…˜)'
}

 

์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•ด์ฃผ๋ฉด ๋˜๊ณ  ์—ฐ๊ฒฐ์„ ์ธ edge๋Š”

 

"data": {
	"id": 'id',
    "source": '์—ฐ๊ฒฐํ•  ๋…ธ๋“œ ์ค‘ ํ•˜์œ„์— ๋‘˜ node id',
    "target":'์—ฐ๊ฒฐํ•  ๋…ธ๋“œ ์ค‘ ์ƒ์œ„์— ๋‘˜ node id'
}

ํ˜•ํƒœ๋กœ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

source์— ํ•˜์œ„์— ๋‘˜ node๋ฅผ, target์— ์ƒ์œ„์— ๋‘˜ node๋ฅผ ๋‘ฌ์•ผ ํ•œ๋‹ค๋Š” ๋ถ€๋ถ„์ด ์˜์•„ํ•˜์‹ค ํ…Œ์ง€๋งŒ(์ €๋Š” ์ด๊ฒŒ ์–ด์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค) ๊ทธ ์ด์œ ๋Š” ์ž ์‹œ ํ›„ 'depth์— ๋”ฐ๋ผ node์˜ ํฌ๊ธฐ๋ฅผ ๋‹ค๋ฅด๊ฒŒ' ์ฑ•ํ„ฐ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ ์™ธ์— ์ฃผ์˜ํ•  ์ ์€ id์— ๊ณต๋ฐฑ๊ณผ .์ด ํฌํ•จ๋˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ํฌํ•จํ•ด๋„ ๋‹น์žฅ ๋ Œ๋”๋ง์—” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด cytoscape๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜ ์ค‘ id๋กœ node๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์“ธ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋‹ˆ ํฌํ•จํ•˜์ง€ ๋ง™์‹œ๋‹ค.

 

์ด ์ ์„ ์ฃผ์˜ํ•ด์„œ node์™€ edge๋ฅผ ๊ตฌ์„ฑํ•œ ํ›„ ๋ฐฐ์—ด๋กœ cytoscape ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ elements ๋ถ€๋ถ„์— ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ œ ํ•„์š”์— ๋”ฐ๋ผ ๊ตฌ์„ฑํ•˜๊ณ  ์ž…๋ ฅํ•œ ์†Œ์Šค๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ์œ„์™€ ๊ฐ™์ด ์ž…๋ ฅํ•˜๋ฉด

 

๋ณด๋‹ค์‹œํ”ผ ํ™”๋ฉด์ด seomal.org์—์„œ ๋ณด๋˜ ๊ฒƒ๊ณผ๋Š” ๋งŽ์ด ๋‹ค๋ฅธ ํ™”๋ฉด์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. ์ฐจ๊ทผ ์ฐจ๊ทผ ์ซ“์•„๊ฐ€ ๋ด…์‹œ๋‹ค.

๐Ÿ‘› id๊ฐ€ ์•„๋‹Œ ๋ผ๋ฒจ์ด ํ‘œ์‹œ๋˜๊ฒŒ

 

๋จผ์ € node ์œ„์— id๊ฐ€ ์•„๋‹Œ ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ ๋ผ๋ฒจ์ด ํ‘œ์‹œ๋˜๋„๋ก ํ•ด๋ด…์‹œ๋‹ค. ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. index.js ํ•˜๋‹จ style ์ชฝ์—์„œ node์˜ style์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ณด๋ฉด label์ด data(id)๋กœ ๋˜์–ด ์žˆ๋Š”๋ฐ ์ด๊ฑธ data(label)๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด

 

 

id๊ฐ€ ์•„๋‹Œ label์ด node์˜ ์ด๋ฆ„์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”€ edge styling

 

๋‹ค์Œ์œผ๋กœ๋Š” edge์˜ ์Šคํƒ€์ผ๋ง์„ ํ•ด๋ณด์ฃ . ๋จผ์ € edge์˜ ๋ฐฉํ–ฅ์„ ํ‘œ์‹œํ•ด๋ด…์‹œ๋‹ค. ์ด ์„ค์ •์€ style์—์„œ edge์˜ style์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์˜ ๊ฐ’์„ ํ†ตํ•ด ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋จผ์ € ์„ธํŒ…๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ 'curve-style'์˜ ๊ฐ’์„ 'bezier'๋กœ ์ฃผ๋ฉด ํ™”์‚ดํ‘œ๊ฐ€ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ํ™”์‚ดํ‘œ ๋ฐฉํ–ฅ์ด ์ƒ์œ„๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ๋Š”๊ฒŒ ๋ญ”๊ฐ€ ์–ด์ƒ‰ํ•˜์ฃ ? ๊ณ ์ณ๋ด…์‹œ๋‹ค.
target-arrow-shape์™€ target-arrow-color์—์„œ source-arrow-shape์™€ source-arrow-color๋กœ์š”.
๊ทธ๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด ํ™”์‚ดํ‘œ ๋ฐฉํ–ฅ์ด ๋ฐ”๋€๋‹ˆ๋‹ค.

 

 

๋งˆ์ง€๋ง‰์œผ๋กœ ํ™”์‚ดํ‘œ ๋ชจ์–‘๋„ ๋ฐ”๊ฟ”๋ด…์‹œ๋‹ค. ํ™”์‚ดํ‘œ ๋ชจ์–‘์€ ์—ฌ๊ธฐ์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

์ „ vee๊ฐ€ ๋งˆ์Œ์— ๋“ค๋”๊ตฐ์š”. ์ ์šฉํ•˜๋ฉด

 

 

์ข€ ๋” ๋‚ ์นด๋กœ์šด ํ™”์‚ดํ‘œ ๋ชจ์–‘์œผ๋กœ ์ž˜ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.

 

data ๋ถ€๋ถ„์„ ์ƒ๋žตํ•œ ์—ฌ๊ธฐ๊นŒ์ง€์˜ ์ „์ฒด ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Ÿ layout ์„ค์ •

๋‹ค์Œ์œผ๋กœ๋Š” layout์„ ์„ค์ •ํ•ด์„œ ~์“ธ๋ฐ์—†์ด~ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ํ˜•ํƒœ๋ฅผ ์ข€ ๋” ๋งˆ์ธ๋“œ๋งต์Šค๋Ÿฝ๊ฒŒ ๋ฐ”๊ฟ”๋ด…์‹œ๋‹ค
layout์˜ ํ˜•ํƒœ๋“ค์€ ์—ฌ๊ธฐ์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „ cose-bilkent๊ฐ€ ๋งˆ์Œ์— ๋“œ๋„ค์š”. ์ด๊ฑธ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋จผ์ € ์„ค์น˜๋ฅผ ํ•ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์„ ํ•˜๋‚˜ ๋” ์—ฌ์‹œ๊ณ 

 

npm install cytoscape-cose-bilkent

 

์„ ์ž…๋ ฅํ•ด ํ•ด๋‹น layout์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„์—” index.js ์ตœ์ƒ๋‹จ์œผ๋กœ ์ด๋™ํ•ด์„œ

 

 

์œ„์™€ ๊ฐ™์ด cytoscape-cose-bilkent๋ฅผ import ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋„๋ก ์„ ์–ธํ•œ ํ›„
node์™€ edge์˜ style๊ด€๋ จ ์„ค์ •์„ ํ•ด์คฌ๋˜ ๋ถ€๋ถ„ ์•„๋ž˜ ์žˆ๋Š” layout์„ ๋ฐ”๊ฟ”์ฃผ๋ฉด

 

 

๋งˆ์นจ๋‚ด ๋งˆ์ธ๋“œ๋งต ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค!

 

๐Ÿงฒ ํ•˜์ดํผ ๋งํฌ ์—ฐ๊ฒฐ

 

์ด์ œ node๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ๋•Œ ์ž…๋ ฅํ•ด์ค€ url์ด ์ƒˆ์ฐฝ์—์„œ ์—ด๋ฆฌ๊ฒŒ ์„ค์ •ํ•ด ์ค์‹œ๋‹ค.

cytoscape์—๋Š” on() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ด๋ฒคํŠธ๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

tap์„ ์ธ์ž๋กœ ์ค˜์„œ ํด๋ฆญ์ด๋ฒคํŠธ๋ฅผ ์ฃผ๊ณ  ํ•ด๋‹น url์ด ์ƒˆ์ฐฝ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๊ฒŒ ์„ค์ •ํ•ด์ฃผ๋ฉด

 

 

ํด๋ฆญ์‹œ ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”Š depth์— ๋”ฐ๋ผ node์˜ ํฌ๊ธฐ๋ฅผ ๋‹ค๋ฅด๊ฒŒ

 

์ด์ œ depth์— ๋”ฐ๋ผ node์˜ ํฌ๊ธฐ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค.
๋จผ์ € ์ด๊ฑธ ์œ„ํ•ด์„  ๋™์ผํ•œ data๋ฅผ elements๋กœ ๊ฐ–๋Š” cytoscape ๊ฐ์ฒด๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

data์™€ cy ์‚ฌ์ด์— ํฌ๊ธฐ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , cy์˜style๋ถ€๋ถ„์— ๊ฐ€์„œ  width, height, font-size๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด

 

 

 

 

๋งˆ์นจ๋‚ด depth์— ๋”ฐ๋ผ ํฌ๊ธฐ๊ฐ€ ์ฐจ๋“ฑ ์ ์šฉ๋˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€๋„ ๊ตฌํ˜„์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

 

๋”๋ณด๊ธฐ

์œ„์—์„œ๋„ ์ ์—ˆ์ง€๋งŒ ๋งŒ์•ฝ node id์— ๊ณต๋ฐฑ์ด๋‚˜ . ์ด ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉด ์ด ๋ถ€๋ถ„์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

target์œผ๋กœ depth๊ฐ€ ๊นŠ์„ ์ˆ˜๋ก rank ๊ฐ’์ด ๋†’๊ฒŒ ์ ์šฉ๋˜๋”๊ตฐ์š”.
์œ„์—์„œ source์™€ target์„ ๊ฑฐ๊พธ๋กœ ์ ์€ ์ด์œ ๊ฐ€ ์ด rank ๊ฐ’ ๋งŒํผ node์˜ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค

 

โœจ ๋งˆ์šฐ์Šค ์ธ / ์•„์›ƒ์‹œ ํ•˜์ด๋ผ์ดํŠธ ์ ์šฉ / ํ•ด์ œ

 

์ด์ œ ๋งˆ์šฐ์Šค ์ธ / ์•„์›ƒ์‹œ ํ•˜์ด๋ผ์ดํŠธ ์ ์šฉ / ํ•ด์ œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ด…์‹œ๋‹ค.
๋งˆ์šฐ์Šค ์ธ/์•„์›ƒ ๊ฐ์ง€ ๋‘˜ ๋ชจ๋‘ ํด๋ฆญ์‹œ ํ•˜์ดํผ๋งํฌ ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„๋•Œ ์‚ฌ์šฉํ•œ on ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๋จผ์ € ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด ์ž˜ ๊ฐ์ง€ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ค์‹œ๋‹ค.
์ž˜ ์ž‘๋™ํ•œ๋‹ค๋ฉด ๋‹ค์Œ์€ node์™€ edge์˜ style์„ ๋ฐ”๊ฟ”์ค„ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ์ฐจ๋ก€ํ•ฉ๋‹ˆ๋‹ค.

 

๋จผ์ € ์‚ฌ์šฉํ•  ์ƒ‰๊ณผ ํฌ๊ธฐ๊ฐ’๋“ค์„ ๋ณ€์ˆ˜๋กœ ๊บผ๋ƒ…์‹œ๋‹ค. ์ƒ‰์€ ์ „ ์—ฌ๊ธฐ์„œ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒ node์˜ ํฌ๊ธฐ์™€ ์ƒ‰, font ํฌ๊ธฐ, edge & ํ™”์‚ดํ‘œ ํฌ๊ธฐ์™€ ์ƒ‰ ๋“ฑ๋“ฑ์„ ์„ค์ •ํ•ด

 

์œ„์˜ ์œ„์น˜์— ์ž‘์„ฑํ•ด์ค๋‹ˆ๋‹ค. ๊ฐ’์„ ๋ณ€์ˆ˜๋กœ ๋นผ๋ƒˆ์œผ๋‹ˆ ํ•˜๋“œ์ฝ”๋”ฉ ๋˜์–ด ์žˆ๋˜ style ๊ฐ’๋„ ๋ณ€๊ฒฝ์„ ํ•ด์ค˜์•ผ๊ฒ ์ฃ 

 

 

์œ„์™€ ๊ฐ™์ด ๋ฐ”๊ฟจ์œผ๋ฉด ์ด์ œ ์ด ๋„ค๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ด๋ฆ„๊ณผ ์—ญํ• ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • setDimStyle(target_cy, style)
    ๋ชจ๋“  node์™€ edge๋ฅผ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • setFocus(target_element, successorColor, predecessorsColor, edgeWidth, arrowScale)
    ์„ ํƒํ•œ node ์™€ edge, ๊ทธ๋ฆฌ๊ณ  ์ƒํ•˜์œ„ node์™€ edge๋ฅผ ํฌ๊ธฐ์™€ ์ƒ‰์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • setOpacityElement(target_element, degree)
    opacity๋ฅผ ํ™œ์šฉํ•ด ๋ฐ”๋กœ ์ด์›ƒํ•œ ์—ฐ๊ด€๊ด€๊ณ„์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • setResetFocus(target_cy)
    node๋ฅผ ์„ ํƒํ•˜๊ธฐ ์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜์˜ ์ƒ์„ธ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค

 

์ด์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ด์ฃผ์‹œ๊ณ , ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ์ฃ . ์•„๊นŒ ๋งŒ๋“ค์–ด ๋‘” mouse in๊ณผ out์„ ๊ฐ์ง€ํ•˜๋Š” ๋ถ€๋ถ„์—

 

์œ„์™€ ๊ฐ™์ด ํ•จ์ˆ˜๋ฅผ ์„ธํŒ…ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด

 

 

์ธ ์•„์›ƒ ์ด๋ฒคํŠธ๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

 

๐ŸŒŒ ๋ธŒ๋ผ์šฐ์ € ํฌ๊ธฐ ๋ณ€๊ฒฝ์‹œ cytoscape ํฌ๊ธฐ ์กฐ์ •

 

์ด์ œ ๋ธŒ๋ผ์šฐ์ € ํฌ๊ธฐ ๋ณ€๊ฒฝ์‹œ cytoscape์˜ ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ์กฐ์ •๋˜๊ฒŒ ํ•ด๋ด…์‹œ๋‹ค. seomal.org์˜ ๊ฒฝ์šฐ

 

 

์œ„์™€ ๊ฐ™์ด ๋ธŒ๋ผ์šฐ์ €์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ cytoscape์˜ ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ๋ณ€ํ•˜์ง€๋งŒ

 

 

์šฐ๋ฆฐ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์—ด์–ด๋„ ์•„๋ฌด ๋ณ€ํ™”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋ด…์‹œ๋‹ค. ์ ์šฉ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

 

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด

 

 

๋ธŒ๋ผ์šฐ์ € ํฌ๊ธฐ ๋ณ€๊ฒฝ์‹œ cytoscape ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ์ž˜ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค!

 

๋”๋ณด๊ธฐ

์œ„ ์ฝ”๋“œ์—์„œ clearTimout๊ณผ setTimout ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๋ฉด resize ๊ฐ์ง€๋Š” ๋˜๋Š”๋ฐ cy.fit() ์‹คํ–‰์€ ์•ˆ๋˜๋”๊ตฐ์š”. ์ผ๋‹จ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•ด ํ•ด๊ฒฐ์€ ํ–ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์ž์„ธํ•œ ์ด์œ ๋ฅผ ์•„๋Š” ๋ถ„ ํ˜น์‹œ ๊ณ„์‹œ๋ฉด ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

 

๐Ÿ’ซ data ์ถ”์ถœ 

 

๊ธฐ๋Šฅ์€ ๋‹ค ๊ตฌํ˜„ํ–ˆ์œผ๋‹ˆ ์ด์ œ ๋งˆ์ง€๋ง‰์œผ๋กœ ํŒŒ์ผ์„ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด data๋ฅผ ๋ณ„๋„์˜ json ํŒŒ์ผ๋กœ ์ถ”์ถœํ•ด๋ด…์‹œ๋‹ค.

 

 

์œ„์™€ ๊ฐ™์ด model ํด๋” ํ•˜์œ„์— data.json ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ 

๊ทธ ๋‹ค์Œ์€ webpack.config.js ํŒŒ์ผ๋กœ ๊ฐ€์„œ module - rules์—

 

 

์œ„์ฒ˜๋Ÿผ json ๊ด€๋ จ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. ์ดํ›„์—” index.js ์—์„œ data ๋ณ€์ˆ˜๋กœ ๋ฐ›๋˜ 

 

const data = [...];

 

[ ] ์„ ํฌํ•จํ•˜์—ฌ ๊ทธ ์•ˆ์— ์žˆ๋˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋“ค์„ ๋ณต์‚ฌํ•ด์„œ model - data.json์— ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•ด์ค๋‹ˆ๋‹ค.

 

์ดํ›„์—” index.js ์ƒ๋‹จ์— data.json ๊ฒฝ๋กœ๋ฅผ ์ž„ํฌํŠธ ํ•ด์ฃผ๊ณ  import ๋ถ€๋ถ„์„ ์ œ์™ธํ•œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ data.json fetch ํ•จ์ˆ˜ ์•ˆ์œผ๋กœ ์ง‘์–ด๋„ฃ์œผ๋ฉด

 

 

 

 

 

ํ™”๋ฉด์ด ์ž˜ ๋‚˜์˜ต๋‹ˆ๋‹ค! ์ดํ›„์—” gh pages๋‚˜ netlify๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐํฌ ํ›„ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค!

๐Ÿ‘ ๋งˆ์น˜๋ฉฐ

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ์ง„ํ–‰ ๊ณผ์ •์€ github project์— ์ •๋ฆฌํ•ด๋’€๊ณ  ์†Œ์Šค์ฝ”๋“œ๋Š” repository์— ์˜ฌ๋ ค๋’€์œผ๋‹ˆ
์„ค๋ช…์ด ๋ถ€์กฑํ–ˆ๋˜ ๋ถ€๋ถ„์€ ์ด ๋‘ ๊ณณ์„ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๊ณ  ์งˆ๋ฌธ์€ ๋Œ“๊ธ€์— ๋‚จ๊ฒจ์ฃผ์„ธ์š”!

 

๋ชจ์ชผ๋ก ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค!

๋ฐ˜์‘ํ˜•