Как правильно создать сюжет для скрипки, в котором одна скрипка разделена по оттенку?

Как правильно создать скрипичный сюжет, в котором одна скрипка разделена на hue?

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

fig = plt.figure(figsize=(20, 8))

fig.add_subplot(1, 3, 1)
ax = sns.violinplot(x='feature', y='height',
              data=train_cleansed_height,
              scale='count',
              hue='feature', split=True,
              palette='seismic',
              inner='quartile')

fig.add_subplot(1, 3, 2)
ax = sns.violinplot(x='workaround', y='height',
              data=train_cleansed_height,
              scale='count',
              hue='feature', split=True,
              palette='seismic',
              inner='quartile')

fig.add_subplot(1, 3, 3)
ax = sns.violinplot(x=None, y='height',
              data=train_cleansed_height,
              scale='count',
              hue='feature', split=True,
              palette='seismic',
              inner='quartile')
plt.xlabel('x=None')

Но так ли это?

1 ответ

Решение

x аргумент seaborn.violinplot должны быть данные для позиции. Если требуется одна позиция, данные для x должен состоять из уникальной ценности. Если для x и hue, x будет дано два разных уникальных значения, следовательно, выбраны две позиции, как видно на первом графике.

Вместо этого используйте повторный ярлык, такой как

sns.violinplot(x=["some label"]*len(df),  ...) 

создать скрипичный сюжет на одной позиции.

import numpy as np;np.random.seed(1)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

a = np.concatenate((np.random.binomial(3,0.3,50)*2.2+1, np.random.rayleigh(3,50)))
df = pd.DataFrame({"height" : a, "feature" : ["A"]*50+["B"]*50})

fig = plt.figure()

fig.add_subplot(1, 2, 1)
ax = sns.violinplot(x='feature', y='height',
              data=df,
              scale='count',
              hue='feature', split=True,
              palette='seismic',
              inner='quartile')

fig.add_subplot(1, 2, 2)
ax = sns.violinplot(x=["AB"]*len(df), y='height',
              data=df,
              scale='count',
              hue='feature', split=True,
              palette='seismic',
              inner='quartile')

plt.tight_layout()
plt.show()

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

Другие вопросы по тегам