我有这个数据框: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 轴值,以便绘制每个图和每个分类组的平均 vlines。我试图从这里找到解决方案的解决方法。但它给了我错误'Series' object has no attribute 'get_ylim'。有什么建议么?编辑:具体来说,每条密度曲线的 ymax 应该相同,因为每个图都有两条密度曲线。如果它们的颜色不同(例如与密度曲线的颜色相同)那就太棒了,但并非绝对必要。不同地块的 ymax 可能不同。
1 回答

慕村9548890
TA贡献1884条经验 获得超4个赞
我需要获得每个密度图和分类组的最大 y 轴值
for i in ["X", "Y", "Z"]:
data = df.groupby("Cat")
ax = data[i].plot(kind="kde")
...
ax是带有“购买”和“不购买”轴的 Pandas 系列。
> 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
您可以获得最大 y 限制
> 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
>
添加回答
举报
0/150
提交
取消