2016-11-21 1 views
4

Я пытаюсь создать коробку с использованием морского дна с различными группами x и дополнительно hues. Смотрите этот код:Коробка с морским ящиком + swarmplot: другой цвет для x, другой символ для оттенков

tips = sns.load_dataset("tips") 

sns.stripplot(x="day", y="total_bill", hue="smoker", 
       data=tips, jitter=True, 
       palette="Set2", split=True,linewidth=1,edgecolor='gray') 

sns.boxplot(x="day", y="total_bill", hue="smoker", 
      data=tips,palette="Set2",fliersize=0) 

enter image description here

Я хотел бы иметь каждый x присуща рефлективными, вербальные (в этом примере, каждый день) будет другим цветом, в то время как каждый hue (в данном случае, курильщик/некурящего), который должен быть представлен другим символом на плаву.

Я попытался сыграть с аргументом palette, но не получил то, что хотел. Я также попытался сыграть с artists, но изменение facecolor в коробке также по какой-то причине меняет edgecolor, и я не знаю, как изменить символы на swarmplot в любом случае.

ответ

0

К цветной части вашего вопроса: как edgecolor, так и facecolor можно указать отдельно через исполнителя.

ax = sns.boxplot(x="day", y="total_bill", hue="smoker", 
      data=tips,fliersize=0) 

colors = sns.color_palette('husl',n_colors=4) 
colors = sp.repeat(colors,2,axis=0) 

for artist,color in zip(ax.artists,colors): 
    artist.set_facecolor(color) 
    artist.set_edgecolor(color) 

А также для стриптиза: я также не мог найти способ, как случайный создатель. Вы можете получить их все индивидуально по [pc for pc in ax.get_children() if type(pc) == PathCollection], если вы хотите указать их цвета и т. Д.