如何在 python 上绘制有两个 x 变量的图形,其中一个需要根据给定数据计算? [关闭]

Posted

技术标签:

【中文标题】如何在 python 上绘制有两个 x 变量的图形,其中一个需要根据给定数据计算? [关闭]【英文标题】:How to draw a graph on python where there are two x-variables, one of which needs to be calculated from given data? [closed] 【发布时间】:2021-12-29 20:28:27 【问题描述】:

我有一个 CSV 文件,其中包含一项调查的结果,其中要求用户回答他们的年龄(0 到 100 岁)和他们的心情(0=快乐 1=中期 2=悲伤)。我打算使用 matplotlib 或任何其他图形库在 python 上制作一个条形图,在 y 轴上显示每个年龄的人数,然后在 x 轴上显示三条形图,以显示那里有多少悲伤、快乐和中等的人是为每个年龄。问题在于 CSV 文件中没有直接包含有关每个年龄段的总人数、每个年龄段的快乐人数和每个年龄段的悲伤人数等数据的列。有关如何操作的任何提示解决这个问题会很有帮助。下表显示了 CSV 文件的几行。谢谢

Age Mood level
12 0
83 1
55 ​ 2

【问题讨论】:

分享几行 CSV 文件。 @SMMousaviSP 对不起,我现在已经这样做了 【参考方案1】:

假设我们有以下数据框:

import pandas as pd
from matplotlib import pyplot as plt

df = pd.DataFrame(
    
        "Age": [20, 16, 16, 20, 20, 16, 18, 18, 18, 20, 16, 16, 18, 18, 18, 20, 20],
        "Mood Level": [0, 2, 1, 2, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 2, 2, 1],
    
)

然后我们需要创建一些基于 Mood Level 的编码,这意味着我们需要创建列 Mood_Level_0Mood_Level_1Mood_Level_2,其值为 0(假)或 1(真)。这可以通过以下方式完成:

df = pd.concat([df, pd.get_dummies(df["Mood Level"], prefix="Mood_Level")], axis=1)

将导致:

    Age  Mood level  Mood_Level_0  Mood_Level_1  Mood_Level_2
0    20           0             1             0             0
1    16           2             0             0             1
2    16           1             0             1             0
3    20           2             0             0             1
4    20           0             1             0             0
5    16           1             0             1             0
6    18           0             1             0             0
7    18           1             0             1             0
8    18           1             0             1             0
9    20           0             1             0             0
10   16           0             1             0             0
11   16           1             0             1             0
12   18           0             1             0             0
13   18           1             0             1             0
14   18           2             0             0             1
15   20           2             0             0             1
16   20           1             0             1             0

最后,我们需要按 Age 分组,并将上面创建的每个列的 1 相加:

grouped_per_age = df.groupby(["Age"], as_index=True,).agg(
    mood_level_0=("Mood_Level_0", "sum"),
    mood_level_1=("Mood_Level_1", "sum"),
    mood_level_2=("Mood_Level_2", "sum"),
)

这将导致:

     mood_level_0  mood_level_1  mood_level_2
Age
16              1             3             1
18              2             3             1
20              3             1             2

绘制上述数据框:

ax = grouped_per_age.plot.bar(rot=0)
plt.xlabel("Age")
plt.ylabel("Count")
plt.legend()
plt.show()

结果:

【讨论】:

以上是关于如何在 python 上绘制有两个 x 变量的图形,其中一个需要根据给定数据计算? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

python之绘制图形库turtle

如何在matlab同一个图形上绘制多条曲线

如何在我的数组上使用 forEach 循环在我的图表上绘制 x 和 y 变量(Chart.js)

Pyqtgraph:在同一个图形窗口中实时绘制两个图形相同的X轴但两个不同的Y轴方向相反

Python:如何在 Y 轴上绘制数字 [关闭]

如何使用 Python matplotlib 绘制具有 4 个象限的图形或绘图?