Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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-在分组密度图中推广平均线的y轴极限_Python_Pandas_Numpy - Fatal编程技术网

python-在分组密度图中推广平均线的y轴极限

python-在分组密度图中推广平均线的y轴极限,python,pandas,numpy,Python,Pandas,Numpy,我有这个数据框: df = pd.DataFrame({"X": np.random.randint(50,53,size=100), "Y": np.random.randint(200,300,size=100), "Z": np.random.randint(400,800,size=100), "Cat": np.random.ch

我有这个数据框:

df = pd.DataFrame({"X": np.random.randint(50,53,size=100),
             "Y": np.random.randint(200,300,size=100),
             "Z": np.random.randint(400,800,size=100),
             "Cat": np.random.choice(["Buy","Don't buy"], size=100)})
由于我有很多列(除一列外,所有列都是数字列),所以我做这个循环是为了做一个特定的绘图:

for i in ["X", "Y", "Z"]:
    data = df.groupby("Cat")
    ax = data[i].plot(kind="kde")
    #ymin, ymax = ax.get_ylim() # Here is the error
    plt.vlines(x=data.mean()[data.mean().index == "Buy"][i],ymin=0, ymax=0.5, linestyles="dotted")
    plt.vlines(x=data.mean()[data.mean().index == "Don't buy"][i],ymin=0, ymax=0.5, linestyles="dotted")
    plt.show()
我需要得到每个密度图和分类组的最大y轴值,以便绘制每个图和每个分类组的平均线。我正试图从中找到解决方案的方法。但是它给了我一个错误,
“Series”对象没有属性“get\u ylim”

有什么建议吗

编辑:

具体而言,每个密度曲线的ymax应相同,因为每个地块将有两条密度曲线。如果它们的颜色不同(例如,与密度曲线的颜色相同),这将是惊人的,但并非严格必要。不同地块的ymax可能不同

我需要得到每个密度图和分类组的最大y轴值

ax
是一个熊猫系列,带有一个轴用于“购买”和“不购买”

> ax
Cat
Buy          AxesSubplot(0.125,0.11;0.775x0.77)
Don't buy    AxesSubplot(0.125,0.11;0.775x0.77)
Name: X, dtype: object
您可以使用

> max(ax['Buy'].get_ylim())
0.5447082895597888
> max(ax["Don't buy"].get_ylim())
0.5447082895597888
或者用它来达到极限

> import matplotlib as mpl
> ax.apply(mpl.axes.Axes.get_ylim)
Cat
Buy          (-0.026485399247623134, 0.556196332564079)
Don't buy    (-0.026485399247623134, 0.556196332564079)
Name: Z, dtype: object
> 

ax=data[i].plot(kind=“kde”)
-这行执行后的
ax
是什么
data=df.groupby(“Cat”)
不应在for循环中。您希望输出的具体内容是什么?这条线应该往上走多远?(地块的全高?到曲线?什么?)。它应该像每条曲线一样上色吗?在另一个问题中,它是模棱两可的,你得到了三个非常不同的答案,混合了上/下投票。@ALollz在另一个问题中,它并不重要,因为每个地块只有一条密度曲线。在本例中,每个地块的ymax应相同,因为每个地块将有两条密度曲线。如果它们的颜色不同(例如,与密度曲线的颜色相同),这将是惊人的,但并非严格必要。我编辑了这个问题以便澄清
> import matplotlib as mpl
> ax.apply(mpl.axes.Axes.get_ylim)
Cat
Buy          (-0.026485399247623134, 0.556196332564079)
Don't buy    (-0.026485399247623134, 0.556196332564079)
Name: Z, dtype: object
>