用 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 重绘图像?