На мой комментарий, если это то, что вы хотите, вам нужна Seaborn JointGrid для такого рода вещей. В приведенном ниже примере я просто использовал гистограмму distplot для маргиналов, но см. Документацию для различных типов примеров.
import seaborn as sns
cost=[50,40,30,20,10,50,50,50,50,50]
service=[60,30,25,10,20,60,30,25,10,20]
grid = sns.JointGrid(cost, service, space=0, height=6, ratio=20)
grid.plot_joint(sns.scatterplot, color="g")
grid.plot_marginals(sns.distplot, kde=False, color="r", bins=10)
grid.fig.axes[0].spines['left'].set_position(('data', 25))
grid.fig.axes[0].spines['bottom'].set_position(('data', 30))
grid.fig.axes[1].spines['bottom'].set_visible(False)
grid.fig.axes[2].spines['left'].set_visible(False)
plt.show(grid)
Вот что происходит с этим (я удвоил ваши данные сделать гистограмму немного интереснее). Когда вы создаете JointGrid, он создает объект JointGrid. Не фига или топоры. Объект JointPlot имеет рис, а этот рис имеет три оси. Оси [0] - это ось для основного графика, оси 1 - это ось для верхнего краевого графика, а оси [2] - это ось для правого маргинального графика. При манипулировании шипами для этих осей, имейте в виду, что оси ориентированы с изображением. То есть левый позвоночник по осям [2] - это позвоночник, который был бы нижним позвоночником, если бы этот график был обычным горизонтальным графиком.