2015-02-10 3 views
16

Как я могу получить морские цвета при выполнении разброса?морской цикл через цвета с разбрасыванием matplotlib

import matplotlib.pyplot as plt 
import seaborn as sns 
ax=fig.add_subplot(111) 
for f in files: 
    ax.scatter(args) # all datasets end up same colour 
    #plt.plot(args) # cycles through palette correctly 
+0

Это «особенность», а не «ошибка» 'scatter' является' ScalarMappable', который означает, что вы можете назначить скалярное значение для каждого маркера, который будет, чем использовать (наряду с цветовой карты), чтобы цвет каждого маркера в соответствии со скалярным значением. Учитывая, что использование «рассеивания» в логике цветового цикла кажется глупым/слишком неудобным. Как побочная заметка, если вы не меняете размер маркеров, вероятно, лучше использовать 'plot' без строки (она будет идти быстрее). – tacaswell

+0

Спасибо за подсказку об использовании сюжета :) Я не предполагал, что это была ошибка, просто спрашивал, как это сделать. – amn41

ответ

30

Вы должны указать matplotlib, какой цвет использовать. Использовать, например, цвет по умолчанию палитра Сиборн в:

import matplotlib.pyplot as plt 
import seaborn as sns 
import itertools 
ax=fig.add_subplot(111) 

palette = itertools.cycle(sns.color_palette()) 

for f in files: 
    ax.scatter(args, color=next(palette)) 

itertools.cycle делает, что мы не кончатся цветов и начать с первой же после использования последним.

0

Чтобы построить на ответ Карстена, в если у вас есть большое количество категорий для назначения цвета, вы можете захотеть, чтобы пронестись цветами в очень большой Сиборне палитру, например xkcd_palette или crayon_palette .. Обратите внимание, что эта практика обычно a chartjunk anti-pattern: использование более 5-6 цветов обычно является излишним, и вам может потребоваться изменить тип диаграммы.

import matplotlib.pyplot as plt 
import seaborn as sns 

palette = zip(df['category'].unique(), sns.crayons.values()) 
Смежные вопросы