代码之家  ›  专栏  ›  技术社区  ›  user6083088

使用带水平线的pandas绘制矩形面片

  •  0
  • user6083088  · 技术社区  · 8 年前

    我试图从一个给定的数据框绘制一个正方形矩形。我可以一直编码到水平线,但正方形矩形补丁不起作用。

    tips = pd.DataFrame([20, 10, 50, 60, 90, 20, 30, 15, 75, 35], columns = ['Tips'])
    tips.index += 1
    tips.index.name = 'Meals'
    next_tip = tips.mean()
    tips['Tips'] = tips['Tips'].astype(float) 
    tips['Residuals'] = tips['Tips'] - float(next_tip)
    
    plot = tips.reset_index().plot.scatter(x=tips.index.name, y='Tips', label='Tip Amount', s=60, figsize=(15,5))
    plot.axhline(next_tip[0], linestyle='dashdot', color='orange', linewidth=3, label='Best fit')
    plot.annotate('  -20.5', xy=(1, 40.5), xytext=(1, 20), arrowprops=dict(facecolor='black', width=0.1, headwidth=6))
    plot.annotate('   19.5', xy=(4, 40.5), xytext=(4, 60), arrowprops=dict(facecolor='black', width=0.1, headwidth=6))
    plot.annotate('   -9.5', xy=(7, 40.5), xytext=(7, 30), arrowprops=dict(facecolor='black', width=0.1, headwidth=6))
    plot.patches(xy=(1, 20), width=20, height=20)
    

    enter image description here

    1 回复  |  直到 8 年前
        1
  •  0
  •   DavidG    8 年前

    要将矩形添加到轴上,需要使用 matplotlib.patches.Rectangle ,然后使用 axes.add_patch

    import matplotlib.pyplot as plt
    import matplotlib.patches as patches
    import pandas as pd    
    
    tips = pd.DataFrame([20, 10, 50, 60, 90, 20, 30, 15, 75, 35], columns = ['Tips'])
    tips.index += 1
    tips.index.name = 'Meals'
    next_tip = tips.mean()
    tips['Tips'] = tips['Tips'].astype(float) 
    tips['Residuals'] = tips['Tips'] - float(next_tip)
    
    plot = tips.reset_index().plot.scatter(x=tips.index.name, y='Tips', label='Tip Amount', s=60, figsize=(15,5))
    plot.axhline(next_tip[0], linestyle='dashdot', color='orange', linewidth=3, label='Best fit')
    plot.annotate('  -20.5', xy=(1, 40.5), xytext=(1, 20), arrowprops=dict(facecolor='black', width=0.1, headwidth=6))
    plot.annotate('   19.5', xy=(4, 40.5), xytext=(4, 60), arrowprops=dict(facecolor='black', width=0.1, headwidth=6))
    plot.annotate('   -9.5', xy=(7, 40.5), xytext=(7, 30), arrowprops=dict(facecolor='black', width=0.1, headwidth=6))
    
    # create the rectangle
    rect = patches.Rectangle(xy=(1, 20), width=20, height=20, fill=False)
    # add it to the axes
    plot.add_patch(rect)
    
    plt.show()