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

matplotlib箭头颜色未按预期工作

  •  0
  • lucky1928  · 技术社区  · 3 年前

    如何更改下面演示代码中的箭头颜色?

    import matplotlib.pyplot as plt
    
    def save_fig(fig,pngname):
        fig.savefig(pngname, dpi=fig.dpi, bbox_inches="tight")
        print("[[%s]]"%pngname)    
        return
    
    def add_arrow(fig,ax,lw,lc):
        xmin,xmax = ax.get_xlim()
        ax.arrow(xmin,0,xmax-xmin+.2,0,#fc='k', ec='k',
             lw = lw,head_width=.1,head_length=0.4, overhang = 0, 
             length_includes_head=False, clip_on = False,edgecolor='k',facecolor=lc) 
        return
    
    def main():
        x = [
        #"FLAGS",
        "INTENDED_VSYNC",
        "VSYNC",
        "OLDEST_INPUT_EVENT",
        "HANDLE_INPUT_START",
        "ANIMATION_START",
        "PERFORM_TRAVERSALS_START",
        "DRAW_START",
        "SYNC_QUEUED",
        "SYNC_START",
        "ISSUE_DRAW_COMMANDS_START",
        "SWAP_BUFFERS",
        "FRAME_COMPLETED",
       ]
    
        lw = 2
        lc = "grey"
        fig, ax = plt.subplots(1, figsize=(8,.2))
        y = [0]*len(x)
        ax.plot(x,y,color=lc)
    
        ax.set_ylim([0,0.1])
        plt.xticks(rotation=45,ha='right')
        ax.tick_params(direction = 'inout',color=lc)
        ax.tick_params('both', length=20, width=lw, which='major')
        ax.tick_params('both', length=10, width=lw, which='minor')
        plt.yticks([], [])
        for direction in ["left", "right", "bottom", "top"]:     
            ax.spines[direction].set_visible(False)
        add_arrow(fig,ax,lw,lc)
        #save_fig(fig,sdir + "/vsync.png")
        plt.show()
        return
    sdir = "/home/tester"
    main()
    

    输出: enter image description here

    0 回复  |  直到 3 年前
        1
  •  1
  •   fabianegli    3 年前

    颜色在中定义 ax.arrow() 通过 color , edgecolor facecolor

    • 边缘色 设置箭头边缘的颜色。
    • 面部颜色 设置箭头体中的颜色。
    • 颜色 设置两者的颜色, 边缘色 面部颜色

    如果你想要一个统一颜色的箭头,你可以设置 颜色 或者可替换地将两者都设置, 边缘色 面部颜色 到相同的值。在这种情况下,这意味着删除 边缘色 面部颜色 并添加 color=lc 或者替换 edgecolor='k' 具有 edgecolor=lc


    import matplotlib.pyplot as plt
    
    def save_fig(fig,pngname):
        fig.savefig(pngname, dpi=fig.dpi, bbox_inches="tight")
        print("[[%s]]"%pngname)    
        return
    
    def add_arrow(fig,ax,lw,lc):
        xmin,xmax = ax.get_xlim()
        ax.arrow(xmin,0,xmax-xmin+.2,0,#fc='k', ec='k',
             lw = lw,head_width=.1,head_length=0.4, overhang = 0, 
             length_includes_head=False, clip_on = False,color=lc) 
        return
    
    def plot():
        x = [
        #"FLAGS",
        "INTENDED_VSYNC",
        "VSYNC",
        "OLDEST_INPUT_EVENT",
        "HANDLE_INPUT_START",
        "ANIMATION_START",
        "PERFORM_TRAVERSALS_START",
        "DRAW_START",
        "SYNC_QUEUED",
        "SYNC_START",
        "ISSUE_DRAW_COMMANDS_START",
        "SWAP_BUFFERS",
        "FRAME_COMPLETED",
       ]
    
        lw = 2
        lc = "grey"
        fig, ax = plt.subplots(1, figsize=(8,.2))
        y = [0]*len(x)
        ax.plot(x,y,color=lc)
    
        ax.set_ylim([0,0.1])
        plt.xticks(rotation=45,ha='right')
        ax.tick_params(direction = 'inout',color=lc)
        ax.tick_params('both', length=20, width=lw, which='major')
        ax.tick_params('both', length=10, width=lw, which='minor')
        plt.yticks([], [])
        for direction in ["left", "right", "bottom", "top"]:     
            ax.spines[direction].set_visible(False)
        add_arrow(fig,ax,lw,lc)
        #save_fig(fig,sdir + "/vsync.png")
        plt.show()
        return
    
    plot()
    

    enter image description here