Как контролировать, какая линия получает какой маркер на многострочном участке моря? - PullRequest
0 голосов
/ 21 марта 2020

Я не могу контролировать, какая категория данных получает какой маркер на многострочных графиках в морском заливе. Чтобы продемонстрировать, что я пытаюсь сделать здесь, это надуманный пример -

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(style="ticks")
sns.set_context("paper", rc={"font.size":8,"axes.titlesize":20,"axes.labelsize":15})
fig, ax = plt.subplots()

df = pd.DataFrame({'A': [1,2,3,4,1,2,3,4,1,2,3,4], 'B': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c'], 'C': [1,1,3,4,1,1,3,3,1,1,2,3]})

sns.lineplot(x='A', y='C', hue='B', hue_order=['c', 'b', 'a'], markers=[{'c': 'X', 'b': 's', 'a': 'o'}], palette={'a': 'Orange', 'b': 'Green', 'c': 'Red'}, dashes=False, data=df, markers=True, ax=ax)

plt.title('A Plot')
ax.set(xlabel='Time', ylabel='#')
ax.legend(title='Legend', loc='upper left', labels=['A', 'B', 'C'])
ax.set(xticks=df['A'].values)
plt.gca().set_position([0, 0, 1, 1])
plt.show()

Но изображение отображается без каких-либо маркеров - no markers in plot

Когда я делаю style='B' Я получаю следующую ошибку -

ValueError: These `style` levels are missing markers: {'b', 'c'}

Я экспериментировал с style_order=['a', 'b', 'c'], но получил тот же график, что и выше.

Как я могу получить маркеры с правильной линией сюжета?

1 Ответ

0 голосов
/ 22 марта 2020

Вы должны предоставить и hue="B" и style="B", а затем предоставить словарь для markers={...} (вы фактически передали список, содержащий словарь в вашем коде).

sns.lineplot(x='A', y='C', hue='B', style='B', data=df, hue_order=['c', 'b', 'a'], markers={'c': 'X', 'b': 's', 'a': 'o'}, dashes=False, palette={'a': 'Orange', 'b': 'Green', 'c': 'Red'})

enter image description here

...