สีที่มีชื่อใน matplotlib


259

matplotlib มีสีอะไรบ้างที่มีชื่อสำหรับใช้ในแปลง? ฉันสามารถค้นหารายการในเอกสาร matplotlib ที่อ้างว่าเป็นเพียงชื่อเท่านั้น:

b: blue
g: green
r: red
c: cyan
m: magenta
y: yellow
k: black
w: white

อย่างไรก็ตามฉันพบว่าสีเหล่านี้สามารถใช้งานได้อย่างน้อยในบริบทนี้:

scatter(X,Y, color='red')
scatter(X,Y, color='orange')
scatter(X,Y, color='darkgreen')

แต่สิ่งเหล่านี้ไม่ได้อยู่ในรายการด้านบน ไม่มีใครรู้รายการสีที่มีชื่อที่มีอยู่อย่างละเอียด


4
โดยพื้นฐานแล้วมันคือชื่อสี HTML ทั้งหมดดังนั้นคุณจึงสามารถเพียงแค่ google "HTML colors" ถ้าคุณต้องการชาร์ตที่ดีหลาย ๆ คำตอบที่ยอดเยี่ยมของ @BoshWash ด้านล่างให้รายการที่แน่นอนแก่คุณ
Joe Kington

14
นอกจากนี้ยังมีภาพสวย ๆ ที่matplotlib.org

นั่นเป็นภาพที่ดีฉันน่าจะสังเกตได้ เพื่อความเป็นธรรมมันถูกโพสต์เดือนก่อนที่ฉันโพสต์คำถามนี้และฉันค่อนข้างแน่ใจว่าฉันค้นหาเอกสารหลายครั้งก่อนแล้วสำหรับคำตอบสำหรับคำถามนี้
TC Proctor

คำตอบ:


303

ฉันลืมชื่อสีที่ฉันต้องการใช้อย่างต่อเนื่องและกลับมาที่คำถามนี้ =)

คำตอบก่อนหน้านั้นยอดเยี่ยม แต่ฉันคิดว่ามันยากหน่อยที่จะได้ภาพรวมของสีที่มีอยู่จากภาพที่โพสต์ ฉันชอบสีที่จะจัดกลุ่มด้วยสีที่คล้ายกันดังนั้นฉันจึงปรับแต่งคำตอบ matplotlibเล็กน้อยที่กล่าวถึงในความคิดเห็นด้านบนเพื่อรับรายการสีที่เรียงลำดับในคอลัมน์ คำสั่งซื้อนั้นไม่เหมือนกับที่ฉันจะเรียงลำดับด้วยตา แต่ฉันคิดว่ามันให้ภาพรวมที่ดี

ฉันอัปเดตรูปภาพและรหัสเพื่อแสดงว่ามีการเพิ่ม 'rebeccapurple' และสีของปราชญ์ทั้งสามถูกย้ายไปอยู่ภายใต้คำนำหน้า 'xkcd:' ตั้งแต่ฉันโพสต์คำตอบนี้มา แต่เดิม

ป้อนคำอธิบายรูปภาพที่นี่

ฉันไม่ได้เปลี่ยนแปลงอะไรมากมายจากตัวอย่าง matplotlib แต่นี่คือรหัสสำหรับความสมบูรณ์

import matplotlib.pyplot as plt
from matplotlib import colors as mcolors


colors = dict(mcolors.BASE_COLORS, **mcolors.CSS4_COLORS)

# Sort colors by hue, saturation, value and name.
by_hsv = sorted((tuple(mcolors.rgb_to_hsv(mcolors.to_rgba(color)[:3])), name)
                for name, color in colors.items())
sorted_names = [name for hsv, name in by_hsv]

n = len(sorted_names)
ncols = 4
nrows = n // ncols

fig, ax = plt.subplots(figsize=(12, 10))

# Get height and width
X, Y = fig.get_dpi() * fig.get_size_inches()
h = Y / (nrows + 1)
w = X / ncols

