绘制展开函数时如何消除连接线

时间:2018-11-01 18:57:26

标签: python matplotlib plot

我试图弄清楚如何消除功能“切碎”时出现的虚假“连接线”,以便仅在单个间隔内绘制它。例如,假设我有一个从零扩展到10 pi(或什至更大)的角度函数,并且我只想在0到2 pi的范围内绘制此函数。我可以使用模运算来修复数据,但是如果绘制数据,则会得到一条从2 pi返回零的线,我不想绘制。这是一些代码,显示了我在说什么。

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 10*np.pi, 1000)
y = t + np.sin(t)      
t2 = t%(2*np.pi)
plt.plot(t2, y)
plt.show()

生成的图具有一系列我不想要的水平线(请参见下图)。我对此进行了一些研究,但没有找到任何简单的方法来处理这种情况,但似乎这有点普遍。

有什么想法吗?

enter image description here

顺便说一下,我正在处理相当大的数据集,所以我不能很好地“手动”做任何事情。

2 个答案:

答案 0 :(得分:2)

通常,您可以使用NaN将中断插入点。在显示的特定情况下,您可以使用np.diff来识别不连续性,并将这些位置处的t2值设置为NaN,以得到所需的中断

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 10*np.pi, 1000)
y = t + np.sin(t)
t2 = t % (2*np.pi)

# Compute the difference between successive t2 values
diffs = np.append(np.diff(t2), 0)

# Find the differences that are greater than pi
discont_indices = np.abs(diffs) > np.pi

# Set those t2 values to NaN
t2[discont_indices] = np.nan

plt.plot(t2, y)
plt.show()

enter image description here

答案 1 :(得分:0)

您可以以稍微不同的方式解决相同的问题:创建一个从0到2 * pi的x网格,然后为y添加一个偏移量以绘制五个不同的曲线。此处的关键是使用索引t排除[0:-1]的最后一点,以避免连续行。

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 2*np.pi, 1000)
t = (t%(2*np.pi))[0:-1]

for i in range(5):
    y = t+ np.sin(t) + i*2*np.pi
    plt.plot(t, y, 'b')

enter image description here