来自具有多列的 Pandas 数据框的 Python 散点图

标签 python pandas dataframe scatter-plot scatter

我有一个如下所示的数据框: Dataframe Snapshot

我想在图表上制作一个只有点的散点图,我希望所有的点都在图表上的列中排列,其中每列在 y 轴上代表一个月(一月、二月、三月等) .实际数据点将绘制在 y 轴上。

当我这样做

df.plot.scatter()

它当然要我声明一个 x 和 y 值。如果您查看我附上的数据框图片,我真的无法做到这一点。如何绘制每个月的所有点在每个月标签上方的 x 轴上垂直排列的位置?我也试过:

df.plot.box

这基本上给了我想要的东西,但我只想要点,而不是它也试图绘制的框/ mustache 。我只想要积分。

最佳答案

我认为您无法使用 pandas 绘制带有分类变量的散点图。您可以为要绘制的每个月分配一个数值,尽管您也可以只使用 matplotlib

创建测试数据集:

data = np.random.randn(4, 3)
df = pd.DataFrame(data, columns=['Jan', 'Feb', 'Mar'])

将其转换为长格式:

df = df.melt()

绘制时需要指定每个类别的 x 位置。我使用枚举,尽管您也可以创建一个包含数值的新列

groups = df.groupby('variable')
fig, ax = plt.subplots()
x_ticks = []
x_ticklabels = []
for i, (name, group) in enumerate(groups):
    y = group.value
    x = [i]*len(y)
    ax.scatter(x, y)
    x_ticks.append(i)
    x_ticklabels.append(name)

然后您可以设置您的刻度标签以匹配您的 x 值:

ax.set_xticks(x_ticks)   
ax.set_xticklabels(x_ticklabels);

enter image description here

更新 我喜欢以长格式处理事情,因为每个条目都变成一个单独的观察结果,但是我意识到在不转换数据的情况下遍历列会更简洁:

fig, ax = plt.subplots()
for i, (name, value) in enumerate(df.iteritems()):
    ax.scatter([i]*len(value), value)
ax.set_xticks(range(len(df.columns)))
ax.set_xticklabels(df.columns);

关于来自具有多列的 Pandas 数据框的 Python 散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47186724/

相关文章:

python - 使用 Python 进行傅里叶变换

python - 通过 Okta 身份验证使用 Databricks Snowflake 连接器连接到 Snowflake

python - 在列表的数据框中找到最常见的对

python - 按重复日期分组的 Pandas

python - 无法安装 pysiddhi

python - 如何将数据框列数据添加到另一个数据框中的一系列索引?

Python 错误无法从空轴中执行非空取值

python - 读取/写入 Excel 文件中的特定位置

python - Pandas python - 匹配值

python - 根据另一列中的值从一列中减去