동일한 플롯에 여러 계열을 표시하는 데 사용할 최상의 색상 세트에 대한 연구가 있습니까? 방금 기본값을 사용하고 matplotlib
있으며 모두 밝고 기본 색상이므로 조금 유치합니다.
동일한 플롯에 여러 계열을 표시하는 데 사용할 최상의 색상 세트에 대한 연구가 있습니까? 방금 기본값을 사용하고 matplotlib
있으며 모두 밝고 기본 색상이므로 조금 유치합니다.
답변:
컬러 팔레트 선택에 대한 일반적인 참조는 Cynthia Brewer의 ColorBrewer 작품입니다 . 색상은 choropleth 맵의 지각 패턴을 기반으로 선택되었지만 대부분의 동일한 조언은 데이터 패턴을 구별하기 위해 모든 유형의 플롯에서 색상을 사용하는 데 적용됩니다. 색상이 서로 다른 선을 구분하기위한 것이라면 질적 팔레트가 순서대로 나타납니다.
몇 개의 선만있는 선 그림에는 색상이 필요하지 않으며 다른 점 기호 및 / 또는 대시 패턴이 충분히 효과적입니다. 선 그림에서 더 일반적인 문제는 선이 자주 겹치면 사용하는 심볼이나 색상에 관계없이 다른 패턴을 구분하기가 어렵다는 것입니다. Stephen Kosslyn은 줄거리에 4 줄만있는 일반적인 경험 법칙을 권장합니다. 더 많은 선을 여러 개의 작은 여러 플롯으로 분할하는 것을 고려하십시오. 다음은 권장 사항을 보여주는 예입니다
색상이 필요없고 라벨이 충분합니다.
다른 답변에서 많은 훌륭한 조언이 있지만 여기에 저의 저수준 조언에서 학생들에게 몇 가지 추가 사항이 있습니다. 이것은 핵심 질문에 대해 자연스럽게 생각할 조언입니다. 내 그래프는 무엇을 의도합니까? 이 데이터에 어떤 의미가 있습니까? 독자는 누구입니까? 그래프에서 색상이 예상되는 것은 무엇입니까? 다른 사람의 교리와 상관없이 그래프가 잘 작동합니까?
또한 색상의 중요성은 그래프마다 크게 다릅니다. 서로 다른 영역이 서로 다른 색으로 표시되거나 최소한 음영 처리된다는 아이디어가있는 choropleth 또는 patch map의 경우 그래프의 성공은 색상 구성의 성공과 결부됩니다. 다른 종류의 그래프의 경우 색상이 없어야하거나 성가신 것일 수 있습니다.
색상이 모두 필요합니까? 예를 들어, 다른 변수 또는 그룹이 그래프의 다른 영역에있는 텍스트 레이블로 명확하게 구별되는 경우 별도의 색상도 종종 과도하게 사용됩니다. 과일 샐러드 또는 technicolor 드림 코트 효과에주의하십시오. 텍스트 레이블이 있거나 조각별로 원형 차트의 경우 색상은 예를 들어 추가 정보를 전달하지 않습니다. 원형 차트가 키 또는 범례에 의존하는 경우 잘못된 종류의 그래프를 사용하고있을 가능성이 있습니다.
많은 사람들이 이러한 색상을 구별하기 위해 애 쓰고 있기 때문에 빨강과 녹색의 대비에 의존하지 마십시오.
레인보우 시퀀스 (ROYGBIV 또는 빨강-오렌지-노랑-녹색-파랑-인디고-바이올렛)는 물리적 근거에 호소 할 수 있지만 실제로는 잘 작동하지 않습니다. 예를 들어 노란색은 일반적으로 약한 색상이며 주황색과 녹색은 일반적으로 더 강하므로 인상은 단조로운 시퀀스도 아닙니다.
강한 색상의 큰 패치로 인한 색상 구성표를 피하십시오.
진한 빨강 색에서 진한 파랑 색까지의 순서는 순서가 필요할 때 잘 작동합니다. 흰색이 (평소와 같이) 배경색이면 사용하지 말고 옅은 빨간색에서 옅은 파란색으로 건너 뜁니다. [2018 년 3 월 1 일 추가됨] 밑줄을하기에는 너무 분명 할 수 있습니다. 빨간색은 많은 사람들에게 부정적인 의미 및 / 또는 위험을 의미하므로 도움이 될 수 있으며 파란색은 긍정적입니다. 밑줄이 너무 분명하지만 어떤 식 으로든 할 수 있습니다. 빨간색과 파란색은 많은 국가에서 정치적 의미를 가지고 있습니다.
파란색과 주황색이 잘 어울립니다 (여기서 Hastie, Tibshirani 및 Friedman에 대한 감사의 인사 : http://web.stanford.edu/~hastie/local.ftp/Springer/OLD/ESLII_print4.pdf ) [2018 년 3 월 1 일 추가] 많은 시각화에 대한 입문서는 이제 기본 팔레트로 주황색, 파란색 및 회색을 권장합니다. 관심있는 대상에 대해 주황색 및 / 또는 파란색, 배경에 대해 회색입니다.
연한 회색에서 진한 회색까지의 회색조는 잘 작동 할 수 있으며 색상 재현이 문제가되지 않을 때 좋은 생각입니다. (회색조로 공평한 배쉬를 만들 수없는 형편없는 프린터입니다.) (원하는 경우 회색, 환경에 따라 환경 설정이 변경되는 것처럼 색상 및 색상과 마찬가지로)
[2016 년 8 월 5 일 추가] 상당히 일반적인 원리는 종종 두 가지 색상이 많은 색상보다 훨씬 잘 작동한다는 것입니다. 두 그룹이 모두 관심이 있다면 동일하게 강한 색상을 선택하십시오 (예 : 빨강 또는 주황 및 파랑). 한 그룹이 여러 그룹 중 특히 관심이있는 경우 파란색 또는 주황색으로 만들고 다른 그룹을 회색으로 만듭니다. 원칙적으로 7 개 그룹에 7 가지 색상을 사용하면 정보를 전달할 수 있지만, 다른 여러 업체와 경쟁이있을 때 한 번에 하나의 색상에만 집중하기는 어렵습니다. 작은 배수는 다색 도표보다 여러 그룹에 더 좋습니다.
최근 몇 년 동안 이것에 대한 많은 연구가있었습니다.
중요한 점은 "의미 적 공명"입니다. 이것은 기본적으로 "그들이 나타내는 것과 일치하는 색"을 의미합니다. 예를 들어 돈의 시계열은 적어도 미국의 관객에게는 녹색으로 표시되어야합니다. 이것은 분명히 이해력을 향상시킵니다. 이 주제에 관한 매우 흥미로운 논문 중 하나는 Lin, et al (2013)입니다 : http://vis.stanford.edu/papers/semantically-resonant-colors
http://tools.medialab.sciences-po.fr/iwanthue/에 iWantHue 색상 생성기 가 있으며 다른 탭에는 많은 정보가 있습니다.
Lin, Sharon, Julie Fortuna, Chinmay Kulkarni, Maureen Stone 및 Jeffrey Heer. (2013). 데이터 시각화를위한 시맨틱 공진 색상 선택. 2013 년 컴퓨터 그래픽 포럼 (Proc. EuroVis)
Paul Tol은 자신의 웹 사이트 에서 색상 차이 (예 : 범주 형 또는 정 성적 데이터) 및 색맹 비전에 최적화 된 색 구성표를 제공하며 여기 에 연결된 "기술 노트"(PDF 파일)로 자세하게 설명합니다. 그는 말한다 :
과학적인 결과를 가능한 한 명확하게 그래픽으로 나타내려면 다음과 같은 색상 팔레트를 사용하는 것이 편리합니다.
- 색맹 리더를 포함한 모든 사람들에게 독특함;
- 흑백과 구별;
- 스크린과 종이에 뚜렷한; 과
- 여전히 잘 어울립니다.
나는 가장 뚜렷한 9 가지 색상 중 하나 인 "팔레트 1"에서 색상 구성표를 가져 와서 matplotlibrc
파일 아래 에 배치했습니다 axes.color_cycle
.
axes.color_cycle : 332288, 88CCEE, 44AA99, 117733, 999933, DDCC77, CC6677, 882255, AA4499
그런 다음 Joe Kington의 답변 에서 빌린 기본 줄에 다음과 같이 표시됩니다.
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
x = np.linspace(0, 20, 100)
fig, axes = plt.subplots(nrows=2)
for i in range(1,10):
axes[0].plot(x, i * (x - 10)**2)
for i in range(1,10):
axes[1].plot(x, i * np.cos(x))
plt.show()
결과 :
(예를 들어, 스칼라 값을 표현하기 위해) 컬러 맵을 발산를 들어, 내가 본 가장 좋은 참조가 여기에 해당 케네스 모어 랜드에 의해 종이 "입니다 과학적 시각화 분기 컬러지도 ". 그는 무지개 방식을 대체하기 위해 쿨 따름 방식을 개발했으며 "사용자가 자신 만의 맞춤형 컬러 맵을 쉽게 생성 할 수있는 알고리즘을 제시합니다".
과학적 시각화에서 색상 사용에 대한 정보를 얻을 수있는 또 다른 유용한 소스는 NASA를 위해 "Blue Marble"이미지를 만든 Robert Simmon의 정보입니다. Earth Observatory 웹 사이트에서 그의 일련의 게시물 을 보십시오 .
에 colorbrewer2.org 찾을 수 질적 , 연속 및 분기 색 구성표를. 정 성적 (Qualitative) 은 연속적인 색상의 차이를 최대화하며 이것이 바로 gnuplot에서 사용하는 것입니다. 이 사이트의 장점은 16 진수 코드를 쉽게 복사하여 가져올 수 있다는 것입니다. 예를 들어 다음 8 색 세트를 사용하고 있습니다.
#e41a1c
#377eb8
#4daf4a
#984ea3
#ff7f00
#ffff33
#a65628
#f781bf
오히려 유쾌하고 명확한 결과를 생성합니다.
참고로, 순차 는 부드러운 기울기 가 필요할 때 중심 값 (예 : 산 고도 및 해수)과의 차이를 강조해야 할 때 분기 됩니다. 이 색 구성표에 대한 자세한 내용은 여기를 참조하십시오 .
컬러 팔레트 선택 전용 웹 사이트가 많이 있습니다. 나는 객관적으로 가장 좋은 특정 색상 세트가 있다는 것을 모르겠습니다. 청중과 작품의 색조에 따라 선택해야합니다.
시작하려면 http://www.colourlovers.com/palettes 또는 http://design-seeds.com/index.php/search 를 확인하십시오 . 그들 중 일부는 서로 다른 그룹을 표시하기 위해 두 개의 가까운 색상을 가지고 있지만 다른 것들은 더 넓은 범위에 걸쳐 보완적인 색상을 제공합니다.
Matplotlib에서 기본 이 아닌 미리 정의 된 색상 세트를 확인할 수도 있습니다 .
나는 산점도를 위해 colorbrewer의 Dark2 팔레트를 좋아합니다. 우리는 이것을 ggobi book, www.ggobi.org/book 에서 사용했습니다 . 그러나 그렇지 않으면 컬러 팔레트는 데이터 플롯이 아닌 지리적 영역을위한 것입니다. 포인트 기반 플롯의 경우에도 올바른 색상 선택이 문제입니다.
는 R 패키지 colorspace
및 dichromat
유용합니다. colorspace
휠 주위의 색상을 선택할 수 있습니다. 미세 조정에 몇 시간 / 일을 소비 할 수 있습니다. dichromat
색맹 검사를 도와줍니다.
ggplot2
반드시 색맹 인 증거는 아니지만 일반적으로 좋은 기본값을 갖습니다.
발산되는 빨간색에서 파란색 구성표는 컴퓨터에서는 좋아 보이지만 제대로 투사되지 않습니다.
선을 플로팅 할 때 프로젝터에 잘 표시되지 않는 녹색과 노란색을 조심해야합니다. 프레젠테이션에서 대부분의 플롯을 다시 사용하기 때문에 원래 의도가 스크린 또는 종이 출판 용인 경우에도 이러한 색상을 사용하지 않습니다.
고 대비를 유지하기 위해 검은 색, 빨간색, 파란색, 자홍색, 청록색으로 남겨두고 실제로 필요한 경우 회색을 사용합니다. 실제로, 이들 중 대부분은 밝고, 1 차 또는 2 차 색상입니다. 나는 그것이 미학적 관점에서 최적이 아닐 수도 있다는 것을 알고 있지만, 내가 제시하는 내용의 선명도에 더 관심이 있습니다. 반면, 제한된 팔레트에서 동일한 색상을 일관되게 재사용하는 것은 미적으로 좋은 일이 될 수 있습니다.
6 줄 이상을 사용하는 경우 더 많은 공간을 채우고 색상 블록을 그리는쪽으로 이동합니다. 이러한 종류의 음모에 대해서는 각 사례를 별도로 고려해야한다고 생각합니다. 극단이 돋보 이도록 하시겠습니까, 아니면 제로 크로싱을 원하십니까? 데이터가 주기적입니까 (예 : 0과 2π는 같은 색을 사용해야합니까)? 온도에 대해 파란색 / 빨간색과 같은 표준과 유사합니까? 흰색은 NaN을 나타내거나 데이터가 없거나 하이라이트로 사용됩니까? 등
컬러 블라인드 시청자에게 CARTOColors 는 Paul Tol의 인기있는 컬러 스킴을Safe
기반으로 하는 질적 인 컬러 블라인드 친화적 인 방식을 가지고 있습니다. 이 팔레트는 쉽게 구별 할 수있는 12 가지 색상으로 구성됩니다.
질적 인 색맹 친화적 인 또 다른 팔레트는 “Color Universal Design (CUD) : 색맹 인에게 친숙한 그림과 프리젠 테이션을 만드는 방법”에서 제안한 Okabe와 Ito 구성표입니다.
### Example for R users
library(ggplot2)
library(rcartocolor)
library(patchwork)
theme_set(theme_classic(base_size = 14) + theme(panel.background = element_rect(fill = "#ecf0f1")))
set.seed(123)
df <- data.frame(x = rep(1:5, 8),
value = sample(1:100, 40),
variable = rep(paste0("category", 1:8), each = 5))
safe_pal <- carto_pal(12, "Safe")
palette_OkabeIto_black <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442",
"#0072B2", "#D55E00", "#CC79A7", "#000000")
# plot
p1 <- ggplot(data = df, aes(x = x, y = value)) +
geom_line(aes(colour = variable), size = 1) +
scale_color_manual(values = palette_OkabeIto_black)
p2 <- ggplot(data = df, aes(x = x, y = value)) +
geom_col(aes(fill = variable)) +
scale_fill_manual(values = safe_pal)
p1 / p2