【问题标题】:Drawing a vertical line for every non-zero value in a dataframe为数据框中的每个非零值绘制一条垂直线
【发布时间】:2019-07-24 12:16:24
【问题描述】:

我需要为数据框中的每个非零值制作垂直线。我使用以下方法创建了一个小数据框:

df = pd.DataFrame(np.random.randint(0,2,size=(100,1)))

我尝试在每个有 1 而不是 0 的地方创建一个带有垂直线的图:

graph = plt.figure(1)
plt.axvline(x = df)
graph.show()

但是,我收到此错误: “ValueError:DataFrame的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。”

有人知道怎么做吗?

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    使用axvline

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    
    df = pd.DataFrame(np.random.randint(0,2,size=(100,1)))
    
    fig, ax = plt.subplots()
    
    for i, row in df.iterrows():
        if row.values != 0:
            ax.axvline(x = i)
    
    plt.show()
    

    使用vlines

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    
    df = pd.DataFrame(np.random.randint(0,2,size=(100,1)))
    
    fig, ax = plt.subplots()
    
    x = df.index.values[(df.values[:,0] > 0)]
    ax.vlines(x, 0,1, transform=ax.get_xaxis_transform() )
    
    plt.show()
    

    【讨论】:

    • 太棒了!我尝试为此添加一个图例,但它为每个单独的行创建了一个图例项。您知道如何只创建一个代表整个线条的图例项吗?
    • 在第一种情况下,您需要手动创建图例。在第二种情况下,它使用 label 开箱即用。
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    相关资源
    最近更新 更多