我是matplotlib的新手。我正在尝试绘制阶跃函数并遇到一些麻烦。现在,我可以从文件中读取并绘制它,如下所示。但是顶部的图不是逐步的,下面的图不是适当的步骤。我看到了通过给出x&y值来绘制阶跃函数的示例。我不知道如何通过读取文件来做到这一点。有人能帮我吗?

from pylab import plotfile, show, gca
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook

fname = cbook.get_sample_data('sample.csv', asfileobj=False)

plotfile(fname, cols=(0,1), delimiter=' ')
plotfile(fname, cols=(0,2), newfig=False, delimiter=' ')
plt.show()




输入样本(3列):

27023927    3   0
27023938    2   0
27023949    3   0
27023961    2   0
27023972    3   0
27023984    2   0
27023995    3   0
27024007    2   0
27024008    2   1
27024018    3   1
27024030    2   1
27024031    2   0
27024041    3   0
27024053    2   0
27024054    2   1
27024098    2   0


注意:我将y轴1的值设为3和2,以便该图可以出现在顶部,而另一个y轴2的值0和1则可以出现在底部,如下图所示



现在的波形

最佳答案

本质上,您的分辨率太低,对于较低的图,步骤(最后一个除外)在x中的1单位上发生,而步长大约大一个数量级。这会显示阶梯的外观,而如果您放大,则会看到垂直线具有非无限的渐变(真实的阶梯随无限的渐变而变化)。

对于顶部图和底部图,这都是相同的问题。我们可以使用step function轻松地对此进行补救。通常,您会发现导入数据更容易,在此示例中,我使用了功能强大的numpy genfromtxt。这会将数据加载为数组data

import numpy as np
import matplotlib.pylab as plt

data = np.genfromtxt('test.csv', delimiter=" ")

ax1 = plt.subplot(2,1,1)
ax1.step(data[:,0], data[:,1])

ax2 = plt.subplot(2,1,2)
ax2.step(data[:,0], data[:,2])

plt.show()




如果您是python的新手,那么可能有两件事要提及,我们使用两个子图(ax1ax2)来绘制数据,而不是在同一图上绘制(这意味着您不需要添加值)在空间上将它们分开)。我们通过[]访问数组的元素,这给出了[column, row],其中:表示所有列,索引iith

关于python - 通过读取文件进行步骤绘图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18865367/

10-12 17:59
查看更多