Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 顶部带有分布大小直方图的箱线图(和中值回归)_Python_Matplotlib_Histogram_Seaborn_Boxplot - Fatal编程技术网

Python 顶部带有分布大小直方图的箱线图(和中值回归)

Python 顶部带有分布大小直方图的箱线图(和中值回归),python,matplotlib,histogram,seaborn,boxplot,Python,Matplotlib,Histogram,Seaborn,Boxplot,我试图创建一个分组的箱线图,表示不同大小的多个分布。这些尺寸应显示在顶部的柱状图中 我当前的代码: import matplotlib.pyplot as plt import seaborn as sns import numpy as np import numpy.random as rnd some_x=[1,2,3,7,9,10,11,12,15,18] x_appearances=[] data_for_each_x=[] for i in range(0, len(some_x

我试图创建一个分组的箱线图,表示不同大小的多个分布。这些尺寸应显示在顶部的柱状图中

我当前的代码:

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

some_x=[1,2,3,7,9,10,11,12,15,18]
x_appearances=[]
data_for_each_x=[]

for i in range(0, len(some_x)):
    rand_int=rnd.randint(10,30)
    data_for_each_x.append([np.random.randn(rand_int)])
    for j in range(0, rand_int):
        x_appearances.append(i)

f, (ax_hist, ax_box) = plt.subplots(2, sharex=True, gridspec_kw={"height_ratios": (.15, .85)})
ax_hist=sns.distplot(x_appearances, kde=False, hist_kws=dict(alpha=0.7), ax=ax_hist, bins=len(some_x))
ax_box = sns.boxplot(data=data_for_each_x, showfliers=False)
plt.xticks(plt.xticks()[0], some_x)

plt.show()
现在,这几乎就是我想要的。但是,直方图的x轴刻度与箱线图的刻度不匹配


另外,如果有一种方法可以包含一个高阶的,比如说中间点的3阶回归曲线,那就太好了。

问题是你的箱子数量比箱子数量少一个。若要更正此错误,必须在箱子数量上加1,然后减去0.5,以便将它们与方框图方框上方的中心条对齐

现在我使用arange创建垃圾箱,然后将其居中放置

f, (ax_hist, ax_box) = plt.subplots(2, sharex=True, gridspec_kw={"height_ratios": (.15, .85)})
ax_hist=sns.distplot(x_appearances, kde=False, hist_kws=dict(alpha=0.7), ax=ax_hist, bins=np.arange(len(some_x)+1)-0.5)
ax_box = sns.boxplot(data=data_for_each_x, showfliers=False)
plt.xticks(plt.xticks()[0], some_x)

谢谢,这就解决了。但对于我自己的数据来说,由于某些原因,柱状图总是向右打勾。请尝试删除+1或-0.5,看看对齐方式如何变化,-0.5使柱状图的条形居中,这很好。更改或删除+1似乎没有任何效果。与随机数据不同的是,我自己的数据从一开始就在柱状图中出现了。@Marcel:很高兴你发现了这个问题,我的答案也有帮助。你解决了我要解决的问题!仍然需要找出我的真实数据有什么问题。关于中位数的回归,这也是我所要求的,如果我自己不能弄清楚的话,我可能会打开一个新的思路来研究如何做到这一点。