"의미관계망"의 두 판 사이의 차이

광주문화예술인문스토리플랫폼
이동: 둘러보기, 검색
(새 문서: {{#tag:html| <script type="text/javascript" src="https://dh.aks.ac.kr/Graph/vis/dist/vis.js"></script> <style> #mynetwork { width: 90%; height: 70vh; background-color: #...)
 
 
2번째 줄: 2번째 줄:
 
<script type="text/javascript" src="https://dh.aks.ac.kr/Graph/vis/dist/vis.js"></script>
 
<script type="text/javascript" src="https://dh.aks.ac.kr/Graph/vis/dist/vis.js"></script>
 
<style>
 
<style>
  #mynetwork {
+
#mynetwork {
    width: 90%;
+
width: 90%;
    height: 70vh;
+
height: 70vh;
    background-color: #ffffff;
+
background-color: #ffffff;
    border: 1px solid lightgray;
+
border: 1px solid lightgray;
    margin: 0 auto;
+
margin: 0 auto;
    display: flex;
+
display: flex;
    justify-content: center;
+
justify-content: center;
    align-items: center;
+
align-items: center;
  }
+
}
  #designGuide {
+
#designGuide {
    width: 100%;
+
width: 100%;
    margin-top: 60px;
+
margin-top: 60px;
  }
+
}
  #designGuide > h2 {
+
#designGuide >h2{
    font-size: 28px;
+
font-size:28px;
    font-weight: 700;
+
font-weight:700;
  }
+
}
  #designGuide > h2 + p {
+
#designGuide >h2 + p{
    font-size: 16px;
+
font-size:16px;
  }
+
}
  .design-section {
+
.design-section {
    margin-top: 40px;
+
margin-top:40px;
  }
+
}
  .design-section h3 {
+
.design-section h3 {
    font-size: 20px;
+
font-size:20px;
    font-weight: bold;
+
font-weight:bold;
    margin: 0;
+
margin:0;
  }
+
}
  .design-section h3 + p {
+
.design-section h3 + p{
    margin-top: 8px;
+
margin-top:8px;
    font-size: 16px;
+
font-size:16px;
    margin-bottom: 0;
+
margin-bottom:0;
  }
+
 
  .example-grid {
+
}
    display: grid;
+
.example-grid {
    grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
+
display: grid;
    gap: 28px;
+
grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
    margin-top: 24px;
+
gap: 28px;
    padding-top: 22px;
+
margin-top: 24px;
    border-top: 1px solid #eee;
+
padding-top:22px;
  }
+
border-top:1px solid #eee;
  .example-item {
+
}
    border: 1px solid #eee;
+
.example-item {
    border-radius: 12px;
+
border: 1px solid #eee;
    text-align: center;
+
border-radius: 12px;
    min-height: 240px;
+
text-align: center;
    padding: 20px;
+
min-height:240px;
    display: flex;
+
padding:20px;
    flex-direction: column;
+
display:flex;
    justify-content: center;
+
flex-direction: column;
    align-items: center;
+
justify-content: center;
  }
+
align-items: center;
  .example-item > div {
+
}
    width: 100%;
+
.example-item >div{
    flex: 1;
+
width:100%;
    max-height: 240px;
+
flex:1;
  }
+
max-height:240px;
  .example-item h4 {
+
}
    font-size: 16px;
+
.example-item h4 {
    margin-top: 0;
+
font-size: 16px;
    margin-bottom: 12px;
+
margin-top: 0;
  }
+
margin-bottom: 12px;
  .example-item pre {
+
}
    background-color: #f5f5f5;
+
.example-item pre {
    padding: 15px;
+
background-color: #f5f5f5;
    border-radius: 6px;
+
padding: 15px;
    overflow-x: auto;
+
border-radius: 6px;
    text-align: left;
+
overflow-x: auto;
    font-size: 16px;
+
text-align: left;
    margin-top: 15px;
+
font-size: 16px;
    border: 1px solid #e0e0e0;
+
margin-top: 15px;
    line-height: 1.5;
+
border: 1px solid #e0e0e0;
    max-height: 300px;
+
line-height: 1.5;
    overflow-y: auto;
+
max-height: 300px;
  }
+
overflow-y: auto;
  .color-box {
+
}
    width: 40px;
+
.color-box {
    height: 40px;
+
width: 40px;
    border-radius: 4px;
+
height: 40px;
    display: inline-block;
+
border-radius: 4px;
    margin-right: 10px;
+
display: inline-block;
    vertical-align: middle;
+
margin-right: 10px;
  }
+
vertical-align: middle;
  .edge-example {
+
}
    width: 100%;
+
.edge-example {
    height: 80px;
+
width: 100%;
    background-color: white;
+
height: 80px;
    position: relative;
+
background-color: white;
    margin-bottom: 15px;
+
position: relative;
  }
+
margin-bottom: 15px;
  .tab-container {
+
}
    display: flex;
+
.tab-container {
    margin-top: 40px;
+
display: flex;
    background-color: #f9f9f9;
+
margin-top: 40px;
    border: 1px solid #ddd;
+
background-color:#f9f9f9;
  }
+
border:1px solid #ddd;
  .tab {
+
}
    flex: 1;
+
.tab {
    text-align: center;
+
flex:1;
    padding: 12px 0;
+
text-align:center;
    cursor: pointer;
+
padding: 12px 0;
    border: 1px solid transparent;
+
cursor: pointer;
    border-bottom: none;
+
border: 1px solid transparent;
    font-family: Pretendard;
+
border-bottom: none;
    font-weight: 700;
+
font-family: Pretendard;
    font-size: 16px;
+
font-weight: 700;
    line-height: 26px;
+
font-size: 16px;
    letter-spacing: 0%;
+
line-height: 26px;
  }
+
letter-spacing: 0%;
  .tab + .tab {
+
}
    border-left: 1px solid #eee;
+
.tab + .tab{
  }
+
border-left:1px solid #eee;
  .tab.active {
+
}
    background-color: #181818;
+
.tab.active {
    color: #fff;
+
background-color: #181818;
  }
+
color: #fff;
  .tab-content {
+
}
    display: none;
+
.tab-content {
  }
+
display: none;
  .tab-content.active {
+
}
    display: block;
+
.tab-content.active {
  }
+
display: block;
  @media screen and (max-width: 991px) {
+
}
    #designGuide {
+
@media screen and (max-width: 991px) {
      margin-top: 40px;
+
#designGuide{
    }
+
margin-top:40px;
    #designGuide > h2 {
+
}
      font-size: 20px;
