【问题标题】:pandas and matplotlib: Combine two plots into one legend itempandas 和 matplotlib:将两个图合并为一个图例项
【发布时间】:2016-04-11 00:55:06
【问题描述】:

我有以下代码:

from pandas import DataFrame
import matplotlib.pyplot as plt

if __name__ == '__main__':
    lower_bound = [0, 1, 2, 3]
    value = [1, 2, 3, 4]
    upper_bound = [2, 3, 4, 5]
    d = {'Lower bound': lower_bound, 'Value': value, 'Upper bound': upper_bound}
    df = DataFrame(data=d)
    ax = df.plot()
    plt.show()

它创建了以下情节:

我想要相同的情节,但在图例中,我希望将“下限”和“上限”合并为一个,例如“边界”。当然,这两个边界现在将是相同的颜色(无论“边界”的图例中给出什么颜色)。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    好像这样做成功了:

    from pandas import DataFrame
    import matplotlib.pyplot as plt
    
    if __name__ == '__main__':
        lower_bound = [0, 1, 2, 3]
        value = [1, 2, 3, 4]
        upper_bound = [2, 3, 4, 5]
        d = {'Lower bound': lower_bound, 'Value': value, 'Upper bound': upper_bound}
        df = DataFrame(data=d)
        ax = df.plot(color=["Blue", "Blue", "Red"])
        lines, labels = ax.get_legend_handles_labels()
        ax.legend([lines[0], lines[2]], ["Bounds", "Value"])
        plt.show()
    

    我对颜色为何按此顺序的猜测: pandas 必须在绘制之前对列名进行排序。你会认为它会是

    colors = ["Blue", "Red", "Blue"]

    但请注意,“Lower Bound”、“Upper Bound”和“Value”是按键的字母顺序。

    注意:这是 anaconda 2.7,Python 3 的行为可能有所不同。

    【讨论】:

    • 到了一半,但在图例中还有两个不同的项目,“下限”和“上限”。我想用“Bounds”替换这两项。
    • 对不起,忘了那部分!我想我对列排序太着迷了。查看更新的答案。
    猜你喜欢
    • 2020-11-15
    • 2018-03-25
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多