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
>