我有一个数据集,其中包括棒球运动员的所有击球平均值。我将此数据集中的每个玩家随机分配到一个集群。现在,我想在堆叠的直方图中直观地显示每个聚类。我使用以下内容:
import matplotlib.pyplot as plt
def chart(k=2):
x = np.arange(0, 0.4, 0.001)
for j in range(k):
cluster = df.loc[df['cluster'] == j].reset_index()
plt.hist(cluster['Average'], bins=50, density=1, stacked=True)
plt.xlim(0, 0.4)
plt.xlabel('Batting Average')
plt.ylabel('Density')
plt.show()
但是,我希望看到以下内容:
我通过将数据集划分为“硬编码”来创建此图表。理想情况下,我想通过创建循环来动态地执行此操作。我还如何添加带有群集名称的图例并为每个群集指定颜色?再次全部循环。例如, K 也可以是10。 预先感谢
答案 0 :(得分:1)
不提供数据和Minimal, Complete, and Verifiable example
在问一个问题之前先问别人,很难回答您的问题。这是您下次应该记住的事情。不过,这是一种对您有用的方法。这个想法是创建一个轴对象ax
并将其传递以在同一图形上绘制两个直方图。然后,您可以在绘制所有内容后在功能之外修改标签,限制等。
P.S:正如Paul H在下面的评论中指出的那样,DataFrame df
和列名也应作为参数传递给图表函数,以使其更加健壮
import matplotlib.pyplot as plt
def chart(ax1, k=2):
x = np.arange(0, 0.4, 0.001)
for j in range(k):
cluster = df.loc[df['cluster'] == j].reset_index()
ax1.hist(cluster['Average'], bins=50, density=1, stacked=True)
return ax1
fig, ax = plt.subplots()
ax = chart(ax, k=2)
plt.xlim(0, 0.4)
plt.xlabel('Batting Average')
plt.ylabel('Density')
plt.show()