Лог-лог-график с морским сугробом

Я пытаюсь создать график loglog с KDE и гистограммой, связанной с каждой осью, с помощью морского объекта JointGrid. Это меня довольно близко, но гистограммы не переводят хорошо в логпространство. Есть ли способ сделать это легко, без необходимости воссоздавать маргинальные оси?

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

data = sns.load_dataset('tips')
g = sns.JointGrid('total_bill', 'tip', data)
g.plot_marginals(sns.distplot, hist=True, kde=True, color='blue')
g.plot_joint(plt.scatter, color='black', edgecolor='black')
ax = g.ax_joint
ax.set_xscale('log')
ax.set_yscale('log')
g.ax_marg_x.set_xscale('log')
g.ax_marg_y.set_yscale('log')

Output of plot

Ответы

Ответ 1

Для логарифмических гистограмм я считаю полезным использовать собственные бункеры с np.logspace().

mybins=np.logspace(0,np.log(100),100)

Затем просто установите bins= в _marginals

data = sns.load_dataset('tips')
g = sns.JointGrid('total_bill', 'tip', data,xlim=[1,100],ylim=[0.01,100])
g.plot_marginals(sns.distplot, hist=True, kde=True, color='blue',bins=mybins)
g.plot_joint(plt.scatter, color='black', edgecolor='black')
ax = g.ax_joint
ax.set_xscale('log')
ax.set_yscale('log')
g.ax_marg_x.set_xscale('log')
g.ax_marg_y.set_yscale('log')

enter image description here