强大好用的python绘图

强大好用的pythob绘图,对于测试人员来说也是常用的库,更好的输出测试结果,呈现出来的测试报告不仅高大上,而且数据清晰一目了然,加分不少,直接上代码:

#coding=utf-8
import pandas as pd
import numpy as np
import time
import matplotlib.pyplot as plt
from pyecharts import Map
import pylab
from PIL import Image
from pyecharts import WordCloud 
from pyecharts.engine import create_default_environment
import random
def num():
    plt.rcParams['savefig.dpi'] = 100 #图片像素
    plt.rcParams['figure.dpi'] = 100 #分辨率
    # mpl.use('Agg')
    # custom_font = mpl.font_manager.FontProperties(fname='zh.ttf')
    dic1={"name":["charlie","wang","jason","born"],"age":[17,24,23,36]}
    dic2={"name":["charlie","wang","jason","born"],"age":[20,4,9,13]}
    df3 = pd.DataFrame(dic1)
    df1=pd.DataFrame([["charlie","wang","jason","born"],[1,2,3,4],["beijing","tokyo","france","london"],["facebook","twitter","wechat","weiboc"]],index=("name","class","city","tool"),columns=("A","B","C","D"))
    print (df3)
    print (df1)
    print (df3.dtypes)
    print (df3.index)
    print (df3.values)
    print (df3.columns)
    print (df3['name'].values)
    print (df3.T)
    reportdata={'date': '20191128', 'online': [[1, 6, 3, 10], [2, 2, 1, 5], [2, 1, 3, 6], [1, 0, 1, 2], [1, 0, 1, 2], [0, 2, 3, 5], [0, 6, 3, 9], [3, 12, 2, 17], [5, 16, 3, 24], [3, 16, 6, 25], [5, 16, 6, 27], [5, 15, 5, 25], [5, 5, 2, 12], [2, 5, 2, 9], [0, 4, 3, 7], [0, 2, 2, 4], [1, 5, 1, 7], [3, 8, 5, 16], [3, 7, 8, 18], [2, 4, 6, 12], [2, 6, 3, 11], [3, 8, 3, 14], [4, 10, 3, 17], [4, 11, 5, 20]]}
    data = []
    group1=[]
    group2=[]
    group3=[]
    info = reportdata["online"]
    for i in info:
        data.append(i[3])
        group1.append(i[0])
        group2.append(i[1])
        group3.append(i[2])
    ##新建画布,添加子图
    fig = plt.figure()
    #在plt中,figure是整个画布,想要在画布上绘制多个子图axes,用fig.add_subplot()
    ax1 = fig.add_subplot(2,2,1) # 画2行1列个图形的第1个
    ax2 = fig.add_subplot(2,2,2) # 画2行1列个图形的第2个
    ax3 = fig.add_subplot(2,2,3)
    ax4 = fig.add_subplot(2,2,4)
    ###调整子图布局
    plt.subplots_adjust(hspace=0.25,wspace=0.15,left=0.05,bottom=0.03, right=0.97,top=0.97)
   
    ##子图1   折线图
    ax1.plot(dic1["name"], dic1["age"],c="red",label="2018",linewidth = 0.5)
    ax1.plot(dic2["name"], dic2["age"],"--",c="blue",label="2019")
    
    #legend()显示label,并可以设置显示的位置
    ax1.legend(loc="best")
    ##子图2   柱图
    bar_width = 0.3#bar 宽度值
    x= np.arange(24) #x轴value
    z1=ax2.bar(x,group1,bar_width,tick_label=x,label='charlie',fc="c")#第一个bar
    z2=ax2.bar(x+bar_width, group2, bar_width, align="center",label="semona",fc="red")#bar在x轴起始位置,y轴数据(bar高度),宽度,柱图的中点位置
    z3=ax2.bar(x+bar_width+bar_width, group3, bar_width, align="center",label="jessy",fc="green")
    # plt.title(u"在线时段",fontproperties=custom_font)
    for a, b,c,d in zip(x, group1,group2,group3):#zip将传入的数据打包成元祖,循环添加数字
        ax2.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', color="r",fontsize=10)
        ax2.text(a+bar_width, c + 0.05, '%.0f' % c, ha='center', va='bottom', fontsize=10)#上标在x轴的起始点,注释高度,精度,要显示的值,水平位置,垂直位置,cloor,文字大小
        ax2.text(a+bar_width*2, d + 0.05, '%.0f' % d, ha='center', va='bottom', fontsize=10)
    ax2.legend(loc="upper left")#显示图注,不调用legend()方法设置了labe也不会显示
    ##子图3  饼图
    ax3.pie(x=dic1["age"],labels=dic1["name"],explode = [0,0.05,0,0],autopct="%0.2f%%",frame=True)#x,数据,labels数据注释,autopct显示精度,explode炸出一块图,frame整图加外框
    ax3.legend(loc="upper left")#图注的位置
    ax3.axis('equal')#饼图这里x,y轴设备相等才是圆形
    ##子图4   多条折线图
    ax4.plot(range(24),data,"-",c="red",label="Total",marker='.',linewidth = 2)
    ax4.plot(range(24),group1,"--",c="blue",label="group_1",marker='.')
    ax4.plot(range(24),group2,"-.",c="green",label="group_2",marker='.')
    ax4.plot(range(24),group3,":",c="c",label="group_3",marker='.')#x轴数据,y轴数据,折线样式,折线颜色,折现标注,折线位点标志,折线粗度,
    ##c 青色 m 玫红
    plt.xticks(range(0,24, 1))#x轴刻度,这里要用plt才生效
    ax4.legend(loc="best")
    plt.savefig('scores_par.png')
    plt.show()
