Python - Seaborn Скрипичный сюжет, не делаю то, что хочу - PullRequest
0 голосов
/ 06 июня 2018

Я смотрю на примеры, но все требует информационного кадра.

Если у меня есть следующий информационный кадр:

x = ["G","F","E","D","C","B"]
y = [3,14,45,47,34,15]

df = pd.DataFrame(
    {'Band': x,
     'Count': y,
    })

Я хочу создать скрипичный сюжет, используя Count в качествезначение и Band как шаги, поэтому я сделал это:

ax = sns.violinplot( y="Count", data=df)

, который производит это:

enter image description here

ОднакоЯ хочу иметь Bands на y axis, а затем Count быть размером выпуклости для каждой оценки.Вы должны использовать continuous values только на y axis?

Редактировать:

Как я хочу, чтобы это выглядело:

enter image description here

1 Ответ

0 голосов
/ 06 июня 2018

Графики скрипки обычно используются для отображения плотности ядра набора данных.Непонятно, какой должна быть плотность ядра дискретного набора данных, но вы, конечно, можете считать, что ваш дискретный случай является непрерывным, сопоставив буквы "B", "C", "D", ... с целыми числами 0,1,2,... и затем нанеся на карту скрипку.

import matplotlib.pyplot as plt
import seaborn as sns

x = ["G","F","E","D","C","B"]
y = [3,14,45,47,34,15]

data = []
for i, yi in enumerate(y):
    data.extend([i]*yi)

sns.violinplot(y=data)
plt.yticks(range(len(x)), x)
plt.show()

enter image description here

Это дает общий совет о распределении писем.Однако для количественного использования, скорее всего, лучше построить гистограмму.

import matplotlib.pyplot as plt
import numpy as np

x = ["G","F","E","D","C","B"]
y = [3,14,45,47,34,15]

plt.barh(np.arange(len(x)), y)
plt.yticks(np.arange(len(x)), x)
plt.show()

enter image description here

Теперь вы, конечно, можете стилизовать эту гистограмму таким образом, чтобыпохожа на скрипку, или, может быть, назовите ее «сюжет рождественского дерева».

import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import numpy as np

x = ["G","F","E","D","C","B"]
y = [3,14,45,47,34,15]

plt.barh(np.arange(len(x)), y, height=1, color="C0")
plt.barh(np.arange(len(x)), -np.array(y), height=1, color="C0")

plt.yticks(np.arange(len(x)), x)

# create strictly positive ticklabels
posfmt = mticker.FuncFormatter(lambda x,_: "{:g}".format(np.abs(x)))
plt.gca().get_xaxis().set_major_formatter(posfmt)
plt.show()

enter image description here

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