Я пытаюсь создать морскую FacetGrid, чтобы показать вероятности перехода между кластерами в некоторых данных, которые у меня есть. У данных есть группа субъектов и 4 кластера (так что каждый субъект имеет 16 точек данных, по одной для каждой пары старых и новых кластеров). Поскольку это вероятности, все значения, которые имеют один и тот же старый кластер (для каждого объекта), в сумме равны 1. Я хотел бы показать эти данные, используя точечный график FacetGrid (или составной столбчатый график, но это не представляется возможным с морским борном), например что каждый старый кластер - это отдельный столбец, новый кластер - это отдельный оттенок, и каждый аспект показывает субъект против вероятности.
Вот код для создания игрушечного DataFrame с теми же функциями, что и у меня, а также код для фасетной сетки, которую я хотел бы создать. Однако, когда я все это делаю, легенда пуста.
df,index = [],0
for subj in [1,2]:
for i,j in itertools.product(range(4),range(4)):
df.append(pd.DataFrame(index=[index],data=dict(subject=subj,old=i,new=j,prob=[.23,.24,.26,.27][j])))
index+=1
df = pd.concat(df)
g = sns.FacetGrid(df,col='old',hue='new',margin_titles=False,legend_out=True)
g.map(sns.pointplot,'subject','prob',join=False)
g.add_legend()
Глядя на g._legend_data
, видно, что он пуст, и каждая из функций get_legend_handles_labels()
осей ничего не возвращает. В чем дело?
Я не могу опубликовать изображение своего сюжета, потому что у меня нет 10 репутации; название легенды появляется справа, но в ней ничего нет ...
РЕДАКТИРОВАТЬ: Кроме того, я хотел бы немного уклониться от значений, но g.map(sns.pointplot,'subject','prob',join=False,dodge=.1)
выглядит точно так же, как указано выше, для множества различных значений уклонения ...
РЕДАКТИРОВАТЬ 2: Получается, что при использовании sns.factorplot
вместо FacetGrid работают легенда и уклонение. Единственное, что я не могу сделать с помощью sns.factorplot, - это повернуть метки xtick, но это все равно не работает с col_wrap
в Facet Grid ... Почему у FacetGrid такая проблема?