for i, name in enumerate(sorted_names):
    row = i % nrows
    col = i // nrows
    y = Y - (row * h) - h

    xi_line = w * (col + 0.05)
    xf_line = w * (col + 0.25)
    xi_text = w * (col + 0.3)

    ax.text(xi_text, y, name, fontsize=(h * 0.8),
            horizontalalignment='left',
            verticalalignment='center')

    ax.hlines(y + h * 0.1, xi_line, xf_line,
              color=colors[name], linewidth=(h * 0.8))

ax.set_xlim(0, X)
ax.set_ylim(0, Y)
ax.set_axis_off()

fig.subplots_adjust(left=0, right=1,
                    top=1, bottom=0,
                    hspace=0, wspace=0)
plt.show()

สีที่มีชื่อเพิ่มเติม

อัปเดตเมื่อวันที่ 2017-10-25 ฉันรวมการอัปเดตก่อนหน้าของฉันในส่วนนี้

xkcd

หากคุณต้องการใช้สีที่มีชื่อเพิ่มเติมเมื่อทำการพล็อตด้วย matplotlib คุณสามารถใช้ชื่อสี xkcd crowdsourcedผ่านคำนำหน้า 'xkcd:'

plt.plot([1,2], lw=4, c='xkcd:baby poop green')

ตอนนี้คุณสามารถเข้าถึงสีที่มีชื่อมากมาย!

ป้อนคำอธิบายรูปภาพที่นี่

ฉาก

สีของ Tableau เริ่มต้นมีให้บริการใน matplotlib ผ่านทางหน้าแท็บ ':'

plt.plot([1,2], lw=4, c='tab:green')

มีสิบสีที่แตกต่าง:

ป้อนคำอธิบายรูปภาพที่นี่

HTML

คุณสามารถพล็อตสีได้ด้วยรหัสฐานสิบหก HTML :

plt.plot([1,2], lw=4, c='#8f9805')

นี่คล้ายกับการระบุและ RGB tuple มากกว่าสีที่ตั้งชื่อ (นอกเหนือจากความจริงที่ว่ารหัสฐานสิบหกถูกส่งผ่านเป็นสตริง) และฉันจะไม่รวมภาพ 16 ล้านสีที่คุณสามารถเลือกได้ ...


สำหรับรายละเอียดเพิ่มเติมโปรดดูที่เอกสารสี matplotlib_color_data.pyและแฟ้มแหล่งที่มาระบุสีที่มีอยู่



ขอบคุณสำหรับพล็อต! จากความอยากรู้อยากเห็น 'y' แตกต่างจาก 'สีเหลือง' หรือไม่? พล็อตแรกมีพวกเขาเป็นสีที่แตกต่าง
วิทยาศาสตร์คอมพิวเตอร์

1
@ComputerScientist ใช่ตามปัญหา Github นี้และการอภิปรายรายการ Mailling ที่เชื่อมโยงสีตัวอักษรเดียวได้รับการกำหนดค่า RBG ตาม Matlab คู่ของพวกเขาในขณะที่ชื่อเต็มสอดคล้องกับสี HTML Matlab สีตัวอักษรเดียวในขณะนี้ยังเป็นไปตามมาตรฐาน HTML ดังนั้นฉันไม่แน่ใจว่านั่นคือการเปลี่ยนแปลง Matlab เมื่อเร็ว ๆ นี้หรือหากสีตัวอักษรเดียวของ matplotlib ถูกปรับเปลี่ยน / เลือกด้วยเหตุผลเช่นการมองเห็นซึ่งถูกกล่าวถึงในการอภิปรายด้วย
joelostblom

@AdrianTorrie: คุณสามารถให้รางวัลความโปรดปรานของคุณเองในฐานะ 'ขอบคุณ' เพิ่มเติม! รางวัลที่ได้รับรางวัลสุดยอดไฮไลท์คำตอบนี้และให้คะแนนผู้ตอบเพิ่มเติม
SherylHohman

ขอขอบคุณที่รักษาข้อมูลให้ทันสมัยอยู่เสมอ!
JakeCowton

