• python画Bar(html+nphtml)生成透明图片保存


    一、Bar----pyecharts

    这种用pyecharts库带的方法导出来是html,我感觉不是很精简

    from pyecharts import Line, Bar
    # pip install pyecharts==0.1.9.4
    def barDemo():
        list1 = [0.1563,0.1524,0.1519, 0.1524] #KS
        list2 = [0.3139,0.3116,0.3138,0.3111] #KSM
        labes1 = ["PCA","FA","GRP","SRP"]
        line = Line()
        line.add("KS",labes1,list1,is_label_show=True)
        line.add("KSM",labes1,list2,is_label_show=True)
        line.render()
    
        bar = Bar()
        bar.add("KS",labes1,list1)
        bar.add("KSM",labes1,list2)
        bar.render("res/1.html")
        # overlap.add(bar)
        # overlap.add(line)
        # overlap.render()
        # list1 = np.array(Flist)
        # a_lengend=""
        # labels = np.array(labes1)
        # bar_figure(list1,a_lengend,labels)
    
    if __name__ == "__main__":
        # drawLineStyle()
        barDemo()

    效果如下所示:

    二、Bar----matplotlib

    运用第二种是因为第一种改变字体大小和格式(想着日后论文中使用,也要画图,上图那种满足不了的,不好看),搜了博客也一知半解,试图直接在HTML上改变,也有点效果,可以还是觉得麻烦,我不能每画一张,就改一遍吧,尝试用matplotlib来解决

    data.py

    ### data.py
    
    bigram_F1Score_list=[0.724266, 0.730357, 0.722058, 0.718748, 0.718975, 0.718422]
    jieba_feature_F1Score_list=[0.922546, 0.87944, 0.980582, 0.978843, 0.981803, 0.959068]
    bag_of_words_F1Score_list=[0.879261, 0.770276, 0.893485, 0.892955, 0.892227, 0.890149]
    bigram_words_F1Score_list=[0.727329, 0.732884, 0.725446, 0.724224, 0.72183, 0.721357]
    def autolabel(rects):
        """Attach a text label above each bar in *rects*, displaying its height."""
        for rect in rects:
            height = rect.get_height()
            ax.annotate('{:.2f}'.format(height),
                        xy=(rect.get_x() + rect.get_width() / 2, height),
                        xytext=(0, -7),  # 3 points vertical offset
                        textcoords="offset points",
                        ha='center', va='bottom',rotation=45)    # 'vertical'
    def barDemo_notHtml():
        x = np.arange(3,21,3) 
        width = 0.6 
        axes_width = 3  # 刻度线宽度
        axes_length = 6  # 刻度线长度
        spines_width = 3  # 坐标轴的宽度
        fig, ax = plt.subplots(figsize=(6.4,4.8), dpi=500)
        labels = ["BerNB", "MultiNB", "LogReg", "SVC" ,"LSVC", "NuSVC"]
        rects1 = ax.bar(x - width*1.5, data.bigram_F1Score_list, width, color='#FF7F0E', alpha=0.6,label='bigram')  # 画第一批数据
        rects2 = ax.bar(x - width/2, data.jieba_feature_F1Score_list, width, color='#1F77B4', alpha=1,label='jieba')  # 画第二批数据
        rects3 = ax.bar(x + width/2, data.bag_of_words_F1Score_list, width, color='r', alpha=0.6,label='bag')  # 画第一批数据
        rects4 = ax.bar(x + width *1.5 , data.bigram_words_F1Score_list, width, color='c', alpha=1,label='bigram_words')  # 画第二批数据
    
        # Add some text for labels, title and custom x-axis tick labels, etc.
        ax.set_ylabel('F1-Scores', fontsize="large", weight=font_weight, family = "Arial")
        # ax.set_title('Scores by group and gender', fontsize="large", weight=font_weight, family="Arial")
        ax.set_xticks(x)
        ax.set_xticklabels(labels)
        # Left border is always shown
        # ax.spines["left"].set_linewidth(spines_width)
        for key in ("top", "bottom", "right","left"):
        # axes.spines[key].set_visible(False)
            ax.spines[key].set_linewidth(spines_width)
    
        ax.tick_params(axis="y", width=axes_width, length = axes_length)  # 刻度线
        ax.tick_params(axis="x", width=axes_width, length = axes_length)
        # plt.grid(axis='y') # 网格线 x,y,both  ,有点问题
        autolabel(rects1)   # 添加 标注
        autolabel(rects2)
        autolabel(rects3)   # 添加 标注
        autolabel(rects4)
        fig.tight_layout()
    
        # patches = [ mpatches.Patch(color=color[i], label="{:s}".format(labels[i]) ) for i in range(len(color)) ]
        ax=plt.gca()
        box = ax.get_position()
        ax.set_position([box.x0, box.y0, box.width , box.height])
        #下面一行中bbox_to_anchor指定了legend的位置
        # ax.legend(handles=patches, bbox_to_anchor=(0.95,1.12), ncol=4) #生成legend
        
        legend = ax.legend(edgecolor="w",bbox_to_anchor=(0.85,1.1), ncol=4)
        frame = legend.get_frame()
        frame.set_alpha(1)
        frame.set_facecolor('none') # 设置图例legend背景透明
        plt.show()
        # 保存为透明背景的图片
        fig.savefig('res/pic/4.png', format='png', bbox_inches='tight', transparent=True, dpi=600) 

    效果如下图所示:

    三、参考

    https://blog.csdn.net/hfut_jf/article/details/52648033

  • 相关阅读:
    电商杂谈我对于各类平台的看法及八卦杂谈
    echo的实现
    Autofac依赖注入
    asp.net中获取系统信息
    openlayers 地图事件
    C# Finalize和Dispose的区别
    NET中MSMQ的使用附例子
    图像处理之相似图片识别
    openlayers图片样式替换
    WPF触发器
  • 原文地址:https://www.cnblogs.com/z-712/p/14186008.html
Copyright © 2020-2023  润新知