我正在绘制来自多个文件的数据。我不想使用glob模块,因为我需要分别绘制每个文件中的数据。数据是绘图,但有追溯'使用Matplotlib绘制图表时的图上的线条。地块的图像如下:
以下是一些示例数据,以帮助解决问题,我很抱歉缺乏格式。数据来自未格式化的文本文件。如果将两个数据集拆分为两个单独的文件,则应重新创建该问题。
Start-Mi, End-Mi, IRI LWP, IRI R e
194.449, 194.549, 75.1, 92.3
194.549, 194.649, 85.2, 82.8
194.649, 194.749, 90.8, 91.8
194.749, 194.849, 79.3, 73.7
194.849, 194.949, 76.9, 80.1
194.949, 195.049, 82.7, 86.9
195.049, 195.149, 103, 116.7
195.149, 195.249, 81.5, 96.1
195.249, 195.349, 96.7, 92.7
195.349, 195.449, 59.5, 72.2
和
Start-Mi, End-Mi, IRI LWP, IRI R e
194.449, 194.549, 79.9, 95.7
194.549, 194.649, 87.4, 96.5
194.649, 194.749, 86.5, 105.3
194.749, 194.849, 77, 76
194.849, 194.949, 73.6, 85.2
194.949, 195.049, 81.7, 94.3
195.049, 195.149, 104.6, 128.2
195.149, 195.249, 84.2, 98.6
195.249, 195.349, 94.2, 91.3
195.349, 195.449, 57.5, 72.1
当代码在新文件上开始新数据图时,将创建回溯线。我试图摆脱从剧情结尾绘制的水平线回到开头。我需要清理绘图,因为代码被设计为迭代无限数量的数据文件。代码如下所示:
def graphWriterIRIandRut():
n = 100
m = 0
startList = []
endList = []
iriRList = []
iriLList = []
fileList = []
for file in os.listdir(os.getcwd()):
fileList.append(file)
while m < len(fileList):
for col in csv.DictReader(open(fileList[m],'rU')):
startList.append(float(col['Start-Mi']))
endList.append(float(col[' End-Mi']))
iriRList.append(float(col[' IRI R e']))
iriLList.append(float(col['IRI LWP ']))
plt.subplot(2, 1, 1)
plt.grid(True)
colors = np.random.rand(n)
plt.ylabel('IRI value',fontsize=12)
plt.title('Right IRI data per mile for 2016 calibrations: ')
plt.plot(startList,iriRList,c=colors)
plt.tick_params(axis='both', which='major', labelsize=8)
plt.subplot(2, 1, 2)
plt.grid(True)
colors = np.random.rand(n)
plt.ylabel('IRI value',fontsize=12)
plt.title('Left IRI data per mile for 2016 calibrations: ')
plt.plot(startList,iriLList,c=colors)
plt.tick_params(axis='both', which='major', labelsize=8)
m = m + 1
continue
plt.show()
plt.gcf().clear()
plt.close('all')
答案 0 :(得分:1)
您的代码目前正在执行以下操作:
列表不会在任何时候被清除,因此您将继续绘制列表,并附加越来越多的数据,其中大部分都是反复绘制的。这也是为什么你的所有线都有相同颜色的原因:它是你制作的最后一个绘图的颜色,它完全覆盖了之前的所有绘图,并增加了一行。
碰巧,ImageView
有一个漂亮的pyplot
函数,可以让您确保在图上创建的任何其他图都不会覆盖旧图。您甚至不需要生成自己的颜色序列。 hold
也会为你做到这一点。
虽然您的程序功能正常,但代码中也存在一些可以轻松纠正的“风格”问题。它们最好是非Pythonic,实际上最坏的问题是:
pyplot
关键字中使用的上下文管理器是此标准方法。with
的结果,而不是os.listdir
循环。实际上,您根本不需要复制列表。for
循环,该循环会在每次迭代时递增索引,那么它应该是while
循环。for
。这是隐含的。所以这是一个结合了以上所有内容的解决方案。此版本假定您在绘制之后不需要保留给定文件的内容:
continue
在您提供的输入上运行此函数会生成下图:
要获得更有效的方式来处理CSV和表格数据,您可能需要查看pandas库。它是一个非常强大的分析工具,包括您可能想象的大多数用例的绘图和IO例程。