matplotlib legend: Including markers and lines from two different graphs in one line

后端 未结 3 1172
难免孤独
难免孤独 2020-12-20 20:56

I\'ve been doing some linear regression and want to plot the markers (original data) and the lines (regression) on the same line in the legend. For simplicity, here\'s a fak

相关标签:
3条回答
  • 2020-12-20 21:37

    You just need to use legend a bit more directly. See Matplotlib - How to make the marker face color transparent without making the line transparent and user guide.

    ax.legend([(p1, p3), (p2, p4)], ['set 1', 'set 2'])
    plt.draw()
    
    0 讨论(0)
  • 2020-12-20 21:45

    You can just try with

    from pylab import *
    ax = subplot(1,1,1)
    p1, = ax.plot([1,2,3,4,5,6],'r-')
    p2, = ax.plot([6,5,4,3,2,1],'b-')
    
    p3, = ax.plot([1.2,1.8,3.1,4.1,4.8,5.9],'r-o', label="dots 1")
    p4, = ax.plot([6.1,5.1,3.8,3.1,1.9,0.9],'b-o', label="dots 2")
    
    ax.legend(loc='center right',numpoints=1)
    show()
    

    or if you want a poor man's solution, you can plot something outside your plotting range and label only that plot. For instance

    p5 = ax.plot(ones(2)*1e6,ones(2)*1e6,'r-o', label="dots 1")
    

    do the same for the other label and then force your plot not to include p5, for example, like this

    ax.set_xlim(0,10);ax.set_ylim(0,10)
    
    0 讨论(0)
  • 2020-12-20 21:57

    I usually solve this problem by creating dummy lines with the plot properties that I am interested in showing. However, I think @tcaswell's solution is better.

    from matplotlib.lines import Line2D
    
    def create_dummy_line(**kwds):
        return Line2D([], [], **kwds)
    
    # your code here
    
    # Create the legend
    lines = [
        ('name A', {'color': 'red', 'linestyle': '-', 'marker': 'o'}),
        ('name B', {'color': 'blue', 'linestyle': '-', 'marker': 'o'}),
    ]
    ax.legend(
        # Line handles
        [create_dummy_line(**l[1]) for l in lines],
        # Line titles
        [l[0] for l in lines],
        loc='center right'
    )
    
    0 讨论(0)
提交回复
热议问题