달나라 노트

Python matplotlib : matplotlib.colors.CSS4_COLORS (Color Keyword, Named Color) 본문

Python/Python matplotlib

Python matplotlib : matplotlib.colors.CSS4_COLORS (Color Keyword, Named Color)

CosmosProject 2024. 3. 29. 19:26
728x90
반응형

 

 

 

matplotlib를 이용하다 보면 그래프의 색깔, 점의 색깔 등 다양한 곳에서 색상을 지정해야 하는 상황이 있습니다.

 

이때 Color hex code를 이용해서 색상을 지정할 수도 있지만

미리 특정 색상을 keyword와 연결지어서 네이밍을 해둔 색상들이 있습니다.

 

물론 존재하는 모든 색상에 대해 이런 keyword가 있는 것은 아니고 matplotlib에서 지원하는 색상값들이 있습니다.

 

 

import matplotlib


dict_colors = matplotlib.colors.CSS4_COLORS

print(dict_colors)



-- Result
{'aliceblue': '#F0F8FF', 'antiquewhite': '#FAEBD7', 'aqua': '#00FFFF', 'aquamarine': '#7FFFD4', 'azure': '#F0FFFF', 'beige': '#F5F5DC', 'bisque': '#FFE4C4', 'black': '#000000', 'blanchedalmond': '#FFEBCD', 'blue': '#0000FF', 'blueviolet': '#8A2BE2', 'brown': '#A52A2A', 'burlywood': '#DEB887', 'cadetblue': '#5F9EA0', 'chartreuse': '#7FFF00', 'chocolate': '#D2691E', 'coral': '#FF7F50', 'cornflowerblue': '#6495ED', 'cornsilk': '#FFF8DC', 'crimson': '#DC143C', 'cyan': '#00FFFF', 'darkblue': '#00008B', 'darkcyan': '#008B8B', 'darkgoldenrod': '#B8860B', 'darkgray': '#A9A9A9', 'darkgreen': '#006400', 'darkgrey': '#A9A9A9', 'darkkhaki': '#BDB76B', 'darkmagenta': '#8B008B', 'darkolivegreen': '#556B2F', 'darkorange': '#FF8C00', 'darkorchid': '#9932CC', 'darkred': '#8B0000', 'darksalmon': '#E9967A', 'darkseagreen': '#8FBC8F', 'darkslateblue': '#483D8B', 'darkslategray': '#2F4F4F', 'darkslategrey': '#2F4F4F', 'darkturquoise': '#00CED1', 'darkviolet': '#9400D3', 'deeppink': '#FF1493', 'deepskyblue': '#00BFFF', 'dimgray': '#696969', 'dimgrey': '#696969', 'dodgerblue': '#1E90FF', 'firebrick': '#B22222', 'floralwhite': '#FFFAF0', 'forestgreen': '#228B22', 'fuchsia': '#FF00FF', 'gainsboro': '#DCDCDC', 'ghostwhite': '#F8F8FF', 'gold': '#FFD700', 'goldenrod': '#DAA520', 'gray': '#808080', 'green': '#008000', 'greenyellow': '#ADFF2F', 'grey': '#808080', 'honeydew': '#F0FFF0', 'hotpink': '#FF69B4', 'indianred': '#CD5C5C', 'indigo': '#4B0082', 'ivory': '#FFFFF0', 'khaki': '#F0E68C', 'lavender': '#E6E6FA', 'lavenderblush': '#FFF0F5', 'lawngreen': '#7CFC00', 'lemonchiffon': '#FFFACD', 'lightblue': '#ADD8E6', 'lightcoral': '#F08080', 'lightcyan': '#E0FFFF', 'lightgoldenrodyellow': '#FAFAD2', 'lightgray': '#D3D3D3', 'lightgreen': '#90EE90', 'lightgrey': '#D3D3D3', 'lightpink': '#FFB6C1', 'lightsalmon': '#FFA07A', 'lightseagreen': '#20B2AA', 'lightskyblue': '#87CEFA', 'lightslategray': '#778899', 'lightslategrey': '#778899', 'lightsteelblue': '#B0C4DE', 'lightyellow': '#FFFFE0', 'lime': '#00FF00', 'limegreen': '#32CD32', 'linen': '#FAF0E6', 'magenta': '#FF00FF', 'maroon': '#800000', 'mediumaquamarine': '#66CDAA', 'mediumblue': '#0000CD', 'mediumorchid': '#BA55D3', 'mediumpurple': '#9370DB', 'mediumseagreen': '#3CB371', 'mediumslateblue': '#7B68EE', 'mediumspringgreen': '#00FA9A', 'mediumturquoise': '#48D1CC', 'mediumvioletred': '#C71585', 'midnightblue': '#191970', 'mintcream': '#F5FFFA', 'mistyrose': '#FFE4E1', 'moccasin': '#FFE4B5', 'navajowhite': '#FFDEAD', 'navy': '#000080', 'oldlace': '#FDF5E6', 'olive': '#808000', 'olivedrab': '#6B8E23', 'orange': '#FFA500', 'orangered': '#FF4500', 'orchid': '#DA70D6', 'palegoldenrod': '#EEE8AA', 'palegreen': '#98FB98', 'paleturquoise': '#AFEEEE', 'palevioletred': '#DB7093', 'papayawhip': '#FFEFD5', 'peachpuff': '#FFDAB9', 'peru': '#CD853F', 'pink': '#FFC0CB', 'plum': '#DDA0DD', 'powderblue': '#B0E0E6', 'purple': '#800080', 'rebeccapurple': '#663399', 'red': '#FF0000', 'rosybrown': '#BC8F8F', 'royalblue': '#4169E1', 'saddlebrown': '#8B4513', 'salmon': '#FA8072', 'sandybrown': '#F4A460', 'seagreen': '#2E8B57', 'seashell': '#FFF5EE', 'sienna': '#A0522D', 'silver': '#C0C0C0', 'skyblue': '#87CEEB', 'slateblue': '#6A5ACD', 'slategray': '#708090', 'slategrey': '#708090', 'snow': '#FFFAFA', 'springgreen': '#00FF7F', 'steelblue': '#4682B4', 'tan': '#D2B48C', 'teal': '#008080', 'thistle': '#D8BFD8', 'tomato': '#FF6347', 'turquoise': '#40E0D0', 'violet': '#EE82EE', 'wheat': '#F5DEB3', 'white': '#FFFFFF', 'whitesmoke': '#F5F5F5', 'yellow': '#FFFF00', 'yellowgreen': '#9ACD32'}

 

