Предположим, у меня есть три набора данных:
X = [1,2,3,4]
Y1 = [4,8,12,16]
Y2 = [1,4,9,16]
Я могу разбросать сюжет так:
from matplotlib import pyplot as plt
plt.scatter(X,Y1,color='red')
plt.scatter(X,Y2,color='blue')
plt.show()
Как я могу сделать это с 10 сетами?
Я искал это и мог найти любую ссылку на то, что я спрашиваю.
Изменить: прояснить (надеюсь) мой вопрос
Если я вызываю Scatter несколько раз, я могу установить только один и тот же цвет для каждого Scatter. Кроме того, я знаю, что могу установить цветовой массив вручную, но я уверен, что есть лучший способ сделать это. Тогда мой вопрос: «Как я могу автоматически распределить и построить несколько наборов данных, каждый из которых имеет свой цвет?
Если это поможет, я могу легко присвоить уникальный номер каждому набору данных.
python
matplotlib
scatter-plot
Yotam
источник
источник
Ответы:
Я не знаю, что вы подразумеваете под «вручную». Вы можете выбрать цветовую карту и создать массив цветов достаточно легко:
Или вы можете сделать свой собственный цветовой цикл, используя
itertools.cycle
и задавая цвета, которые вы хотите зациклить, используя,next
чтобы получить тот, который вы хотите. Например, с 3 цветами:Если подумать, может быть,
zip
с первым не будет чище :источник
plt.legend(['c{}'.format(i) for i in range(len(ys))], loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0., fontsize=11)
к основанию вышеизложенного дает мне легенду с цветами.Обычный способ построения графиков с точками разных цветов в matplotlib - передать список цветов в качестве параметра.
Например:
Когда у вас есть список списков, и вы хотите, чтобы они были цветными для каждого списка. Я думаю, что самый элегантный способ - это то, что предложено @DSM, просто сделать цикл, делающий множественные вызовы для разброса.
Но если по какой-то причине вы хотели сделать это всего одним вызовом, вы можете составить большой список цветов с пониманием списка и небольшим разделением по полу:
источник
Легко исправить
Если у вас есть только один тип коллекций (например, разброс без полос ошибок), вы также можете изменить цвета после того, как вы нанесете их на график, это иногда проще выполнить.
Единственный фрагмент кода, который вам нужен:
Вывод дает различные цвета, даже если у вас есть много разных графиков рассеяния в одном и том же участке.
источник
Вы всегда можете использовать
plot()
функцию так:источник
Этот вопрос немного сложен до января 2013 года и matplotlib 1.3.1 (август 2013 года), который является самой старой стабильной версией, которую вы можете найти на веб-сайте matpplotlib. Но после этого это довольно тривиально.
Потому что настоящая версия
matplotlib.pylab.scatter
поддерживает присваивание: массив строки имени цвета, массив числа с плавающей точкой с картой цветов, массив RGB или RGBA.Этот ответ посвящен бесконечной страсти @ Oxinabox к исправлению своей версии 2013 года в 2015 году.
у вас есть два варианта использования команды разброса с несколькими цветами в одном вызове.
в качестве
pylab.scatter
поддержки команд используйте массив RGBA, чтобы сделать любой цвет, который вы хотите;в начале 2013 года сделать это невозможно, поскольку команда поддерживает только один цвет для всей совокупности точек разброса. Когда я делал свой проект на 10000 строк, я придумал общее решение, чтобы обойти его. так что это очень липко, но я могу сделать это в любой форме, цвете, размере и прозрачности. этот трюк также может быть применен для рисования коллекции пути, линии строки ....
код также вдохновлен исходным кодом
pyplot.scatter
, я просто продублировал то, что делает Scatter, не вызывая его для рисования.команда
pyplot.scatter
возвращаетPatchCollection
объект, в файле "matplotlib / collection.py" частная переменная_facecolors
вCollection
классе и методset_facecolors
.поэтому, когда у вас есть точки разброса, вы можете сделать это:
источник
Это работает для меня:
для каждой серии используйте генератор случайных цветов RGB
источник
plt.scatter(your values to the graph, color= (np.random.random_sample(), np.random.random_sample(), np.random.random_sample()) )
. Вы упомянули генератор RGB и объявили список RGB, генераторы объявлены между '()'НАМНОГО более быстрое решение для большого набора данных и ограниченного количества цветов - это использование Pandas и функции groupby:
источник