【问题标题】:Plotting Right extended horizontal line matplotlib绘制右延伸水平线 matplotlib
【发布时间】:2020-05-07 19:12:27
【问题描述】:

我正在尝试使用 matplotlib 绘制右延伸的水平线,但我找不到需要您帮助的方法。

1- 我有一个带有日期、价格和指标值的 pandas df
2-我想在一个图表中绘制价格作为一条线,并且在价格之上我想绘制一条延长线,其中我的指标值高于阈值,预期结果类似于这张图片。

第二个屏幕截图你可以看到价格线上的那些彩色圆圈我想用一条水平右延长线替换它们。 数据.csv:https://drive.google.com/open?id=1ncTTvwJXVeh6dMHrIML7MpjlS-Yfox_o

我正在尝试的代码 sn-p:

import pandas as pd 
import matplotlib.pyplot as plt

df = pd.read_csv('plot_data.csv')

BW121 = df[['BW121','Close']]
BW121 = BW121.where(BW121.BW121>70).dropna()

BW50=df[['BW50','Close']]
BW50 = BW50.where(BW50.BW50>70).dropna()

LW121 =df[['LW121','Close']]
LW121 = LW121.where(LW121.LW121>70).dropna()

LW50 = df[['LW50','Close']]
LW50 = LW50.where(LW50.LW50>70).dropna()

plt.style.use('fivethirtyeight')
plt.scatter(BW121.index,BW121['Close'], color ="green",label='BW121')
plt.scatter(BW50.index , BW50['Close'], color ="blue", s=80,label='BW50')

plt.scatter(LW121.index , LW121['Close'], color ="red", s=80,label='LW121')
plt.scatter(LW50.index , LW50['Close'], color ="orange", s=80,label='LW50')

#Price Plot
plt.plot(df.index, df['Close'], marker='',alpha = 0.5,color='green')

plt.legend(loc='upper right')
plt.show()

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    要在matplotlib 中绘制一条水平线,您可以使用plt.axhline

    plt.scatter(BW50['Close'], color="blue", label='BW50')
    

    axhlinexminxmax 参数,如果您不希望线条水平填充绘图。

    根据您的具体结果,您可以尝试:

    import pandas as pd 
    import matplotlib.pyplot as plt
    
    df = pd.read_csv('plot_data.csv')
    
    BW121 = df[['BW121','Close']]
    BW121 = BW121.where(BW121.BW121>70).dropna()
    
    BW50=df[['BW50','Close']]
    BW50 = BW50.where(BW50.BW50>70).dropna()
    
    LW121 =df[['LW121','Close']]
    LW121 = LW121.where(LW121.LW121>70).dropna()
    
    LW50 = df[['LW50','Close']]
    LW50 = LW50.where(LW50.LW50>70).dropna()
    
    plt.style.use('fivethirtyeight')
    plt.scatter(BW121.index,BW121['Close'], color ="green",label='BW121')
    plt.scatter(BW50.index , BW50['Close'], color ="blue", s=80,label='BW50')
    # axhline used here, one for each 'Close' value
    for i in BW50['Close']:
        plt.axhline(i, color ="blue", lw=0.5)
    
    plt.scatter(LW121.index , LW121['Close'], color ="red", s=80,label='LW121')
    plt.scatter(LW50.index , LW50['Close'], color ="orange", s=80,label='LW50')
    # could repeat axhline here for other data etc.
    
    #Price Plot
    plt.plot(df.index, df['Close'], marker='',alpha = 0.5,color='green')
    
    plt.legend(loc='upper right')
    plt.show()
    

    【讨论】:

    • 我对这种方法很熟悉,但是我怎样才能正确地使用我的 df 呢?
    • 我对我的回答做了一些修改。你的BW50['Close'] 系列有两个值,所以你可以选择一个来绘制或绘制一条线,就像我在这里所做的那样。
    • 谢谢帕迪先生,您的代码运行良好,我只是想知道是否可以从某个值开始而不是完全水平?