matplotlib에 내장된 Color Keyword에 대한 정보는 matplotlib.colors.CSS4_COLORS 라는 속성으로부터 알아낼 수 있습니다.

 

그러면 위 코드의 결과처럼 color_keyword: color_hex_code pair로 구성된 dictionary를 볼 수 있죠.

여기에 보이는 color keyword가 matplotlib 내에서 사용할 수 있는 color keyword입니다.

 

 

 

 

 

이를 좀 더 보기 좋게 출력해보자면 아래 코드를 사용할 수 있습니다.

 

import matplotlib
import matplotlib.pyplot as plt
import numpy as np


dict_colors = matplotlib.colors.CSS4_COLORS
list_colors = sorted(dict_colors.items(), key=lambda x: x[1], reverse=False)
dict_colors = dict(list_colors)

ncols = 4
nrows = int(np.ceil(len(dict_colors) / 4))
cell_width = 300
cell_height = 22
margin = 5
total_width = cell_width * ncols + margin * (ncols - 1)
total_height = cell_height * nrows + margin * nrows * 1.2

subplots = plt.subplots(1, 1, figsize=(total_width / 100, total_height / 100), dpi=100)
fig = subplots[0]
graph = subplots[1]

graph.set_xlim(-10, total_width)
graph.set_ylim(-10, total_height)
graph.set_axis_off()


cell_position_x = 0
cell_position_y = 0
cell_x = 0
cell_y = 0
color_square_width = 40
color_square_height = cell_height

for color_keyword, hex_color in dict_colors.items():
    print(color_keyword, cell_position_x, cell_position_y)
    list_square_coords = [
        (cell_position_x, cell_position_y),
        (cell_position_x, cell_position_y + color_square_height),
        (cell_position_x + color_square_width, cell_position_y + color_square_height),
        (cell_position_x + color_square_width, cell_position_y)
    ]
    print(list_square_coords)
    graph.add_patch(
        plt.Polygon(
            xy=list_square_coords,
            alpha=1,
            fill=True,
            facecolor=hex_color,
            edgecolor='black',
            linestyle='solid',
            linewidth=1
        )
    )

    graph.text(x=cell_position_x + color_square_width + 5, y=cell_position_y,
               s='{color_keyword}'.format(color_keyword=color_keyword),
               fontsize=10,
               horizontalalignment='left',
               verticalalignment='bottom')

    cell_y = cell_y + 1
    if cell_y > nrows:
        cell_y = 0
        cell_x = cell_x + 1

    cell_position_x = cell_width * cell_x
    cell_position_y = cell_height * cell_y + margin * cell_y


plt.show()

 

 

그 결과는 위와 같으며 이걸 보고 Color Keyword를 유용하게 선택할 수 있습니다.

 

 

 

 

 

또 다른 방식으로 아래처럼 구성할 수도 있습니다.

 

import matplotlib


dict_colors = matplotlib.colors.CSS4_COLORS

# hex code 기준으로 오름차순 정렬
list_colors = sorted(dict_colors.items(), key=lambda x: x[1], reverse=False)
dict_colors = dict(list_colors)


for color_keyword, color_hex_code in dict_colors.items():
    color_hex_code = color_hex_code.replace('#', '')  # hex code에서 # 삭제

    hex_r = color_hex_code[0:2]  # hex code에서 Red 성분 추출
    hex_g = color_hex_code[2:4]  # hex code에서 Green 성분 추출
    hex_b = color_hex_code[4:6]  # hex code에서 Blue 성분 추출

    rgb_r = int(hex_r, base=16)  # 16진수를 10진수로 변환
    rgb_g = int(hex_g, base=16)  # 16진수를 10진수로 변환
    rgb_b = int(hex_b, base=16)  # 16진수를 10진수로 변환

    str_color_into = 'Color Keyword = {ck} / Hex Code = {hex_code} / RGB = ({r}, {g}, {b})'.format(
        ck=color_keyword,
        hex_code=color_hex_code,
        r=rgb_r,
        g=rgb_g,
        b=rgb_b
    )
    print(
        '\033[48;2;{r};{g};{b}m{text}\033[0m'.format(
            r=rgb_r,
            g=rgb_g,
            b=rgb_b,
            text='          '
        ),
        str_color_into
    )

 

 

그러면 위처럼 터미널에서 다양한 색상을 볼 수 있죠.

 

 

 

 

 

이와 관련된 내용을 다룬 matplotlib document가 있습니다.

 

https://matplotlib.org/stable/gallery/color/named_colors.html

 

List of named colors — Matplotlib 3.8.3 documentation

List of named colors This plots a list of the named colors supported by Matplotlib. For more information on colors in matplotlib see Helper Function for Plotting First we define a helper function for making a table of colors, then we use it on some common

matplotlib.org

 

 

위 링크를 보면 이렇게 색상값을 보기 좋게 정리해주고 있으니 참고해서 사용하면 됩니다.

 

 

 

 

 

728x90
반응형
Comments