Добавьте метки категорий оттенков в морской полоса - PullRequest
3 голосов
/ 05 марта 2019

У меня есть два DataFrames, которые я строю как полосу. Я могу нарисовать их практически так, как мне хочется, но я хотел бы знать, возможно ли добавить метки категорий для "оттенка".

Сюжет в настоящее время выглядит так:

Example plot.

Однако я хотел бы добавить метки категорий (их всего две) к каждому «столбцу» для каждой буквы. Чтобы это выглядело примерно так:

enter image description here

DataFrames выглядят так (хотя это только отредактированные фрагменты):

     Case Letter Size Weight
0   upper      A   20   bold
1   upper      A   23   bold
2   lower      A   61   bold
3   lower      A   62   bold
4   upper      A   78   bold
5   upper      A   95   bold
6   upper      B   23   bold
7   upper      B   40   bold
8   lower      B   47   bold
9   upper      B   59   bold
10  upper      B   61   bold
11  upper      B   99   bold
12  lower      C   23   bold
13  upper      D   23   bold
14  upper      D   66   bold
15  lower      D   99   bold
16  upper      E    5   bold
17  upper      E   20   bold
18  upper      E   21   bold
19  upper      E   22   bold

... и ...

     Case Letter Size  Weight
0   upper      A    4  normal
1   upper      A    6  normal
2   upper      A    7  normal
3   upper      A    8  normal
4   upper      A    9  normal
5   upper      A   12  normal
6   upper      A   25  normal
7   upper      A   26  normal
8   upper      A   38  normal
9   upper      A   42  normal
10  lower      A   43  normal
11  lower      A   57  normal
12  lower      A   90  normal
13  upper      B    4  normal
14  lower      B    6  normal
15  upper      B    8  normal
16  upper      B    9  normal
17  upper      B   12  normal
18  upper      B   21  normal
19  lower      B   25  normal

Соответствующий код у меня есть:

fig, ax = plt.subplots(figsize=(10, 7.5))
plt.tight_layout()

sns.stripplot(x=new_df_normal['Letter'], y=new_df_normal['Size'], 
              hue=new_df_normal['Case'], jitter=False, dodge=True, 
              size=8, ax=ax, marker='D',
              palette={'upper': 'red', 'lower': 'red'})

plt.setp(ax.get_legend().get_texts(), fontsize='16') # for legend text
plt.setp(ax.get_legend().get_title(), fontsize='18') # for legend title

ax.set_xlabel("Letter", fontsize=20)
ax.set_ylabel("Size", fontsize=20)
ax.set_ylim(0, 105)
ax.tick_params(labelsize=20)

ax2 = ax.twinx()

sns.stripplot(x=new_df_bold['Letter'], y=new_df_bold['Size'], 
              hue=new_df_bold['Case'], jitter=False, dodge=True, 
              size=8, ax=ax2, marker='D',
              palette={'upper': 'green', 'lower': 'green'})

ax.legend_.remove()
ax2.legend_.remove()

ax2.set_xlabel("", fontsize=20)
ax2.set_ylabel("", fontsize=20)
ax2.set_ylim(0, 105)
ax2.tick_params(labelsize=20)

Можно ли добавить эти метки категорий ("полужирный" и "обычный") для каждого столбца?

1 Ответ

1 голос
/ 05 марта 2019

Используя график рассеяния Seaborn, вы можете получить доступ к параметру style (или даже size).Но вы можете не закончить с вашим предполагаемым макетом в конце. документация scatterplot .

Или вы можете использовать catplot и играть со строками и столбцами. seaborn doc для catplot

К сожалению, Seaborn не обеспечивает изначально то, что вы ищете: еще один уровень вложенности, кроме параметра hue в stripplot (см. документацию по Stripplot . Открыты некоторые билеты на морское побережье, которые могут быть связаны, например, этот билет . Но я получил несколько похожих запросов о возможностях в seaborn, которые были отклонены, см. этот билет

Последняя возможность - погрузиться в примитивы matplotlib, чтобы манипулировать вашей диаграммой морского происхождения (так как морская волна находится только на вершине matplotlib). Само собой разумеется, что это потребует больших усилий и может привести к аннулированию морского рожка впервое место;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...