Как назначить эти 20 случайных цветов 20 случайным парам x, y в Matplotlib? - PullRequest
0 голосов
/ 20 марта 2020

Это создает x и y длиной 20 и 20 RGB-триплетов. Я хотел бы назначить каждый цвет одной точке и начать с этого ответа и ответов на очень старый вопрос Как получить разноцветные линии для разных графиков на одной фигуре? .

Но вместо двадцати случайных точек случайных цветов я получаю этот странный вывод, который заставляет меня думать, что я больше ничего не понимаю.

Вопрос: Как можно ли назначить эти 20 случайных цветов 20 случайным парам x, y?

crazy plot

import numpy as np
import matplotlib.pyplot as plt

ran = np.random.random((5, 20))
x, y = ran[:2]
colors = ran[2:].T
print('colors.shape', colors.shape)
colors = [list(thing) for thing in colors] # removing this line doesn't affect the result

fig, ax = plt.subplots()
ax.plot(x, y, 'o', colors)   # ax.plot(x, y, 'o', color=colors) throws exception
plt.show()

Примечание: Если вместо Я пытаюсь ax.plot(x, y, 'o', color=colors) Я получаю ошибки:

File "/path/to/matplotlib/colors.py", line 177, in to_rgba
rgba = _to_rgba_no_colorcycle(c, alpha)
File "/path/to/matplotlib/colors.py", line 240, in _to_rgba_no_colorcycle
raise ValueError("Invalid RGBA argument: {!r}".format(orig_c))
ValueError: Invalid RGBA argument:

1 Ответ

0 голосов
/ 20 марта 2020

Непонятно, почему этот график выглядит так, как он, но то, что OP хотел попробовать , теперь показано как "неправильный путь" ниже.

Решение состоит в том, чтобы прекратить попытки назначить разные маркеры для каждого маркера в одной строке, а вместо этого создать точечный график, который и есть на самом деле!

wrong way right way

import numpy as np
import matplotlib.pyplot as plt

ran = np.random.random((6, 20))
x, y, s = ran[:3]
colors = ran[3:].T
print('colors.shape', colors.shape)
colors = [list(thing) for thing in colors]

fig, ax = plt.subplots()
ax.plot(x, y, 'o') 
for line, color in zip(ax.lines, colors):
        line.set_color(color)
ax.set_title('WRONG Way', fontsize=14)
plt.show()

fig, ax = plt.subplots()
ax.scatter(x, y, color=colors) 
ax.set_title('RIGHT Way', fontsize=14)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...