+
#designGuide >h2{
    }
+
font-size:20px;
    .tab-container {
+
}
      flex-wrap: wrap;
+
.tab-container{
      margin-top: 24px;
+
flex-wrap:wrap;margin-top:24px;
    }
+
}
    .tab {
+
.tab{
      flex: 1 0 auto;
+
flex:1 0 auto;
      width: 50%;
+
width:50%;
    }
+
}
    .tab:nth-child(1n-2) {
+
.tab:nth-child(1n-2){
      border-bottom: 1px solid #eee;
+
border-bottom:1px solid #eee;
    }
+
}
    .design-section {
+
.design-section{
      margin-top: 24px;
+
margin-top:24px;
    }
+
}
    .design-section h3 {
+
.design-section h3{
      margin-bottom: 4px;
+
margin-bottom:4px;
    }
+
}
  }
+
}
 
</style>
 
</style>
  
155번째 줄: 155번째 줄:
  
 
<div id="designGuide">
 
<div id="designGuide">
  <h2>vis.js 디자인 가이드</h2>
+
<h2>vis.js 디자인 가이드</h2>
  <p>이 가이드는 vis.js 라이브러리를 사용한 네트워크 그래프 디자인 옵션을 보여줍니다.</p>
+
<p>이 가이드는 vis.js 라이브러리를 사용한 네트워크 그래프 디자인 옵션을 보여줍니다.</p>
 
+
  <div class="tab-container">
+
<div class="tab-container">
    <div class="tab active" onclick="showTab('nodeShapes')">노드 모양</div>
+
<div class="tab active" onclick="showTab('nodeShapes')">노드 모양</div>
    <div class="tab" onclick="showTab('nodeStyles')">노드 스타일</div>
