使用十六进制值绘制颜色的网格

问题描述 投票:0回答:1

我有代表不同颜色的十六进制值列表。

我如何用颜色网格表示这些十六进制值。也就是说,可视化每个十六进制值的颜色。

谢谢。

python colors hex seaborn
1个回答
0
投票

使用seaborn,最直接的方法可能是使用'sns.palplot()',例如:

import seaborn as sns

sns.set()

def hex_to_rgb(hex_value):
  h = hex_value.lstrip('#')
  return tuple(int(h[i:i + 2], 16) / 255.0 for i in (0, 2, 4))

hex_colors = [
  '#f0787e', '#f5a841', '#5ac5bc', '#ee65a3', '#f5e34b', '#640587', '#c2c36d',
  '#2e003a', '#878587', '#d3abea', '#f2a227', '#f0db08', '#148503', '#0a6940',
  '#043834', '#726edb', '#db6e6e', '#db6ecb', '#6edb91'
]

rgb_colors = list(map(hex_to_rgb, hex_colors))

sns.palplot(rgb_colors)

((this answer功能的信用为hex_to_rgb()

这将导致一行彩色正方形。要将其分成多行,如果有很多条目,可以简单地多次调用sns.palplot(),但这会导致布局奇怪,因为行之间的空间会比列之间的空间大,例如:

row_size = 5
rows = [rgb_colors[i:i + row_size] for i in range(0, len(rgb_colors), row_size)]

for row in rows:
  sns.palplot(row)

另一个选项可能是模仿sns.palplot()的行为(请参阅source code)并创建子图

# Make sure the last row has the same number of elements as the other ones by
# filling it with a default color (white).
rows[-1].extend([(1.0, 1.0, 1.0)] * (row_size - len(rows[-1])))

num_rows = len(rgb_colors) // row_size + 1

f, plots = plt.subplots(num_rows, 1)
plt.subplots_adjust(hspace=0.0)
for i in range(num_rows):
  plot = plots[i]
  plot.imshow(np.arange(row_size).reshape(1, row_size),
              cmap=mpl.colors.ListedColormap(rows[i]),
              interpolation="nearest", aspect="auto")
  plot.set_xticks(np.arange(row_size) - .5)
  plot.set_yticks([-.5, .5])
  plot.set_xticklabels([])
  plot.set_yticklabels([])

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.