【问题标题】:python27 matplotlib: first and last element connectedpython27 matplotlib:连接的第一个和最后一个元素
【发布时间】:2015-01-19 01:31:53
【问题描述】:

您好,我发现了同样的问题,但没有答案: enter link description here

我的问题是我尝试使用 matplotlib 绘制数据,它连接了第一个和最后一个数据点。我正在使用 python27 和 Windows 7。我的问题只是显示完整,所以我只显示源代码的某些部分。绘图功能如下:

def plot(x, aw,temperature):
    plt.clf()
    temperatureplot = plt.subplot(211)
    awplot = plt.subplot(212)

    temperatureplot.grid()
    awplot.grid()  

    #set subplots
    awplot.set_ylabel('water activity aw')
    awplot.plot(x,aw)
    awplot.margins(y=0.05) #adds a gap between maximum value and edge of diagram
    temperatureplot.set_ylabel('Temperature in degree C')
    temperatureplot.plot(x,temperature)
    temperatureplot.margins(y=0.05)

    awplot.set_xlabel('Time in [hm]')
    plt.gcf().canvas.draw()

我正在使用它,因为我在 Tkinter Gui 中绘制它并且有时想刷新它。情节看起来像:

我的价值观是:

t = [161000, 161015...., 191115]
aw = [0.618,......, 0.532]
temperature = [23.7,....,24.4]

我在 t 数组中不从零开始是否有问题?

如果有人有提示或知道问题,请帮助我。

欢呼麦克斯

【问题讨论】:

  • 对于被否决的人,请您解释一下您为什么这样做,以改善我以后的帖子并可能扩展问题?

标签: python matplotlib plot


【解决方案1】:

Pyplot 将第一个 (x,y) 点与第二个 (x,y) 点连接起来,与第三个点连接起来,依此类推......所以看起来可能有一个(重复的?)低值隐藏在x 的结尾。

您可以尝试x == sorted(x) 仔细检查您的列表是否严格升序。如果不是,它将返回False

在调用 plot() 函数之前,您可能希望找到 (x,y) 对,所以我暂时将其留给您。

【讨论】:

  • 所以x==sorted(x) 返回True?
  • 抱歉耽搁了,但是是的,它返回 true,奇怪的是现在我只是绘制另一个文件,它将第一个点与中间的某个点连接起来。但我不明白为什么,因为时间数组只是一个连续的数字列表,而其他值只是测量出来的?
  • 您必须发布一个包含一些数据的工作示例;你的代码对我来说很好。
【解决方案2】:

好问题! 从循环缓冲区绘制时间戳数据时遇到了类似的问题。其他答案解释了发生了什么。

绘图以严格的顺序处理向量,从第一个坐标到第二个坐标绘制一条线,依此类推。但是循环缓冲区可以在任何时候以最短时间开始。

因此,绘图通常会从绘图窗口中间的某个地方开始,并具有很好的递增时间。然后它到达插入点并及时向后跳到窗口的开头——画一条丑陋的线——然后继续回到起点。

快速解决方案是替换这一行:

plot(pTime, pPos)

两条线以正确的顺序绘制每一半:

plot(pTime[ptr:], pPos[ptr:])
plot(pTime[0:ptr], pPos[0:ptr])

【讨论】:

    【解决方案3】:

    如您所见,我遇到了类似的问题:

    之前

    我刚刚使用这个对x 进行了排序:

    x = sorted(x)
    

    如您所见,该行消失了:(但数据因排序而受到干扰)。

    排序后

    您还必须确保相应的y 值也应针对已排序的x 进行相应排列。最终输出在这里:

    已修复

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题。我找到的解决方案是在存储我的数据的 .txt 文件中。数据集在文件中存在两次,因此导致matplotlib连接起点和终点。

      删除双重数据并正确绘制图表。幸运的是,这两个数据集一个接一个地出现。所以很容易删除第一部分。

      由于在我的情况下这是一个庞大的数据收集,这并不明显,因此需要一些时间来实现。

      问题是在创建 txt 文件时引起的......

      所以所有的 matplotlib 都是正确的。

      干杯,瑞克

      【讨论】:

        【解决方案5】:

        我也遇到了同样的问题。

        就我而言,我处理的是一年中的 365 天。索引从 0 开始,到 365 结束,而日期编号从 1 开始,到 366 结束,所以对应于第 366 行的日期是 1,这就是为什么有一条线将绘图的结尾连接到它的开头。 我还需要检查闰年,因为数据是从 10 年期间收集的。

        【讨论】:

          猜你喜欢
          • 2018-05-28
          • 2016-02-22
          • 2012-06-11
          • 1970-01-01
          • 2015-08-31
          • 2012-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多