Я пытаюсь создать гистограмму с ячейками по оси X переменной ширины в Seaborn. Подобно этой диаграмме: Все мои значения ширины x будут в сумме составлять 100%, но я не могу найти пример того, как достичь этой цели с помощью Seaborn. Любые идеи?
Гистограмма переменной ширины с морским дном
Ответы (2)
Вероятно, здесь может быть несколько возможных ответов. В морской гистограмме для этой цели можно использовать комбинацию нескольких параметров: "width" (значения ширины столбцов), "left" (значения расположения по оси X, что является обязательным аргументом) и "align ".
Очень простой пример:
import seaborn as sns
data = [7, 3, 15]
widths = [1, 5, 3]
left = [0, 1, 6]
sns.plt.bar(left, data, width = widths, color=('orange','green','blue'),
alpha = 0.6, align='edge', edgecolor = 'k', linewidth = 2)
Обратите внимание, что «слева» (расположение столбцов) должно соответствовать ширине, чтобы столбцы просто соприкасались, а не перекрывались.
person
BossaNova
schedule
17.10.2017
Используя
sns.plt.bar
, вы вызываете функцию matplotlibs plt.bar
. Это не имеет ничего общего с мореплавателем.
- person ImportanceOfBeingErnest; 18.10.2017
Если вы хотите использовать Seaborn для гистограммы, вам необходимо впоследствии изменить ширину прямоугольников полос (патчей) (это делается через объектно-ориентированный интерфейс matplotlib согласно этот ответ):
import seaborn as sns
iris = sns.load_dataset('iris')
ax = sns.barplot('species', 'sepal_width', data=iris)
widthbars = [0.3, 0.6, 1.2]
for bar, newwidth in zip(ax.patches, widthbars):
x = bar.get_x()
width = bar.get_width()
centre = x + width/2.
bar.set_x(centre - newwidth/2.)
bar.set_width(newwidth)
Вы также можете создать аналогичную гистограмму напрямую в matplotlib:
import matplotlib.pyplot as plt
widths = [0.3, 0.6, 1.2]
for x_pos, (species_name, species_means) in enumerate(iris.groupby('species').mean().groupby('species')):
plt.bar(x_pos, species_means['sepal_width'], widths[x_pos])
person
joelostblom
schedule
18.10.2017
pyplot.bar
. - person ImportanceOfBeingErnest   schedule 18.10.2017