美文网首页呆鸟的Python数据分析
Python可视化31|matplotlib-图添加文本(tex

Python可视化31|matplotlib-图添加文本(tex

作者: pythonic生物人 | 来源:发表于2020-09-05 10:11 被阅读0次

    本文详细介绍如何给一张图添加注释文字、指引箭头

    本文速览

    更多教程,欢迎关注@pythonic生物人

    • 不同axes之间注释箭头连接文本
    image
    • 之前介绍的venn图中个性化添加注释文本框
    image

    目录

    1、添加文本(matplotlib.pyplot.text) 
    文本基本参数设置
    给文本加上背景框 
    背景文本框形状
    
    2、添加注释(matplotlib.pyplot.annotate)
    基本参数设置
    修改箭头形状 
    箭头弯曲 
    跨子图注释
    

    1、添加文本(matplotlib.pyplot.text)

    语法:matplotlib.pyplot.text(x, y, s, fontdict=None, **kwargs)

    • 文本基本参数设置

    import matplotlib.pyplot as plt
    plt.style.use('seaborn-whitegrid')
    plt.figure(figsize=(5,4),dpi=120)
    plt.plot([1,2,5],[7,8,9])
    plt.text(x=2.2,#文本x轴坐标 
             y=8, #文本y轴坐标
             s='basic unility of text', #文本内容
             rotation=1,#文字旋转
             ha='left',#x=2.2是文字的左端位置,可选'center', 'right', 'left'
             va='baseline',#y=8是文字的低端位置,可选'center', 'top', 'bottom', 'baseline', 'center_baseline'
             fontdict=dict(fontsize=12, color='r',
                           family='monospace',#字体,可选'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'
                           weight='bold',#磅值,可选'light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'
                          
                          )#字体属性设置
            )
    
    image
    • 给文本加上背景框

    import matplotlib.pyplot as plt
    plt.figure(figsize=(5,4),dpi=120)
    plt.plot([1,2,5],[7,8,9])
    text = plt.text(x=2.2,#文本x轴坐标 
             y=8, #文本y轴坐标
             s='basic unility of text', #文本内容
             
             fontdict=dict(fontsize=12, color='r',family='monospace',),#字体属性字典
             
             #添加文字背景色
             bbox={'facecolor': '#74C476', #填充色
                  'edgecolor':'b',#外框色
                   'alpha': 0.5, #框透明度
                   'pad': 8,#本文与框周围距离 
                  }
             
            )
    
    text.set_color('b')#修改文字颜色
    
    image
    • 背景文本框形状

    • 形状种类 image
    • 形状参数

    Circle  circle  pad=0.3
    DArrow  darrow  pad=0.3
    LArrow  larrow  pad=0.3
    RArrow  rarrow  pad=0.3
    Round   round   pad=0.3,rounding_size=None
    Round4  round4  pad=0.3,rounding_size=None
    Roundtooth  roundtooth  pad=0.3,tooth_size=None
    Sawtooth    sawtooth    pad=0.3,tooth_size=None
    Square  square  pad=0.3
    
    • 举个栗子
    plt.figure(figsize=(5,4),dpi=120)
    plt.plot([1,2,5],[7,8,9])
    plt.text(x=2.2,#文本x轴坐标 
             y=8, #文本y轴坐标
             s='basic unility of text', #文本内容
             
             fontdict=dict(fontsize=12, color='r',family='monospace',),#字体属性字典
             
             #添加文字背景色
             bbox={'facecolor': '#74C476', #填充色
                  'edgecolor':'b',#外框色
                   'alpha': 0.5, #框透明度
                   'pad': 0.8,#本文与框周围距离 
                   'boxstyle':'sawtooth'
                  }
             
            )
    plt.show()
    
    image

    2、添加注释(matplotlib.pyplot.annotate)

    语法:matplotlib.pyplot.annotate(text, xy, *args, **kwargs)matplotlib.pyplot.annotate结合matplotlib.pyplot.text添加注释内容。

    • 基本参数设置

    plt.figure(figsize=(5,4),dpi=120)
    plt.plot([1,2,5],[7,8,9])
    
    plt.annotate('basic unility of annotate', 
                 xy=(2, 8),#箭头末端位置
                 
                 xytext=(1.0, 8.75),#文本起始位置
                 
                 #箭头属性设置
                arrowprops=dict(facecolor='#74C476', 
                                shrink=1,#箭头的收缩比
                                alpha=0.6,
                                width=7,#箭身宽
                                headwidth=40,#箭头宽
                                hatch='--',#填充形状
                                frac=0.8,#身与头比
                                #其它参考matplotlib.patches.Polygon中任何参数
                               ),
                )
    
    image
    • 修改箭头形状

    • 可选箭头形状 image
    • 形状参数

    箭头名称 详细参数
    -   None
    ->  head_length=0.4,head_width=0.2
    -[  widthB=1.0,lengthB=0.2,angleB=None
    |-| widthA=1.0,widthB=1.0
    -|> head_length=0.4,head_width=0.2
    <-  head_length=0.4,head_width=0.2
    <-> head_length=0.4,head_width=0.2
    <|- head_length=0.4,head_width=0.2
    <|-|>   head_length=0.4,head_width=0.2
    fancy   head_length=0.4,head_width=0.4,tail_width=0.4
    simple  head_length=0.5,head_width=0.5,tail_width=0.2
    wedge   tail_width=0.3,shrink_factor=0.5
    
    • 举个栗子
    plt.figure(figsize=(5,4),dpi=120)
    plt.plot([1,2,5],[7,8,9])
    
    plt.annotate('basic unility of annotate', 
                 xy=(2, 8),
                 xytext=(1.0, 8.75),
                 arrowprops=dict(facecolor='#74C476', 
                                alpha=0.6,
                                arrowstyle='-|>',#箭头类型修改
                                 color='r'
                               ),
                )
    
    • 箭头弯曲

    plt.figure(figsize=(5,4),dpi=120)
    plt.plot([1,2,5],[7,8,9])
    
    plt.annotate('basic unility of annotate', 
                 xy=(2, 8),
                 xytext=(1.0, 8.75),
                 arrowprops=dict(facecolor='#74C476', 
                                 alpha=0.6,
                                 arrowstyle='-|>',
                                 connectionstyle='arc3,rad=0.5',#有多个参数可选
                                 color='r',
                                ),
                )
    plt.show()
    
    image
    • 跨子图注释

    from matplotlib.text import OffsetFrom
    fig, (ax1, ax2) = plt.subplots(1, 2,dpi=120)
    
    bbox_args = dict(boxstyle="round", fc="lightgreen")
    arrow_args = dict(arrowstyle="->",color='r')
    
    ax1.annotate('Cupid arrow end at ax1', xy=(.5, .75),
                       xytext=(.5, .3), 
                       ha="center", va="center",
                       bbox=bbox_args,
                       arrowprops=dict(patchB=an1.get_bbox_patch(),
                                       connectionstyle="arc3,rad=0.2",
                                       **arrow_args))
    
    ax1.annotate('Stop here', xy=(.5, .7), 
                       xytext=(.5, .8), 
                       ha="center", va="center",
                       bbox=bbox_args,
                       )
    
    ax2.annotate('Cupid arrow start from ax2',
                 xy=(0.85, 0.3), xycoords=ax1.transData,#跨子图设置
                 xytext=(10, 10),
                 textcoords=OffsetFrom(ax2.bbox, (0, 0), "points"),
                 ha="left", va="bottom",
                 bbox=bbox_args,
                 arrowprops=dict(connectionstyle="arc3,rad=0.5",
                                 **arrow_args,
                                
                                ))
    
    ax2.set(xlim=[-2, 2], ylim=[-2, 2])
    plt.show()
    
    image
    参考资料

    https://matplotlib.org/tutorials/text/annotations.html

    更多教程,欢迎关注@pythonic生物人

    干货,真香

    相关文章

      网友评论

        本文标题:Python可视化31|matplotlib-图添加文本(tex

        本文链接:https://www.haomeiwen.com/subject/bxbxektx.html