+
<div class="tab" onclick="showTab('nodeStyles')">노드 스타일</div>
    <div class="tab" onclick="showTab('edgeStyles')">엣지 스타일</div>
+
<div class="tab" onclick="showTab('edgeStyles')">엣지 스타일</div>
    <div class="tab" onclick="showTab('layouts')">레이아웃</div>
+
<div class="tab" onclick="showTab('layouts')">레이아웃</div>
  </div>
+
</div>
 
+
  <div id="nodeShapes" class="tab-content active">
+
<div id="nodeShapes" class="tab-content active">
    <div class="design-section">
+
<div class="design-section">
      <h3>1. 노드 모양 (Shape)</h3>
+
<h3>1. 노드 모양 (Shape)</h3>
      <p>vis.js는 다양한 노드 모양을 제공합니다:</p>
+
<p>vis.js는 다양한 노드 모양을 제공합니다:</p>
      <div class="example-grid" id="shapeExamples">
+
<div class="example-grid" id="shapeExamples">
        <!-- 여기에 노드 모양 예시가 동적으로 추가됩니다 -->
+
<!-- 여기에 노드 모양 예시가 동적으로 추가됩니다 -->
      </div>
+
</div>
    </div>
+
</div>
  </div>
+
</div>
 
+
  <div id="nodeStyles" class="tab-content">
+
<div id="nodeStyles" class="tab-content">
    <div class="design-section">
+
<div class="design-section">
      <h3>2. 노드 스타일링</h3>
+
<h3>2. 노드 스타일링</h3>
      <p>노드의 색상, 테두리, 폰트 등을 커스터마이징할 수 있습니다:</p>
+
<p>노드의 색상, 테두리, 폰트 등을 커스터마이징할 수 있습니다:</p>
      <div class="example-grid" id="styleExamples">
+
<div class="example-grid" id="styleExamples">
        <!-- 여기에 노드 스타일 예시가 동적으로 추가됩니다 -->
+
<!-- 여기에 노드 스타일 예시가 동적으로 추가됩니다 -->
      </div>
+
</div>
    </div>
+
</div>
  </div>
+
</div>
 
+
  <div id="edgeStyles" class="tab-content">
+
<div id="edgeStyles" class="tab-content">
    <div class="design-section">
+
<div class="design-section">
      <h3>3. 엣지(간선) 스타일링</h3>
+
<h3>3. 엣지(간선) 스타일링</h3>
      <p>엣지의 색상, 두께, 화살표 등을 설정할 수 있습니다:</p>
+
<p>엣지의 색상, 두께, 화살표 등을 설정할 수 있습니다:</p>
      <div class="example-grid" id="edgeExamples">
+
<div class="example-grid" id="edgeExamples">
        <!-- 여기에 엣지 스타일 예시가 동적으로 추가됩니다 -->
+
<!-- 여기에 엣지 스타일 예시가 동적으로 추가됩니다 -->
      </div>
+
</div>
    </div>
+
</div>
  </div>
+
</div>
 
+
  <div id="layouts" class="tab-content">
+
<div id="layouts" class="tab-content">
    <div class="design-section">
+
<div class="design-section">
      <h3>4. 네트워크 레이아웃</h3>
+
<h3>4. 네트워크 레이아웃</h3>
      <p>그래프의 전체 레이아웃과 물리 효과를 설정할 수 있습니다:</p>
+
<p>그래프의 전체 레이아웃과 물리 효과를 설정할 수 있습니다:</p>
      <div class="example-grid" id="layoutExamples">
+
<div class="example-grid" id="layoutExamples">
        <!-- 여기에 레이아웃 예시가 동적으로 추가됩니다 -->
+
<!-- 여기에 레이아웃 예시가 동적으로 추가됩니다 -->
      </div>
+
</div>
    </div>
+
</div>
  </div>
+
</div>
 
</div>
 
</div>
  
 
<script>
 
<script>
  // 디자인 가이드 예시 생성 함수