@joelostblom ในพล็อตของสี xkcd คุณได้รับรหัสฐานสิบหกเพื่อแสดงเป็นสีเทาข้างชื่อสี (สีดำ) ได้อย่างไร?
MMelnicki

312

Matplotlib ใช้พจนานุกรมจากโมดูล colors.py

หากต้องการพิมพ์ชื่อให้ใช้:

# python2:

import matplotlib
for name, hex in matplotlib.colors.cnames.iteritems():
    print(name, hex)

# python3:

import matplotlib
for name, hex in matplotlib.colors.cnames.items():
    print(name, hex)

นี่คือพจนานุกรมที่สมบูรณ์:

cnames = {
'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',
'darkkhaki':            '#BDB76B',
'darkmagenta':          '#8B008B',
'darkolivegreen':       '#556B2F',
'darkorange':           '#FF8C00',
'darkorchid':           '#9932CC',
'darkred':              '#8B0000',
'darksalmon':           '#E9967A',
'darkseagreen':         '#8FBC8F',
'darkslateblue':        '#483D8B',
'darkslategray':        '#2F4F4F',
'darkturquoise':        '#00CED1',
'darkviolet':           '#9400D3',
'deeppink':             '#FF1493',
'deepskyblue':          '#00BFFF',
'dimgray':              '#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',
'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',
'lightgreen':           '#90EE90',
'lightgray':            '#D3D3D3',
'lightpink':            '#FFB6C1',
'lightsalmon':          '#FFA07A',
'lightseagreen':        '#20B2AA',
'lightskyblue':         '#87CEFA',
'lightslategray':       '#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',
'red':                  '#FF0000',
'rosybrown':            '#BC8F8F',
'royalblue':            '#4169E1',
'saddlebrown':          '#8B4513',
'salmon':               '#FA8072',
'sandybrown':           '#FAA460',
'seagreen':             '#2E8B57',
'seashell':             '#FFF5EE',
'sienna':               '#A0522D',
'silver':               '#C0C0C0',
'skyblue':              '#87CEEB',
'slateblue':            '#6A5ACD',
'slategray':            '#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'}

คุณสามารถพล็อตพวกเขาเช่นนี้:

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.colors as colors
import math


fig = plt.figure()
ax = fig.add_subplot(111)

ratio = 1.0 / 3.0
count = math.ceil(math.sqrt(len(colors.cnames)))
x_count = count * ratio
y_count = count / ratio
x = 0
y = 0
w = 1 / x_count
h = 1 / y_count

for c in colors.cnames:
    pos = (x / x_count, y / y_count)
    ax.add_patch(patches.Rectangle(pos, w, h, color=c))
    ax.annotate(c, xy=pos)
    if y >= y_count-1:
        x += 1
        y = 0
    else:
        y += 1

plt.show()

1
ขอบคุณสำหรับคำตอบนั่นคือสิ่งที่ฉันกำลังมองหา ฉันคิดว่าเมื่อรวมกับความคิดเห็นของ @Joe Kington ฐานทั้งหมดจะถูกครอบคลุม
TC Proctor

คุณสามารถหาค่า RGB ได้ที่นี่: flask.sagenb.org/src/plot/colors.py
pceccon

หากคุณต้องการดูรายการสีของชื่อออนไลน์อย่างรวดเร็ว: matplotlib.org/examples/color/named_colors.html
BallpointBen


10

ในการรับรายการสีทั้งหมดเพื่อใช้ในแปลง:

import matplotlib.colors as colors
colors_list = list(colors._colors_full_map.values())

ดังนั้นคุณสามารถใช้วิธีดังกล่าวได้อย่างรวดเร็ว:

scatter(X,Y, color=colors_list[0])
scatter(X,Y, color=colors_list[1])
scatter(X,Y, color=colors_list[2])
...
scatter(X,Y, color=colors_list[-1])

นี่ไม่ได้เพิ่มอะไรที่คำตอบก่อนหน้านี้ไม่มี
TC Proctor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.