有没有一种方法可以绘制 CSV 文件中的数据,其中每列中的每 10 个数据点是同一图表中的不同线?

Posted

技术标签:

【中文标题】有没有一种方法可以绘制 CSV 文件中的数据,其中每列中的每 10 个数据点是同一图表中的不同线?【英文标题】:Is there a way where I can plot data from a CSV file where every 10 data points in a column are a different line in the same graph? 【发布时间】:2019-09-30 19:46:37 【问题描述】:

假设我有一个包含两列的数据集。我想绘制一个每 10 个迭代的线图。因此,我将取前 10 个,然后是前 10 个正下方的第二个 10,作为同一图表上的另一个线图(不同颜色的线)。数据在没有标题的 CSV 文件中相互堆叠。

目前,我将它纳入整个专栏。它绘制了它们,但是对于它是哪个数据集没有区别。我想在同一张图上绘制多条线,但 CSV 文件在一列中包含所有数据集,但我需要每 10 次绘制一次。

编辑 下面我添加了数据,我希望第一列是 x 轴,第二列是 y。

Sample Data:
0   8.2
1   9.1
2   2.2
3   3.3
4   9.8
5   6.3
6   4.8
7   8.6
8   3.9
9   2.1
0   9.34
1   10.2
2   7.22
3   6.98
4   1.34
5   2.56
6   6.78
7   4.56
8   3.3
9   9.4

【问题讨论】:

你能发布一些示例数据吗? 是的,有办法。但这在很大程度上取决于您的数据和您想要的输出。因此,正如@ScottBoston 所说,提供一些示例。 @ScottBoston 我添加了一些示例数据 @QuangHoang 好的,我添加了一些示例数据 【参考方案1】:

好的,试试这个:

# this is the toy data
df = pd.DataFrame(0:list(range(10))*2,
                1:np.random.uniform(9,11,20))

# set up axes for plots
fig, ax = plt.subplots(1,1)

# the groupby argument groups every 10 rows together
# then pass it to the `lambda` function,
# which plots each chunk to the given plt axis
df.groupby(df.reset_index().index//10).apply(lambda x: ax.plot(x[0], x[1]) )
plt.show()

选项 2:

我发现sns 是一个更好的工具:

fig, ax = plt.subplots(1,1, figsize=(10,6))
sns.lineplot(x=df[0], 
             y=df[1], 
             hue=df.reset_index().index//10, 
             data=df,
             palette='Set1')
plt.show()

输出:

【讨论】:

你能解释一下到底发生了什么吗? 第一行到底是做什么的?现在,我的数据正在被 pd.read_csv(file, use_cols = [1, 3], header = None) 读取 那会是 df.groupby(df.reset_index().index//10 吗?我应该将它设置为等于某个值以便我可以为它制作图例吗? 那么你会通过 sns.legend 更改图例名称吗?因为它们显示为 0 1 2 另外,假设你不知道10的迭代有多少,因此你必须通过迭代为图例编写一个for循环。所以第一行将是“test1”第二个“test2”,依此类推,数字迭代。我对这部分也有点困惑

以上是关于有没有一种方法可以绘制 CSV 文件中的数据,其中每列中的每 10 个数据点是同一图表中的不同线?的主要内容,如果未能解决你的问题,请参考以下文章

如何按范围对csv文件中的列进行分组并使用python绘制直方图?

有没有一种方法可以在Javascript中按行号将CSV数据存储在数组中?

读取并绘制实时实时自我更新 csv 文件

如何沿 x 轴均匀地绘制日期数据?

将 d3.csv 方法转换为 d3.csv.parse 方法

加载csv文件s3 pyspark的随机样本