카테고리 없음
논문용 색깔 팔레트 (color palette for scientific paper)
TTSR
2024. 9. 10. 09:05
728x90
반응형
1. 개요
논문의 그래프는 검정 하양색만으로 그리면 너무 단순하다고 듣기 쉽고 너무 화려한 색을 쓰면 어지럽다는 말을 듣기 쉽다.
또한, 색깔 조합을 적절히 하느냐는 논문의 임팩트 팩터에도 영향을 준다는 말도 있다. 이러한 연구자들을 위해 각 저널들에서 자주 사용되는 색깔을 정리한 패키지가 있어서 이것을 다뤄볼까 한다.
2. 내용.
출처는 아래 사이트에 있다.
https://cran.r-project.org/web/packages/ggsci/vignettes/ggsci.html
R의 ggplot2에서 헥사코드 (hexacode)를 가져올 수 있을텐데 BMJ의 경우 아래 사이트에 정리가 되어 있다.
https://technology.bmj.com/living-style-guide/colour.html
'''
이 파이썬 스크립트는 논문들에서 사용되는 색깔을 저장해둔 것이다.
전체는 아니고 내 개인적으로 괜찮은 것들만 추린 것이다.
'''
class paper_color:
'''
이것은 어떤 색깔을 쓸지 지정하는 것이라고 생각하면 됨.
색깔의 수는 기능 뒤의 숫자로 적혀있음. 예를들어 npg10은 10개라는 뜻임.
'''
def __init__(self,color_code='npg'):
self.color_code=color_code
def npg10():
'''
nature publishing group의 색깔 10개
'''
npg_color="#E64B35FF,#4DBBD5FF,#00A087FF,#3C5488FF,#F39B7FFF,#8491B4FF,#91D1C2FF,#DC0000FF,#7E6148FF,#B09C85FF"
npg_color=npg_color.split(',')
return npg_color
self.npg10=npg10
def bmj9():
'''
bmj의 색깔 9개
'''
bmj_color="#2A6EBBFF,#F0AB00FF,#C50084FF,#7D5CC6FF,#E37222FF,#69BE28FF,#00B2A9FF,#CD202CFF,#747678FF"
bmj_color=bmj_color.split(',')
return bmj_color
self.bmj9=bmj9
def science10():
'''
science journal의 10개 색깔
American Association for the Advancement (AAAS)
'''
sci_color="#3B4992FF,#EE0000FF,#008B45FF,#631879FF,#008280FF,#BB0021FF,#5F559BFF,#A20056FF,#808180FF,#1B1919FF"
sci_color=sci_color.split(',')
return sci_color
self.science10=science10
def nejm8():
'''
nejm의 8개 색깔
'''
nejm_color="#BC3C29FF,#0072B5FF,#E18727FF,#20854EFF,#7876B1FF,#6F99ADFF,#FFDC91FF,#EE4C97FF"
nejm_color=nejm_color.split(',')
return nejm_color
self.nejm8=nejm8
def lancet10():
'''
lancet color palette
'''
lancet_color="#00468BFF,#ED0000FF,#42B540FF,#0099B4FF,#925E9FFF,#FDAF91FF,#AD002AFF,#ADB6B6FF,#1B1919FF"
lancet_color=lancet_color.split(',')
return lancet_color
self.lancet10=lancet10
def jco10():
'''
journal of clinical oncology color palettes
'''
jco_color="#0073C2FF,#EFC000FF,#868686FF,#CD534CFF,#7AA6DCFF,#003C67FF,#8F7700FF,#3B3B3BFF,#A73030FF"
jco_color=jco_color.split(',')
return jco_color
self.jco10=jco10
def observable10():
'''
Observable 10 color palette
Pettiross J (2023). "Crafting data colors and staying on brand." Observable blog. https://observablehq.com/blog/crafting-data-colors
'''
obs_color="#4269D0FF,#EFB118FF,#FF725CFF,#6CC5B0FF,#3CA951FF,#FF8AB7FF,#A463F2FF,#97BBF5FF,#9C6B4EFF,#9498A0FF"
obs_color=obs_color.split(',')
return obs_color
self.observable10=observable10
def palette(self):
if self.color_code in ['npg','Nature','nature','NPG']:
self.color=self.npg10()
elif self.color_code in ['observable','obs','OBS']:
self.color=self.observable10()
elif self.color_code in ['BMJ','bmj']:
self.color=self.bmj9()
elif self.color_code in ['JCO','jco','clinical oncology','oncology']:
self.color=self.jco10()
elif self.color_code in ['nejm','NEJM']:
self.color=self.nejm8()
elif self.color_code in ['lancet','LANCET','Lancet']:
self.color=self.lancet10()
else:
print('available colors are')
print('npg, observable, bmj, jco, nejm, lancet')
error
return self.color
def show(self):
'''
palette를 보여주기 위한 스크립트
'''
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import to_rgba_array
self.color=self.palette()
palette = np.array(to_rgba_array(self.color))[np.newaxis, :,:]
plt.imshow(palette)
plt.xticks(ticks=range(len(self.color)),labels=self.color,rotation=-45,ha='left')
plt.title(self.color_code)
plt.yticks([])
plt.show()
3. 사용
default값은 npg이지만 observable로 변환시에는 아래와 같이 나온다.
pc=paper_color(color_code='obs')
pc.palette()
# 출력물은 아래와 같다.
['#4269D0FF', '#EFB118FF', '#FF725CFF', '#6CC5B0FF', '#3CA951FF',
'#FF8AB7FF', '#A463F2FF', '#97BBF5FF', '#9C6B4EFF', '#9498A0FF']
위의 팔레트의 색깔을 보고 싶으면 .show()를 실행하면 된다.
pc=paper_color(color_code='obs')
pc.show()
4. 색 옵션들
728x90
반응형