是否有一种简单的方法可以在曲线图上绘制散点图上的垂直线

时间:2016-10-21 00:14:45

标签: python matplotlib jupyter-notebook plotly

我正在尝试使用jupyter代替plotly重新处理某些matplotlib笔记本。我原来的功能是

def plot_power_spectrum(y):
    ps = np.abs(np.fft.fft(y - np.mean(y)))**2

    time_step = 1.0/6 # hours

    freqs = np.fft.fftfreq(y.size, time_step)
    idx = np.argsort(freqs)

    plt.plot(freqs[idx], ps[idx])
    plt.axvline(2*np.pi/168.0, color="magenta", alpha=0.4, lw=5)
    plt.axvline(-2*np.pi/168.0, color="magenta", alpha=0.4, lw=5)

我看不到在plotly中添加此类垂直线(或其他标记)的简单方法。

我发现this使用了袖扣pandas集成。虽然函数名称相同(iplot)但它似乎没有任何关系。

我也看到了this similar question。我所能想到的只是“肯定有一种更简单的方式”......有吗?

1 个答案:

答案 0 :(得分:3)

在剧情中没有问题。这是我的笔记本电脑:

from plotly.graph_objs import *
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)

y=np.random.randint(30,size=100)

ps = np.abs(np.fft.fft(y - np.mean(y)))**2

time_step = 1.0/6 # hours

freqs = np.fft.fftfreq(y.size, time_step)
idx = np.argsort(freqs)


data = Scatter(x=freqs[idx], y=ps[idx])
layout = Layout(shapes=[dict({
            'type': 'line',
            'x0': 2*np.pi/168.0,
            'y0': 0,
            'x1': 2*np.pi/168.0,
            'y1': 35000,
            'line': {
                'color': '#FF00FF',
                'width': 5
            }})])
iplot({'data':[data], 'layout':layout})

有关更多示例,请查看此处的形状部分:https://plot.ly/python/shapes/