You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在散点图对应数据点上添加能源类型的value_counts计数标注

如何在散点图对应数据点上添加能源类型的value_counts计数标注

嗨,我来帮你搞定这个问题!你之前遇到的“计数显示在图下方导致图变小”的问题,应该是直接把计数打印出来了,而不是把它们作为标注嵌入到散点图里。下面我给你两种实用的解决方案,按需选择就行:

方案1:给每个数据点单独标注计数

这种方法适合数据量不大的情况,每个散点上方都会显示对应能源类型的总计数:

首先,我们先给数据集新增一列,把每个能源类型的计数映射到对应的数据行上:

import pandas as pd
import matplotlib.pyplot as plt

# 假设你的数据集叫pollution,先添加计数列
pollution['energie_count'] = pollution['Energie'].map(pollution['Energie'].value_counts())

然后绘制散点图,并遍历每个数据点添加标注:

# 绘制基础散点图
plt.figure(figsize=(10,6))
plt.scatter(pollution['Global Power Warming'], pollution['Nox'], alpha=0.7)

# 给每个点添加计数标注
for x, y, count in zip(pollution['Global Power Warming'], pollution['Nox'], pollution['energie_count']):
    # ha='center'让标注水平居中,va='bottom'让标注在点的上方,避免遮挡
    plt.annotate(str(count), (x, y), fontsize=8, ha='center', va='bottom')

# 完善图表信息
plt.xlabel('Global Power Warming')
plt.ylabel('Nox Emission')
plt.title('Nox vs Global Power Warming with Energie Class Counts')
plt.tight_layout()
plt.show()

方案2:在每个能源类型的聚类中心标注计数

如果你的数据点很多,逐个标注会显得杂乱,那可以计算每个能源类型数据点的中心位置,只在中心标注该类型的总计数,这样更清晰:

import pandas as pd
import matplotlib.pyplot as plt

# 获取每个能源类型的总计数
energie_counts = pollution['Energie'].value_counts()

# 计算每个能源类型的平均坐标(聚类中心)
cluster_centers = pollution.groupby('Energie').agg(
    avg_x=('Global Power Warming', 'mean'),
    avg_y=('Nox', 'mean')
).reset_index()

# 把计数合并到中心数据里
cluster_centers['count'] = cluster_centers['Energie'].map(energie_counts)

# 绘制散点图
plt.figure(figsize=(10,6))
plt.scatter(pollution['Global Power Warming'], pollution['Nox'], alpha=0.5)

# 在每个聚类中心添加标注,还可以加个白色背景框避免被散点遮挡
for _, row in cluster_centers.iterrows():
    plt.annotate(
        f"{row['Energie']}: {row['count']}",
        (row['avg_x'], row['avg_y']),
        fontsize=10,
        ha='center',
        va='bottom',
        bbox=dict(facecolor='white', edgecolor='gray', alpha=0.8)
    )

# 完善图表信息
plt.xlabel('Global Power Warming')
plt.ylabel('Nox Emission')
plt.title('Nox vs Global Power Warming with Energie Class Cluster Counts')
plt.tight_layout()
plt.show()

为什么之前的方法会让图变小?

你之前直接枚举energie_counts并输出的话,这些计数会被打印在绘图区域的下方(属于控制台输出),matplotlib会自动缩小绘图区域来给这些文本腾出空间,所以才会导致图变小。现在我们用plt.annotate()把计数直接画在图上,就不会出现这个问题啦!

备注:内容来源于stack exchange,提问作者Raios

火山引擎 最新活动