+
// 디자인 가이드 예시 생성 함수
  function createDesignExamples() {
+
function createDesignExamples() {
    // 1. 노드 모양 예시
+
// 1. 노드 모양 예시
    const shapeTypes = [
+
const shapeTypes = [
      { shape: 'ellipse', label: 'ellipse' },
+
{ shape: 'ellipse', label: 'ellipse' },
      { shape: 'circle', label: 'circle' },
+
{ shape: 'circle', label: 'circle' },
      { shape: 'box', label: 'box' },
+
{ shape: 'box', label: 'box' },
      { shape: 'text', label: 'text' },
+
{ shape: 'text', label: 'text' },
      { shape: 'diamond', label: 'diamond' },
+
{ shape: 'diamond', label: 'diamond' },
      { shape: 'dot', label: 'dot' },
+
{ shape: 'dot', label: 'dot' },
      { shape: 'star', label: 'star' },
+
{ shape: 'star', label: 'star' },
      { shape: 'triangle', label: 'triangle' },
+
{ shape: 'triangle', label: 'triangle' },
      { shape: 'triangleDown', label: 'triangleDown' },
+
{ shape: 'triangleDown', label: 'triangleDown' },
      { shape: 'hexagon', label: 'hexagon' },
+
{ shape: 'hexagon', label: 'hexagon' },
      { shape: 'square', label: 'square' },
+
{ shape: 'square', label: 'square' },
      { shape: 'image', label: 'image', image: 'https://dh.aks.ac.kr/~gwangju/icon/photo/icon-Orchestra.jpg' },
+
{ shape: 'image', label: 'image', image: 'https://dh.aks.ac.kr/~gwangju/icon/photo/icon-Orchestra.jpg' },
      { shape: 'circularImage', label: 'circularImage', image: 'https://dh.aks.ac.kr/~gwangju/icon/photo/icon-Orchestra.jpg' }
+
{ shape: 'circularImage', label: 'circularImage', image: 'https://dh.aks.ac.kr/~gwangju/icon/photo/icon-Orchestra.jpg' }
    ];
+
];
   
 
    const shapeContainer = document.getElementById('shapeExamples');
 
    shapeTypes.forEach(shapeInfo => {
 
      const exampleItem = document.createElement('div');
 
      exampleItem.className = 'example-item';
 
     
 
      // 작은 네트워크 컨테이너 생성
 
      const networkContainer = document.createElement('div');
 
      networkContainer.style.margin = '0 auto';
 
      networkContainer.style.display = 'flex';
 
      networkContainer.style.justifyContent = 'center';
 
      networkContainer.style.alignItems = 'center';
 
     
 
      exampleItem.appendChild(networkContainer);
 
      shapeContainer.appendChild(exampleItem);
 
     
 
      // 노드 생성
 
      const nodes = new vis.DataSet([{
 
        id: 1,
 
        label: shapeInfo.label,
 
        shape: shapeInfo.shape,
 
        image: shapeInfo.image
 
      }]);
 
     
 
      // 네트워크 생성
 
      const network = new vis.Network(networkContainer, { nodes }, {
 
        nodes: {
 
          size: 40,
 
          font: { size: 14 }
 
        },
 
        physics: {
 
          enabled: true,
 
          stabilization: true,
 
          barnesHut: {
 
            gravitationalConstant: -2000,
 
            centralGravity: 0.1,
 
            springLength: 95,
 
            springConstant: 0.04,
 
            damping: 0.09
 
          }
 
        },
 
        interaction: {
 
          dragNodes: true,
 
          dragView: false,
 
          zoomView: false
 
        }
 
      });
 
     
 
      // 네트워크 캔버스 중앙 정렬
 
      network.on("afterDrawing", function(ctx) {
 
        network.fit();
 
      });
 
     
 
    });
 
   
 
    // 2. 노드 스타일 예시
 
    const nodeStyleExamples = [
 
      {
 
        name: '기본 스타일',
 
        options: {
 
          shape: 'circle',
 
          color: {
 
            background: '#97C2FC',
 
            border: '#2B7CE9'
 
          },
 
          borderWidth: 2
 
        }
 
      },
 
      {
 
        name: '아이콘 오버레이',
 
        customRender: true,
 
        options: {
 
          shape: 'circularImage',
 
          image: 'https://img.icons8.com/color/48/church.png',
 
          borderWidth: 3,
 
          borderWidthSelected: 5,
 
          color: {
 
            border: '#03A9F4',
 
            background: '#E1F5FE'
 
          },
 
          size: 40
 
        }
 
      },
 
      {
 
        name: '하이라이트 효과',
 
        options: {
 
          color: {
 
            background: '#97C2FC',
 
            border: '#2B7CE9',
 
            highlight: { background: '#D2E5FF', border: '#2B7CE9' }
 
          },
 
          size: 30
 
        }
 
      },
 
      {
 
        name: '그림자 효과',
 
        options: {
 
          color: { background: '#FFD86E', border: '#EDAA25' },
 
          shadow: { enabled: true, color: 'rgba(0,0,0,0.5)', size: 10, x: 5, y: 5 },
 
          size: 30
 
        }
 
      },
 
      {
 
        name: '검정 배경 흰색 글씨',
 
        options: {
 
          color: { background: 'black', border: '#333' },
 
          font: { color: 'white', size: 14 },
 
          size: 30
 
        }
 
      },
 
      {
 
        name: '둥근 이미지',
 
        options: {
 
          shape: 'circularImage',
 
          image: 'https://dh.aks.ac.kr/~gwangju/icon/photo/icon-Orchestra.jpg',
 
          size: 30
 
        }
 
      },
 
      {
 
        name: '커스텀 폰트',
 
        options: {
 
          font: { face: '함초롬바탕', color: '#772244', size: 16, bold: true },
 
          color: { background: '#FFECB3' },
 
          size: 30
 
        }
 
      }
 
    ];
 
  
    const styleContainer = document.getElementById('styleExamples');
+
const shapeContainer = document.getElementById('shapeExamples');
    nodeStyleExamples.forEach(example => {
+
shapeTypes.forEach(shapeInfo => {
      const exampleItem = document.createElement('div');
+
const exampleItem = document.createElement('div');
      exampleItem.className = 'example-item';
+
exampleItem.className = 'example-item';
  
      // 제목 추가
+
// 작은 네트워크 컨테이너 생성
      const title = document.createElement('h4');
+
const networkContainer = document.createElement('div');
      title.textContent = example.name;
+
networkContainer.style.margin = '0 auto';
      exampleItem.appendChild(title);
+
networkContainer.style.display = 'flex';
 +
networkContainer.style.justifyContent = 'center';
 +
networkContainer.style.alignItems = 'center';
  
      // 작은 네트워크 컨테이너 생성
+
exampleItem.appendChild(networkContainer);
      const networkContainer = document.createElement('div');
+
shapeContainer.appendChild(exampleItem);
      networkContainer.style.margin = '0 auto';
 
      networkContainer.style.display = 'flex';
 
      networkContainer.style.justifyContent = 'center';
 
      networkContainer.style.alignItems = 'center';
 
      networkContainer.style.position = 'relative';
 
  
      exampleItem.appendChild(networkContainer);
+
// 노드 생성
 +
const nodes = new vis.DataSet([{
 +
id: 1,
 +
label: shapeInfo.label,
 +
shape: shapeInfo.shape,
 +
image: shapeInfo.image
 +
}]);
  
      styleContainer.appendChild(exampleItem);
+
// 네트워크 생성
 +
const network = new vis.Network(networkContainer, { nodes }, {
 +
nodes: {
 +
size: 40,
 +
font: { size: 14 }
 +
},
 +
physics: {
 +
enabled: true,
 +
stabilization: true,
 +
barnesHut: {
 +
gravitationalConstant: -2000,
 +
centralGravity: 0.1,
 +
springLength: 95,
 +
springConstant: 0.04,
 +
damping: 0.09
 +
}
 +
},
 +
interaction: {
 +
dragNodes: true,
 +
dragView: false,
 +
zoomView: false
 +
}
 +
});
 +
 +
// 네트워크 캔버스 중앙 정렬
 +
network.on("afterDrawing", function(ctx) {
 +
network.fit();
 +
});
  
      // 노드 생성
+
});
      const nodes = new vis.DataSet([{
+
        id: 1,
+
// 2. 노드 스타일 예시
        label: '노드',
+
const nodeStyleExamples = [
        ...example.options
+
{
      }]);
+
name: '기본 스타일',
 +
options: {
 +
shape: 'circle',
 +
color: {
 +
background: '#97C2FC',
 +
border: '#2B7CE9'
 +
},
 +
borderWidth: 2
 +
}
 +
},
 +
{
 +
name: '아이콘 오버레이',
 +
customRender: true,
 +
options: {
 +
shape: 'circularImage',
 +
image: 'https://img.icons8.com/color/48/church.png',
 +
borderWidth: 3,
 +
borderWidthSelected: 5,
 +
color: {
 +
border: '#03A9F4',
 +
background: '#E1F5FE'
 +
},
 +
size: 40
 +
}
 +
},
 +
{
 +
name: '하이라이트 효과',
 +
options: {
 +
color: {
 +
background: '#97C2FC',
 +
border: '#2B7CE9',
 +
highlight: { background: '#D2E5FF', border: '#2B7CE9' }
 +
},
 +
size: 30
 +
}
 +
},
 +
{
 +
name: '그림자 효과',
 +
options: {
 +
color: { background: '#FFD86E', border: '#EDAA25' },
 +
shadow: { enabled: true, color: 'rgba(0,0,0,0.5)', size: 10, x: 5, y: 5 },
 +
size: 30
 +
}
 +
},
 +
{
 +
name: '검정 배경 흰색 글씨',
 +
options: {
 +
color: { background: 'black', border: '#333' },
 +
font: { color: 'white', size: 14 },
 +
size: 30
 +
}
 +
},
 +
{
 +
name: '둥근 이미지',
 +
options: {
 +
shape: 'circularImage',
 +
image: 'https://dh.aks.ac.kr/~gwangju/icon/photo/icon-Orchestra.jpg',
 +
size: 30
 +
}
 +
},
 +
{
 +
name: '커스텀 폰트',
 +
options: {
 +
font: { face: '함초롬바탕', color: '#772244', size: 16, bold: true },
 +
color: { background: '#FFECB3' },
 +
size: 30
 +
}
 +
}
 +
];
  
      // 네트워크 생성
+
const styleContainer = document.getElementById('styleExamples');
      const network = new vis.Network(networkContainer, { nodes }, {
+
nodeStyleExamples.forEach(example => {
        physics: {
+
const exampleItem = document.createElement('div');
          enabled: true,
+
exampleItem.className = 'example-item';
          stabilization: true,
 
          barnesHut: {
 
            gravitationalConstant: -2000,
 
            centralGravity: 0.1,
 
            springLength: 95,
 
            springConstant: 0.04,
 
            damping: 0.09
 
          }
 
        },
 
        interaction: {
 
          dragNodes: true,
 
          dragView: false,
 
          zoomView: false
 
        }
 
      });
 
      // 네트워크 캔버스 중앙 정렬
 
      network.on("afterDrawing", function() {
 
        network.fit();
 
      });
 
     
 
      // 아이콘 오버레이를 위한 새로운 방식 적용
 
      if(example.customRender){
 
        if (example.name === '아이콘 오버레이') {
 
          // 노드 렌더링 함수 재정의
 
          const originalDrawFunction = network.body.nodes[1].shape.draw;
 
          network.body.nodes[1].shape.draw = function(ctx, x, y, selected, hover, values) {
 
            // 기본 노드 그리기
 
            originalDrawFunction.call(this, ctx, x, y, selected, hover, values);
 
           
 
            // 노드 크기 가져오기
 
            const radius = values.size;
 
           
 
            // + 아이콘 배경 그리기
 
            ctx.fillStyle = '#FF5722';
 
            ctx.beginPath();
 
            ctx.arc(x + radius*0.7, y - radius*0.7, radius*0.35, 0, 2 * Math.PI);
 
            ctx.fill();
 
            ctx.strokeStyle = 'white';
 
            ctx.lineWidth = 2;
 
            ctx.stroke();
 
           
 
            // 플러스 기호 그리기 - 더 굵고 큰 선으로 그리기
 
            const iconX = x + radius*0.7;
 
            const iconY = y - radius*0.7;
 
            const iconSize = radius * 0.5; // 크기 증가
 
           
 
            // 흰색 플러스 기호 그리기
 
            ctx.lineWidth = iconSize * 0.3; // 더 굵게
 
            ctx.strokeStyle = 'white';
 
           
 
            // 수평선
 
            ctx.beginPath();
 
            ctx.moveTo(iconX - iconSize/2, iconY);
 
            ctx.lineTo(iconX + iconSize/2, iconY);
 
            ctx.stroke();
 
           
 
            // 수직선
 
            ctx.beginPath();
 
            ctx.moveTo(iconX, iconY - iconSize/2);
 
            ctx.lineTo(iconX, iconY + iconSize/2);
 
            ctx.stroke();
 
          };
 
        }
 
      }
 
    });
 
  
    // 네트워크 컨테이너 스타일링
+
// 제목 추가
    const networkContainerStyle = {
+
const title = document.createElement('h4');
      margin: '0 auto',
+
title.textContent = example.name;
      display: 'flex',
+
exampleItem.appendChild(title);
      justifyContent: 'center',
 
      alignItems: 'center',
 
      position: 'relative'
 
    };
 
  
    // 3. 엣지 스타일 예시
 
    const edgeExamples = [
 
      {
 
        name: '기본 화살표',
 
        options: {
 
          arrows: { to: { enabled: true } },
 
          color: { color: '#848484' },
 
          width: 2
 
        }
 
      },
 
      {
 
        name: '양방향 화살표',
 
        options: {
 
          arrows: { to: { enabled: true }, from: { enabled: true } },
 
          color: { color: '#848484' },
 
          width: 2
 
        }
 
      },
 
      {
 
        name: '점선',
 
        options: {
 
          dashes: [5, 5],
 
          width: 2,
 
          color: { color: '#434343' }
 
        }
 
      },
 
      {
 
        name: '다양한 화살표 타입',
 
        options: {
 
          arrows: { to: { enabled: true, type: 'circle' } },
 
          color: { color: '#6A1B9A' },
 
          width: 2
 
        }
 
      },
 
      {
 
        name: '곡선 간선',
 
        options: {
 
          smooth: { enabled: true, type: 'curvedCW', roundness: 0.3 },
 
          arrows: { to: { enabled: true } },
 
          color: { color: '#00695C' },
 
          width: 2
 
        }
 
      },
 
      {
 
        name: '라벨 있는 간선',
 
        options: {
 
          label: '관계',
 
          font: { size: 12, align: 'middle' },
 
          color: { color: '#E65100', highlight: '#FF9800' },
 
          width: 2
 
        }
 
      }
 
    ];
 
  
    const edgeContainer = document.getElementById('edgeExamples');
+
// 작은 네트워크 컨테이너 생성
    edgeExamples.forEach(example => {
+
const networkContainer = document.createElement('div');
      const exampleItem = document.createElement('div');
+
networkContainer.style.margin = '0 auto';
      exampleItem.className = 'example-item';
+
networkContainer.style.display = 'flex';
 +
networkContainer.style.justifyContent = 'center';
 +
networkContainer.style.alignItems = 'center';
 +
networkContainer.style.position = 'relative';
  
      // 제목 추가
 
      const title = document.createElement('h4');
 
      title.textContent = example.name;
 
      exampleItem.appendChild(title);
 
 
exampleItem.appendChild(networkContainer);
 
exampleItem.appendChild(networkContainer);
  

2025년 8월 20일 (수) 16:58 기준 최신판

vis.js 디자인 가이드

이 가이드는 vis.js 라이브러리를 사용한 네트워크 그래프 디자인 옵션을 보여줍니다.

노드 모양
노드 스타일
엣지 스타일
레이아웃

1. 노드 모양 (Shape)

vis.js는 다양한 노드 모양을 제공합니다:

2. 노드 스타일링

노드의 색상, 테두리, 폰트 등을 커스터마이징할 수 있습니다:

3. 엣지(간선) 스타일링

엣지의 색상, 두께, 화살표 등을 설정할 수 있습니다:

4. 네트워크 레이아웃

그래프의 전체 레이아웃과 물리 효과를 설정할 수 있습니다: