파이썬으로 그린 도형의 색칠에 시간을 사용하지 않기 위해
16044 단어 파이썬matplotlib
matplotlib에서 도형 색칠
matplotlib로 여러 도형을 그릴 때,
하나하나 "red"라든지 "blue"라든지 지정하지 않는 방법을 조사해 보았다.
소개 matplotlib fill을 사용하여 도형 그리기
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
#図形データ作成
#ベースの四角形
x=np.array([-0.5,0.5,0.5,-0.5])
y=np.array([0,0,1,1])
#四角形をN個用意
N=3
#列数
cn=10
xl=list()
yl=list()
for i in range(N):
xl.append(x+1.2*(i%cn))
yl.append(y-1.2*int(i/cn))
#作図
fig = plt.figure()
ax = fig.add_subplot(111)
plt.axes().set_aspect('equal')
poly = plt.fill(xl[0],yl[0],fc="red")#ここで"red"とかいちいち書きたくない場合はどうするか
poly = plt.fill(xl[1],yl[1],fc="green")
poly = plt.fill(xl[2],yl[2],fc="blue")
plt.show()
위와 같이 3 종류의 도형 정도라면 좋지만, 도형의 수에 맞추어 일일이 몇 색을 사용할지 생각하거나 "red", "green", "blue"로 지정되어 있지 않다.
모르는 만큼 굉장히 좋은 방법이 있을 것...
사용하는 도형이 10개 이하라면 tab10을 사용하는 것이 깨끗
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
#ベースの四角形
x=np.array([-0.5,0.5,0.5,-0.5])
y=np.array([0,0,1,1])
#四角形をN個用意
N=10
#列数
cn=10
xl=list()
yl=list()
for i in range(N):
xl.append(x+1.2*(i%cn))
yl.append(y-1.2*int(i/cn))
cmap = plt.get_cmap("tab10") #ここでカラーマップの種類を指定
print(cmap)
#作図
fig = plt.figure()
ax = fig.add_subplot(111)
plt.axes().set_aspect('equal')
for xx,yy,cc in zip(xl,yl,range(N)):
poly = plt.fill(xx,yy,fc=cmap(cc))
matplotlib의 pyplot 중에는 정해진 컬러 맵이 준비되어 있으며,
그것을 get_cmap 함수로 호출할 수 있다.
컬러 맵의 종류로서 tab10 외에 Set1이 사용하기 쉽다.
자세한 내용은 다음 기사에 자세히 쓰여져 있습니다.
matplotlib에서 color cycle의 N 번째 색상을 지정하는 몇 가지 방법
어떤 맵이 있는지는 참조를 참조.
color example code: colormaps_reference.py
10개 이상이라도 깨끗하게 내고 싶은 경우는 어떻게 한다
직접 컬러맵을 만들어 보세요.
10개 이상 필요한 기회는 없을지도 모르지만, 어떻게 하면 좋은지 생각해 보았다.
※상기의 tab20을 사용하는 것도 손이지만, 색조가 마음에 들지 않는다.
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import colorsys
#ベースの四角形
x=np.array([-0.5,0.5,0.5,-0.5])
y=np.array([0,0,1,1])
#四角形をN個用意
N=20
#列数
cn=5
xl=list()
yl=list()
for i in range(N):
xl.append(x+1.2*(i%cn))
yl.append(y-1.2*int(i/cn))
#カラーマップ作製==========================
hexs=list()
for i in range(N):
rgb=colorsys.hsv_to_rgb(i/N, 1, 1)#(h,s,v)を(r,g,b)に変換
hexs.append(matplotlib.colors.rgb2hex(rgb))#(r,g,b)を16進数のカラーコードに変換
#作図
fig = plt.figure()
ax = fig.add_subplot(111)
plt.axes().set_aspect('equal')
for xx,yy,cc in zip(xl,yl,hexs):
poly = plt.fill(xx,yy,fc=cc)
plt.show()
색조를 단순 등분할
색은 빨강, 초록, 파랑의 3성분이 얼마나 섞여 있는가로 표현하는 RGB가 친숙하지만, 색조, 다시, 명도로 표현하는 HSV라는 표현이 있다.
색조를 등분할함으로써, 다른 색을 가지는 임의의 크기의 컬러 맵을 만들어 보자.
HSV에 대해 알기 쉬운 해설은 아래를 참조
HSV 색 공간
요약
기본은 tab10을 사용해 넣으면 문제 없을 것 같다.
자작의 컬러 맵은 확실히 깨끗하게 보이면 좋지만,
녹색은 진짜로 사용하면 어느 것이 젊은 수치의 숫자인지 구별할 수 없다고 생각한다.
더 좋은 방법이 있으면 편집하고 싶습니다.
(어떻게 하면 보기 쉬운 배색이 가능한지 조사하고 있으면, 색의 유니버설 디자인이라고 하는 것이 있는 것 같다.)
Reference
이 문제에 관하여(파이썬으로 그린 도형의 색칠에 시간을 사용하지 않기 위해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/HAOPI/items/6dc88e2a1a994b96e55d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
#図形データ作成
#ベースの四角形
x=np.array([-0.5,0.5,0.5,-0.5])
y=np.array([0,0,1,1])
#四角形をN個用意
N=3
#列数
cn=10
xl=list()
yl=list()
for i in range(N):
xl.append(x+1.2*(i%cn))
yl.append(y-1.2*int(i/cn))
#作図
fig = plt.figure()
ax = fig.add_subplot(111)
plt.axes().set_aspect('equal')
poly = plt.fill(xl[0],yl[0],fc="red")#ここで"red"とかいちいち書きたくない場合はどうするか
poly = plt.fill(xl[1],yl[1],fc="green")
poly = plt.fill(xl[2],yl[2],fc="blue")
plt.show()
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
#ベースの四角形
x=np.array([-0.5,0.5,0.5,-0.5])
y=np.array([0,0,1,1])
#四角形をN個用意
N=10
#列数
cn=10
xl=list()
yl=list()
for i in range(N):
xl.append(x+1.2*(i%cn))
yl.append(y-1.2*int(i/cn))
cmap = plt.get_cmap("tab10") #ここでカラーマップの種類を指定
print(cmap)
#作図
fig = plt.figure()
ax = fig.add_subplot(111)
plt.axes().set_aspect('equal')
for xx,yy,cc in zip(xl,yl,range(N)):
poly = plt.fill(xx,yy,fc=cmap(cc))
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import colorsys
#ベースの四角形
x=np.array([-0.5,0.5,0.5,-0.5])
y=np.array([0,0,1,1])
#四角形をN個用意
N=20
#列数
cn=5
xl=list()
yl=list()
for i in range(N):
xl.append(x+1.2*(i%cn))
yl.append(y-1.2*int(i/cn))
#カラーマップ作製==========================
hexs=list()
for i in range(N):
rgb=colorsys.hsv_to_rgb(i/N, 1, 1)#(h,s,v)を(r,g,b)に変換
hexs.append(matplotlib.colors.rgb2hex(rgb))#(r,g,b)を16進数のカラーコードに変換
#作図
fig = plt.figure()
ax = fig.add_subplot(111)
plt.axes().set_aspect('equal')
for xx,yy,cc in zip(xl,yl,hexs):
poly = plt.fill(xx,yy,fc=cc)
plt.show()
Reference
이 문제에 관하여(파이썬으로 그린 도형의 색칠에 시간을 사용하지 않기 위해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/HAOPI/items/6dc88e2a1a994b96e55d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)