用 for Loop 和 Matplotlib 绘制 Pandas DataFrame?

Posted

技术标签:

【中文标题】用 for Loop 和 Matplotlib 绘制 Pandas DataFrame?【英文标题】:Plotting Pandas DataFrame with for Loop and Matplotlib? 【发布时间】:2022-01-22 21:45:47 【问题描述】:

我有一个包含未知数量列的文件。这些列是以这种方式排列的一堆 x 和 y 值:x1、y1、x2、y2、x3、y3....等。 我想使用 for 循环来绘制它们,因为我想与它集成一个颜色条,颜色是根据代码中写入的变量进行标准化的。

我为加载 txt 文件并将列命名为 F1、F2、F3、...等而编写的代码。 因此,我尝试通过循环索引的模来解决 x 和 y 之间的切换。 但它不起作用:

import matplotlib.pyplot as plt
import pandas as pd

data = pd.read_csv('All.txt', delimiter='\t', header = None)
cols = list(data.columns.values)
index = 1
for column in cols:
    cols[index-1] = "F"+str(index)
    index += 1
vals = data.values.tolist()
newDataFrame = pd.DataFrame(vals,   columns=cols)

first_column = data[data.columns[0]]

for i in range(len(data.columns.values)):
    if i%2==1:
        plt.plot(data[data.columns[i]],data[data.columns[i+1]])
        index += 1
plt.show()

颜色条的代码在这个问题中: Matplotlib Logscale colorbar with for loop for loading data and plotting?

总结: 问题有两个部分: 1/ 绘制包含 x1,y1,x2,y2....等的数据框。 2/ 将颜色条与循环集成。

谢谢!

【问题讨论】:

你的for 循环是完全错误的。在range 中使用一个步骤会更好:for i in range(0, len(data.columns.values), 2): plt.plot(data[data.columns[i]],data[data.columns[i+1]]) 【参考方案1】:

1/ 绘制包含 x1,y1,x2,y2....等的数据框。

当您使用 Pandas DataFrame 或 Series 进行绘图时,您应该小心使用索引。 我建议您转换数据结构以进行循环,例如下面的 x、y 数组 (我不确定你要绘制什么数据..)

2/ 将颜色条与循环集成。 只需修改下面的代码。我希望你能改变线条颜色和改变颜色条刻度

# Import Modules
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# Load Data
data = pd.read_csv('All.txt', delimiter='\t', header = None)

# Transform dataframe for looping
coordinates = [
    dict(
        x=data.values[:, (i*2)],
        y=data.values[:, (i*2)+1]
    )
    for i in range(len(data.columns)//2)
]

# Setup color bar
logs = np.logspace(3,7,10, endpoint=True)
norm = mpl.colors.Normalize(vmin=logs.min(), vmax=logs.max())
cmap = mpl.cm.ScalarMappable(norm=norm, cmap=mpl.cm.Reds)
cmap.set_array(logs)

# Plotting
fig = plt.figure()
for c in coordinates:

    plt.plot(c['x'], c['y'])
plt.colorbar(cmap, ticks=logs)

plt.show()

【讨论】:

这样不行。甚至绘图都不正确!谢谢你的回答。

以上是关于用 for Loop 和 Matplotlib 绘制 Pandas DataFrame?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 的 matplotlib 重绘图像?

python怎样用最简单的for loop求list中的最大值

oracle查询表用for in loop循环出来更新

Python for-in Loop常见遍历方法

在地图上标绘车站

绘制matplotlib中的最后100个点