python seaborn: одновременная настройка линейного графика и диаграммы рассеяния (также легенды) - PullRequest
0 голосов
/ 05 августа 2020
df = pd.DataFrame({
           'id': {0: -3, 1: 2, 2: -3, 3: 1},
           'val': {0: 0.4, 1: 0.03, 2: 0.88, 3: 1.3},
           'indicator': {0: 'A', 1: 'A', 2: 'B', 3: 'B'},
           'count': {0: 40000, 1: 5779, 2: 3000, 3: 31090}
          })
df

и я надеюсь получить такой сюжет: enter image description here

I know with code of following, I can get a close plot but I want to have the line size also varies with "count" variable, but when I tried to add size = 'count', I did not get a meaningful plot and also for the legend, I want to only have one legend for "indicator" rather than two:

plt.figure()
sns.lineplot(x = 'id', y = 'val', hue = 'indicator', data = df)
sns.scatterplot(x = 'id', y = 'val', hue = 'indicator', size = 'count', data = df)

введите описание изображения здесь

1 Ответ

0 голосов
/ 06 августа 2020

Чтобы ответить на вторую часть вашего вопроса - вы можете отключить легенду линейного графика следующим образом:

sns.lineplot(x = 'id', y = 'val', hue = 'indicator', data = df, legend=False)

Это оставит вам две группы легенд - одну для цветов и одну для размеров. Это самый простой способ, но вы также можете повозиться с plt.legend() и построить свои собственные с нуля.

Что касается динамического изменения толщины линий от одной точки к другой, я не думаю, что вы сможете сделайте это с помощью seaborn. Для чего-то подобного вам понадобится библиотека более низкого уровня, например bokeh, или используйте matplotlib напрямую, чтобы рисовать соединительные линии между линейными маркерами, корректируя их размер.

...