【Python】 그라데이션을 만드는 함수를 만들었다
11350 단어 Python3matplotlib
하고 싶은 일
많은 데이터가 있을 때 matplotlib에서 보통으로 플롯하면 매우 보기 힘들다.
배포 자료로 만들거나 스스로 데이터에서 추세를 읽는 것은 불편합니다.
그래서 그라데이션으로 하고 싶습니다.
했던 일
numpy.linspace처럼 그라데이션을 만들 수 있는 함수를 만들었습니다.
사용법
1. gradation 함수를 copipe
2. 컬러 코드(sRGB)를 구그 start, end에 넣습니다.
3. return은 sRGB 문자열 목록입니다.
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
def gradation(start="#CCCCCC", end="#00519A", step=5):
"""
before use it
import numpy as np
return like this:
['#cccccc', '#bc9aa8', '#b95ba9', '#8b2aa9', '#370e83']
"""
from colorsys import rgb_to_hls, hls_to_rgb
if len(start) != 7 or len(end) != 7:
raise Exception(
f"argument length must be 7: now{len(start)}, {len(end)}")
rgb_s = (int(start[i:i + 2], 16) / 256 for i in range(1, 4))
rgb_e = (int(end[i:i + 2], 16) / 256 for i in range(1, 4))
hls_s = np.array(rgb_to_hls(*rgb_s))
hls_e = np.array(rgb_to_hls(*rgb_e))
diff_hls = hls_e - hls_s
# color is circle
diff_hls[0] = (diff_hls[0] + 0.5) - np.floor(diff_hls[0] + 0.5) - 0.5
hls_list = [hls_s + diff_hls * i / step for i in range(step)]
rgb_list = [hls_to_rgb(*p) for p in hls_list]
# Transeform floor rgb to Strings rgb
str_rgb = []
for rgb in rgb_list:
str_rgb.append(
f"#{int(rgb[0]* 256):02x}{int(rgb[1]* 256):02x}{int(rgb[2]* 256):02x}")
return str_rgb
def main():
nsinx = 5
x = np.linspace(0, np.pi * 4, 100)
dx = np.pi / (nsinx)
sinxes = [np.sin(x - i * dx) for i in range(nsinx)]
gra = gradation(start="#CCCCCC", end="#00519A", step=nsinx)
for i, sinx in enumerate(sinxes):
plt.plot(x, sinx, label=f"dx*{i}", lw=3, color=gra[i])
plt.legend()
plt.show()
if __name__ == "__main__":
main()
추가
함수 내에서 import 등 PEP8을 준수하지 않습니다.
코피페에서 쉽게 사용할 수 있도록 하기 위해서입니다.
copipe 코딩 스타일은 유지 보수성이 마치 안됩니다.
어떻게든하고 싶지만 패키징 할 정도는 아니기 때문에
뭔가 좋은 생각이 있으면 가르쳐주세요.
참고문헌
매우 참고가 되었습니다.
감사합니다.
Python 로 그라데이션 중 색상 찾기
Reference
이 문제에 관하여(【Python】 그라데이션을 만드는 함수를 만들었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/78910jqk/items/37f52cbe1571fde75566
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
numpy.linspace처럼 그라데이션을 만들 수 있는 함수를 만들었습니다.
사용법
1. gradation 함수를 copipe
2. 컬러 코드(sRGB)를 구그 start, end에 넣습니다.
3. return은 sRGB 문자열 목록입니다.
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
def gradation(start="#CCCCCC", end="#00519A", step=5):
"""
before use it
import numpy as np
return like this:
['#cccccc', '#bc9aa8', '#b95ba9', '#8b2aa9', '#370e83']
"""
from colorsys import rgb_to_hls, hls_to_rgb
if len(start) != 7 or len(end) != 7:
raise Exception(
f"argument length must be 7: now{len(start)}, {len(end)}")
rgb_s = (int(start[i:i + 2], 16) / 256 for i in range(1, 4))
rgb_e = (int(end[i:i + 2], 16) / 256 for i in range(1, 4))
hls_s = np.array(rgb_to_hls(*rgb_s))
hls_e = np.array(rgb_to_hls(*rgb_e))
diff_hls = hls_e - hls_s
# color is circle
diff_hls[0] = (diff_hls[0] + 0.5) - np.floor(diff_hls[0] + 0.5) - 0.5
hls_list = [hls_s + diff_hls * i / step for i in range(step)]
rgb_list = [hls_to_rgb(*p) for p in hls_list]
# Transeform floor rgb to Strings rgb
str_rgb = []
for rgb in rgb_list:
str_rgb.append(
f"#{int(rgb[0]* 256):02x}{int(rgb[1]* 256):02x}{int(rgb[2]* 256):02x}")
return str_rgb
def main():
nsinx = 5
x = np.linspace(0, np.pi * 4, 100)
dx = np.pi / (nsinx)
sinxes = [np.sin(x - i * dx) for i in range(nsinx)]
gra = gradation(start="#CCCCCC", end="#00519A", step=nsinx)
for i, sinx in enumerate(sinxes):
plt.plot(x, sinx, label=f"dx*{i}", lw=3, color=gra[i])
plt.legend()
plt.show()
if __name__ == "__main__":
main()
추가
함수 내에서 import 등 PEP8을 준수하지 않습니다.
코피페에서 쉽게 사용할 수 있도록 하기 위해서입니다.
copipe 코딩 스타일은 유지 보수성이 마치 안됩니다.
어떻게든하고 싶지만 패키징 할 정도는 아니기 때문에
뭔가 좋은 생각이 있으면 가르쳐주세요.
참고문헌
매우 참고가 되었습니다.
감사합니다.
Python 로 그라데이션 중 색상 찾기
Reference
이 문제에 관하여(【Python】 그라데이션을 만드는 함수를 만들었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/78910jqk/items/37f52cbe1571fde75566
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Python】 그라데이션을 만드는 함수를 만들었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/78910jqk/items/37f52cbe1571fde75566텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)