##地图
def map():
    value = [95.1, 23.2, 43.3, 66.4, 88.5]
    attr = ["China", "Canada", "Brazil", "Russia", "United States"]
    map0 = Map("世界地图示例", width=1200, height=600)
    map0.add("世界地图", attr, value, maptype="world", is_visualmap=True, visual_text_color='#000')
    map0.render(path="世界地图.html")
    province_distribution = {'河南': 45.23, '北京': 37.56, '河北': 21, '辽宁': 12, '江西': 6, '上海': 20, '安徽': 10, '江苏': 16, '湖南': 9,'浙江': 13, '海南': 2, '广东': 22, '湖北': 8, '黑龙江': 11, '澳门': 1, '陕西': 11, '四川': 7, '内蒙古': 3, '重庆': 3,'云南': 6, '贵州': 2, '吉林': 3, '山西': 12, '山东': 11, '福建': 4, '青海': 1, '天津': 1,'其他': 1}
    provice = list(province_distribution.keys())
    values = list(province_distribution.values())
    map1 = Map("中国地图", '中国地图', width=1200, height=600)
    map1.add("", provice, values, visual_range=[0, 50], maptype='china', is_visualmap=True,
            visual_text_color='#000')
    map1.render(path="中国地图.html")
    fig = plt.figure()
    ax1 = fig.add_subplot(2,1,1)
    ax2 = fig.add_subplot(2,1,2)
    ax1=Image.open("./世界地图示例.png")
    ax2=Image.open("./中国地图.png")
    plt.imshow(ax1)
    plt.imshow(ax2)
    plt.axis('off')
    pylab.show()
##词云
def cloud():
#    name =['Lady Gaga', 'Jay-Z', 'Chalie Puth', 'Sam Smith', 'Justin Timberlake', 'Bruno Mars', 'Prince', 'Imagine Dragons',' Travis Scott',
 #   'Adele Adkins', 'Lorde', 'Demi Lovato', 'Nicki Minaj', 'Ariana Grande', 'Taylor Swift', 'P!nk', 'Zedd',' Innov Gnawa','Lady Antebellum',
  #  'Katy Perry', 'Selena Gomez', 'Rita Ora', 'Lana Del Rey', 'Rihanna', 'Chris Brown','Khalid','Ke$ha','SZA','Beyoncé',
   # 'One Derction','Ed Shreed','westlife','Avril Lavigne','Adam Lambert','Marron 5','Adam Levine','Cold Play','Zayn',
    #'QUEEN','Iggy Azalea','Paloma Faith','Pitbull','Gwen Stefani']
    name = ["蓝超巨星","激发态","维多利亚多管水母","傅里叶","飞鸟时期","Vincent van Gogh","木卫一","大天使米迦勒","猎户座","干细胞","减数分裂","uranus",
    "芥川龙之介","金刚怒目","菩萨低眉","卡拉瓦乔","十七贴","矮大紧","苏麻离青","格里芬"]
    value = []
    for i in name:
        value.append(random.randint(300,1100))
    #value =[10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265]
    wordcloud =WordCloud(width=820, height=1780 )
    wordcloud.add("", name, value, word_size_range=[10, 40])
    wordcloud.shape='triangleforward'
    #wordcloud.show_config()
    wordcloud.render(path="cloud.html")
if __name__ == "__main__":
    # map()
    num()
    # cloud()

最终呈现:
在这里插入图片描述

常规的一些数据,柱图折线图基本可以满足,

在这里插入图片描述

词云图,右边刷新按钮点击可以变换排列的方式,

在这里插入图片描述
在这里插入图片描述

呈现热力图等等来说也非常便捷
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值