小能豆

如何绘制具有多个值的图?

py

我需要从数据框中绘制一个图,但我不知道如何绘制。所以我的理想图是这样的,这意味着每个 x 轴提供多个值(并且它们绝对不能互相覆盖)。 zOojl.jpg

以下代码用于创建一个随机数据框,因此您可以尝试一下。如果有人能帮助我,我将不胜感激!!!

import pandas as pd
import numpy as np

random_data = np.random.randint(10,25,size=(5,3))
df = pd.DataFrame(random_data, columns=['Column_1','Column_2','Column_3'])
print(df)

实际上我的数据看起来像这样,所以这意味着有 a 到 k 列,每列都有 8 个值(其中一些是空的)
1.png


阅读 22

收藏
2025-01-06

共1个答案

小能豆

用您提供的玩具数据框,可以采用以下方法实现:

# Prepare data for plotting
new_df = pd.concat(
    [
        pd.DataFrame(
            {
                "x": [i + j * 10 - 1 for i in range(1, len(df[col]) + 1)],
                "value": df[col],
                "label": col,
            }
        )
        for j, col in enumerate(df.columns)
    ]
).reset_index(drop=True)
print(new_df)
# Output
    x   value   label
0   0   14  Column_1
1   1   22  Column_1
2   2   20  Column_1
3   3   11  Column_1
4   4   21  Column_1
5   10  18  Column_2
6   11  17  Column_2
7   12  21  Column_2
8   13  18  Column_2
9   14  15  Column_2
10  20  19  Column_3
11  21  18  Column_3
12  22  24  Column_3
13  23  17  Column_3
14  24  14  Column_3

然后,你可以像这样绘制:

from matplotlib import pyplot as plt

fig, ax = plt.subplots(nrows=1, ncols=1)

# Remove borders
ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)

# Position labels on x-axis 
ax.set_xticks(
    ticks=[
        new_df.loc[new_df["label"] == label, "x"].median()
        for label in new_df["label"].unique()
    ]
)
ax.set_xticklabels(new_df["label"].unique(), fontsize=12)

# Plot values
for label in new_df["label"].unique():
    ax.scatter(
        new_df.loc[new_df["label"] == label, "x"],
        new_df.loc[new_df["label"] == label, "value"],
    )

plt.show()

输出:

1.png

2025-01-06