이 파일은 저작권자가 저작권을 포기한
퍼블릭 도메인 상태에 있습니다.
만약 저작권을 포기하는 것이 법률상 불가능하다면 저작권자는 이 저작물을 누구나 자유로이 어떤 목적으로든 제한 없이 사용할 수 있도록 허용합니다.
만약 저작권을 포기하는 것이 법률상 불가능하다면 저작권자는 이 저작물을 누구나 자유로이 어떤 목적으로든 제한 없이 사용할 수 있도록 허용합니다.
1. 기본 정보
출처 | 자작 (데이터출처: 한국기업평판연구소) |
날짜 | MMXXIII년 8월 4알 |
저작자 | 자작 |
저작권 | 자작 |
기타 | - |
2. 이미지 설명
FIFTY FIFTY의 신인 아이돌 그룹 브랜드 평판 추이( FIFTY FIFTY 전속 계약 분쟁 문서에 사용, NewJeans와 LE SSERAFIM, NMIXX와 H1-KEY는 참고용임.)
소스코드
#!syntax python
#!/usr/bin/python3
#-*- coding: utf-8 -*-
"""
지표: 신인 아이돌 그룹 브랜드 평판
범위: 2023년 6월-8월
대상: 피프티 피프티
비교대상: 뉴진스, 르세라핌, 엔믹스, 하이키
자료출처: 한국기업평판연구소
"""
GRAPH_DATA = [
{"name": "NewJeans", "color": "#0059e1", "thickness": 1,
"value": [3795700, 4701783, 6732407] },
{"name": "LE SSERAFIM", "color": "#81a5f9", "thickness": 1,
"value": [2723057, 3260596, 4441881] },
{"name": "NMIXX", "color": "#163a4b", "thickness": 1,
"value": [ 794902, 690983, 1552194] },
{"name": "H1-KEY", "color": "#d085aa", "thickness": 1,
"value": [1155531, 1444579, 1060337] },
{"name": "FIFTY FIFTY", "color": "#000000", "thickness": 2,
"value": [3472584, 353529, 156949] },
]
GRAPH_LABELS = ["23-06", "23-07", "23-08"]
FONT_COLOR = "#000000"
BACK_COLOR = "#ffffff"
LINE_COLOR = "#555555"
ALINE_COLOR = "#aaaaaa"
WIDTH = 400
HEIGHT = 400
HEIGHT_RATIO = 20000
MIN_VALUE = 0
MAX_VALUE = 7000000
SCALE_LINES = 7
SCALE_HEIGHT = 50
DATA_COUNT = 3
DATA_WIDTH = 100
TEXT_OFFSET = 60
X_OFFSET = 70.5
Y_OFFSET = 20.5
# Namespace Map
NSMAP = {"xlink" : 'http://www.w3.org/1999/xlink'}
# End of Data
from lxml import etree
# Create XML
root = etree.Element("svg", nsmap = NSMAP)
root.set("xmlns", "http://www.w3.org/2000/svg")
root.set("width", str(WIDTH) )
root.set("height", str(HEIGHT) )
# Draw Back
brect = etree.SubElement(root, 'rect')
brect.set("x", "0" )
brect.set("y", "0" )
brect.set("width", str(WIDTH) )
brect.set("height", str(HEIGHT) )
brect.set("fill", str(BACK_COLOR) )
brect.set("stroke", "transparent" )
# Draw BackLine
LINE_HEIGHT = MAX_VALUE / HEIGHT_RATIO
for i in range(1, SCALE_LINES+1):
bline = etree.SubElement(root, 'line')
bline.set("x1", str(X_OFFSET) )
bline.set("x2", str(X_OFFSET + DATA_WIDTH * DATA_COUNT) )
bline.set("y1", str(Y_OFFSET + LINE_HEIGHT - i * SCALE_HEIGHT) )
bline.set("y2", str(Y_OFFSET + LINE_HEIGHT - i * SCALE_HEIGHT) )
bline.set("stroke", str(ALINE_COLOR) )
btext = etree.SubElement(root, 'text')
btext.set("x", str(TEXT_OFFSET) )
btext.set("y", str(Y_OFFSET + LINE_HEIGHT - i * SCALE_HEIGHT) )
btext.set("fill", FONT_COLOR)
btext.set("text-anchor", "end")
btext.set("style", "font-family: sans-serif;")
btext.text = "%sM" % i
bline = etree.SubElement(root, 'line')
bline.set("x1", str(X_OFFSET) )
bline.set("x2", str(X_OFFSET) )
bline.set("y1", str(Y_OFFSET) )
bline.set("y2", str(Y_OFFSET + LINE_HEIGHT) )
bline.set("stroke", str(LINE_COLOR) )
bline = etree.SubElement(root, 'line')
bline.set("x1", str(X_OFFSET) )
bline.set("x2", str(X_OFFSET + DATA_WIDTH * DATA_COUNT) )
bline.set("y1", str(Y_OFFSET + LINE_HEIGHT) )
bline.set("y2", str(Y_OFFSET + LINE_HEIGHT) )
bline.set("stroke", str(LINE_COLOR) )
for i in range(DATA_COUNT):
btext = etree.SubElement(root, 'text')
x = X_OFFSET + i * DATA_WIDTH + DATA_WIDTH / 2
y = Y_OFFSET + LINE_HEIGHT + 20
btext.set("x", str(x) )
btext.set("y", str(y) )
btext.set("fill", FONT_COLOR)
btext.set("text-anchor", "middle")
btext.set("style", "font-family: sans-serif;")
btext.text = GRAPH_LABELS[i]
# DRAW_GRAPH
for dat in GRAPH_DATA:
polyline_points = ""
for i in range(DATA_COUNT):
x = X_OFFSET + i * DATA_WIDTH + DATA_WIDTH / 2
y = Y_OFFSET + LINE_HEIGHT - dat["value"][i] / HEIGHT_RATIO
polyline_points += "%s,%s " % (x, y)
gtext = etree.SubElement(root, 'text')
gtext.set("x", str(x) )
gtext.set("y", str(y) )
gtext.set("fill", dat["color"])
gtext.set("text-anchor", "middle")
gtext.set("style", "font-family: sans-serif;")
gtext.text = dat["name"]
gline = etree.SubElement(root, 'polyline')
gline.set("points", polyline_points)
gline.set("fill", "transparent")
gline.set("stroke", dat["color"])
gline.set("stroke-width", str(dat["thickness"]) )
# Write to xml file
x_output = etree.tostring(root, pretty_print=True, encoding='UTF-8')
x_header = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'
ff=open('./graph.svg', 'w', encoding="utf-8")
ff.write(x_header + x_output.decode('utf-8') )