精华内容
下载资源
问答
  • python可视化图表

    2020-09-01 17:26:39
    绘制组合图表---折线图+折线图 折线图+柱形图 绘制双y轴图表 绘制双y轴图表 绘制双x轴图表 图表的其他样式 使用新样式的方式 制作折线图并且保存至桌面 import matplotlib.pyplot as plt import numpy as np #没有...

    制作折线图并且保存至桌面

    import matplotlib.pyplot as plt
    import numpy as np
    #没有以下两句,就不会显示中文,识别不出来
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    plt.subplot(1,1,1)
    x=np.array([1,2,3,4,5,6,7,8,9])
    y=np.array([886,2335,5710,6482,6120,1605,3813,4428,4361])
    plt.plot(x,y,color='k',linestyle='dashdot',linewidth=1,marker='o',markersize=5,label='1-9月注册用户数') #绘图
    
    plt.title('1-9月用户注册量',loc='center')#设置标题,标题名及标题的位置
    plt.grid(True)#设置网格线
    plt.legend()#设置图例,调用显示出plot中的lable值
    for a,b in zip(x,y):
        plt.text(a,b,b,ha='center',va='bottom',fontsize=10) 
        #添加数据标签,数据标签的位置,文字大小,注意第二个b表示显示y值
    
    
    plt.savefig(r'D:\Users\ctrip\Desktop\plot.jpg') #保存图表至桌面
    

    运行上面代码就会输出图表并且保存至桌面喽~
    在这里插入图片描述

    柱状图

    #柱状图
    
    #plt.bar(x,y,height,width=0.8,bottom=None,align='center',color,edgecolor)
    #height:表示每根柱子的高度
    #width:表示每根柱子的宽度,可以一样 也可以不一样
    #bottom:表示每根柱子的底部位置,每根柱子的底部位置可以都一样,也可以不同
    #align:表示柱子的位置与x值的关系,有center,edge两个参数可选;
    #color:柱子颜色
    #edgecolor:柱子边缘的颜色
    
    import matplotlib.pyplot as plt
    import numpy as np
    #没有以下两句,就不会显示中文,识别不出来
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    plt.subplot(1,1,1)
    x=np.array(['东区','西区','南区','北区'])
    y=np.array([8566,6482,5335,7310])
    plt.bar(x,y,width=0.5,align='center',label='任务量555',color='m')#柱状图
    plt.title('全国各分区任务量',loc='center')#标题
    for a,b in zip(x,y):
        plt.text(a,b,b,ha='center',va='bottom',fontsize=12)#数据标签
    plt.xlabel('分区')#轴名称
    plt.ylabel('任务量222')
    plt.legend()#图例
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\bar.jpg')#保存图片
    

    在这里插入图片描述

    簇状条形图

    #制作簇状条形图:注意第二个y的x在做条形图以及添加数据标签时,都需要增加1个y的宽度
    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    plt.subplot(1,1,1)
    x=np.array([1,2,3,4])
    y1=np.array([8566,5335,7310,6482])
    y2=np.array([4283,2667,3655,3241])
    
    plt.bar(x,y1,width=0.3,label='任务量5555')  #y1正常
    plt.bar(x+0.3,y2,width=0.3,label='完成量5555')#y2的x在原来基础上+y1的宽度
    
    plt.title("完成情况",loc='center')
    plt.xlabel('区域')
    plt.ylabel('任务情况')
    for a,b in zip(x,y1):
        plt.text(a,b,b,ha='center',va='bottom',fontsize=12)
    for a,b in zip(x+0.3,y2):
        plt.text(a,b,b,ha='center',va='bottom',fontsize=12)  #y2的x在原来基础上+y1的宽度
    
    plt.xticks(x+0.15,['东区','西区','南区','北区'])  #重新编辑x轴的刻度,注意每相隔了3个y的宽度
    plt.grid(False)
    plt.legend()
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\bar2.jpg')
    

    在这里插入图片描述

    堆积柱形图

    #制作堆积柱形图
    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    plt.subplot(1,1,1)
    x=np.array(['东区','西区','南区','北区'])
    y1=np.array(['8856,6584,5335,7310'])
    y2=np.array(['4283,3241,2667,3555'])
    
    plt.bar(x,y1,width=0.5,label='任务量',align="center")
    plt.bar(x,y2,width=0.5,label='完成量',bottom=y1,align="center")
    
    for a,b in zip(x,y1):
        plt.text(a,b,b,ha='center',va='bottom',fontsize=13)
    for a,b in zip(x,y2):
        plt.text(a,b,b,ha='center',va='bottom',fontsize=13)
    
    plt.title("完成情况",loc='center')
    plt.xlabel("区域")
    plt.ylabel("任务情况")
    
    plt.grid(False)
    plt.legend(loc='upper center',ncol=2)
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\bar堆积图.jpg')
    

    - [ ] List item

    堆积图

    #堆积图
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    
    mpl.rcParams["font.sans-serif"] = ["SimHei"]
    mpl.rcParams["axes.unicode_minus"] = False
    
    x = [1, 2, 3, 4, 5]
    y = [6, 10, 4, 5, 1]
    y1 = [2, 6, 3, 8, 5]
    
    plt.bar(x, y, align="center", color="#66c2a5", tick_label=["A", "B", "C", "D", "E"], label="班级A")
    plt.bar(x, y1, align="center", bottom=y, color="#8da0cb", label="班级B")
    
    plt.xlabel("测试难度")
    plt.ylabel("试卷份数")
    
    plt.legend()
    
    plt.show()
    

    在这里插入图片描述

    制作堆积柱形图

    #制作堆积柱形图
    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    plt.subplot(1,1,1)
    x=np.array(['东区','西区','南区','北区'])
    y3=np.array([8856,6584,5335,7310])
    y4=np.array([4283,3241,2667,3555])
    
    plt.bar(x,y3,width=0.5,label='任务量',align="center")
    plt.bar(x,y4,width=0.5,label='完成量',bottom=y3,align="center")  #堆积图增加bottom=y的代码
    
    for a,b in zip(x,y3):
        plt.text(a,b,b,ha='center',va='bottom',fontsize=13)   #ha可选(center.left,right)
    for a,b in zip(x,y4):
        plt.text(a,b,b,ha='center',va='top',fontsize=13)    #va可选(center,top,bottom)
    
    plt.title("完成情况",loc='center')
    plt.xlabel("区域")
    plt.ylabel("任务情况")
    
    plt.grid(False)
    plt.legend(loc='upper center',ncol=2)  #legend图例位置有很多可以选,可以是“best”
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\bar堆积图.jpg')
    

    绘制条形图

    #绘制条形图
    #plt.barh(y,width,height,align,color,edgecolor)
    import matplotlib.pyplot as plt
    import numpy as np
    
    x=np.array(['东区','西区','南区','北区'])
    y=np.array([8856,6584,5335,7310])
    
    plt.barh(x,width=y,height=0.5,align='edge')   #注意是height,align表示柱子的对齐方式,有center和edge两个值可以选
    #选择edge之后可以看到轴的刻度值没有在柱子的中间位置
    plt.title("各区域任务量",loc='center')
    plt.ylabel("区域")
    plt.xlabel("任务量22")
    
    for  a,b in zip(x,y):
        plt.text(b,a,b,ha='right',va='center',fontsize=13)  #注意是bab,最后一个字母是显示值的轴
    
    plt.grid(False)
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\bar堆积图.jpg')
    
    

    在这里插入图片描述

    散点图

    #散点图
    #plt.scatter(x,y,s,c,marker,linewidth,edgecolors)
    #s:表示每个点的面积,即散点的大小。如果只有一个具体值,则所有点的大小都一样。
    #s也可以是动态值,每个点的大小不一样 就成了气泡图
    #c:表示每个点的颜色,如果只有一种颜色,则所有点的颜色都相同
    #c也可以是动态颜色值,让不同点的颜色不同
    
    #marker:标记类型
    #linewidths:表示每个散点的线宽
    #edgecolors:表示每个散点外轮廓的颜色
    
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    plt.subplot(1,1,1)
    x=[5.5,6.1,8.1,15.8,19.5,22.4,28.3,29.8]
    y=[2.68,3.85,4.41,5.67,5.44,6.03,8.15,6.87]
    
    plt.scatter(x,y,marker='o',s=200)  #标记类型以及标记大小
    plt.title("1-8月平均气温与啤酒销量关系图",loc="center")
    
    plt.xlabel("平均气温")
    plt.ylabel("啤酒销量")
    
    plt.grid(False)#网格线
    
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\scatter散点图.jpg')
    

    在这里插入图片描述

    绘制气泡图

    #绘制气泡图.气泡图与散点图类似。
    #气泡图的大小不一样;散点图的大小是一样的。
    #注意:气泡图是三维的还是二维的? 我个人认为可以画三维。但以下例子是二维的
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.subplot(1,1,1)
    
    x=np.array([5.5,6.1,8.1,15.8,19.5,22.4,28.3,29.8])
    y=np.array([2.68,3.85,4.41,5.67,5.44,6.03,8.15,6.87])
    
    area=y*100
    color=y*100
    
    plt.scatter(x,y,s=area,c=color)
    
    for a,b in zip(x,y):
        plt.text(a,b,b,ha='center',va='bottom',fontsize=8,color="white")
    
    plt.xlabel("平均气温")
    plt.ylabel("啤酒销量")
    
    plt.title("销量关系图",loc='center')
    
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\scatter散点图.jpg')
    

    在这里插入图片描述

    绘制面积图

    #绘制面积图。面积图与折线图的对比是类似的。
    # plt.stackplot(x,y,labels,colors)
    #labels:不同系列图表的图例名   因为面积图是两个图例所以用复数
    #colors:不同系列图表的颜色
    
    import numpy as np
    import matplotlib.pyplot as plt
    
    plt.subplot(1,1,1)
    
    x=np.array([1,2,3,4,5,6,7,8,9])
    y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
    y2=np.array([433,1167,2855,3241,3060,802,1906,2241,2315])
    
    labels=["注册人数","激活人数"]
    plt.stackplot(x,y1,y2,labels=labels,colors=["yellow","blue"])  
    #如果labels写成单数会报错;colors写成单数只显示一个图
    
    plt.xlabel("月份")
    plt.ylabel("注册与激活人数")
    
    plt.title("销量关系图",loc='center')
    
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\stackplot.jpg')
    

    在这里插入图片描述

    绘制树地图

    #绘制树地图  树地图常用来表示统一等级中不同类别的占比关系,使用squarify库。先pip install squarify
    #squarify.plot(sizes,label,color,value,edgecolor,linewidth)
    
    #sizes:待绘图数据  label:不同类别的图例标签  color:不同类别的颜色  value:不同类别的数据标签
    #edgecolor:不同类别之间边框的颜色   linewidth:边框线宽
    
    import squarify
    size=np.array([0.34,0.693,0.585,0.57,0.562,0.531,0.530,0.524,0.501,0.478,0.468,0.4361])
    xingzuo=np.array(["未知",'摩羯座','天秤座','双鱼座','天蝎座','金牛座','处女座','双子座','射手座','水瓶座','白羊座'])
    rate=np.array([0.34,0.693,0.585,0.57,0.562,0.531,0.530,0.524,0.501,0.478,0.468,0.4361])
    colors=['steelblue','#9999ff','red','indianred','green','yellow','orange']
    
    plot=squarify.plot(sizes=size,label=xingzuo,color=colors,value=rate,edgecolor='white',linewidth=3)
    
    #plt.title("星座分布",loc='center')
    plt.title("星座分布",fontdict={'fontsize':12})  
    plt.axis('off')  #去除坐标轴
    
    #plt.tick_params(top=True,right=True)
    plt.tick_params(top=False,right=False)  #去除上边框和右边框的刻度
    
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\squarifyplot.jpg')
    

    在这里插入图片描述

    绘制雷达图

    #绘制雷达图   这个需要调试一下
    #用来综合评价某一事物,直观看出事物的优势与不足。使用plt库中的polar方法,polar是用来建立极坐标系的
    #雷达图就是将各个点展示在极坐标系中,然后用线将各点连接起来。
    #plt.polar(theta,r,color,marker,linewidth)
    #theta:每一点在极坐标系中的角度
    #r:每一点在极坐标系中的半径
    #color:连接个点之间线的颜色
    #marker:每点的标记物
    #linewidth:连接物的宽度
    plt.subplot(111,polar=True)  #参数polar等于true表示建立一个极坐标系
    datalenth=5  #把圆均分成5份
    angles=np.linspace(0.2*np.pi,datalenth,endpoint=False)
    #np.linspace表示在制定的间隔内返回均匀间隔的数字
    labels=['沟通能力','业务理解能力','逻辑思维能力','快速学习能力','工具使用能力']
    data=[2,3.5,4,4.5,5]
    data=np.concatenate((data,[data[0]]))#闭合
    angels=np.concatenate((angles,[angles[0]]))#闭合
    
    #绘图
    plt.polar(angles,data,color='r',marker='o')
    
    #设置x轴刻度
    plt.xticks(angles,labels)
    plt.title(s="某数据分析师的综合评级")
    
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\polarplot.jpg')
    
    
    
    
    

    在这里插入图片描述

    绘制箱型图

    #绘制箱型图  反映一组数据的离散情况
    #plt.boxplot(x,vert,widths,labels)
    #vert:箱型图方向。true为纵向 false为横向。默认true
    #widths:箱型图宽度
    #labels:箱型图标签
    
    plt.subplot(1,1,1)
    y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
    y2=np.array([433,1167,2855,3241,3606,820,1906,2214,2315])
    x=[y1,y2]
    
    labels=["注册人数","激活人数"]
    plt.boxplot(x,labels=labels,vert=True,widths=[0.3,0.2])
    
    plt.title("1-9月注册与激活人数",loc="right")
    
    plt.grid(False)
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\boxplot.jpg')
    
    

    在这里插入图片描述

    绘制饼图

    #绘制饼图  表示同一等级中不同类别的占比情况  
    #plt.pie(x,explode,labels,colors,autopct,pctdistance,shadow,
    #labeldistance,starangle,radius,counterclock,wedgeprops,textprops,center,frame)
    #待绘图数据,饼图中每一块离圆心距离,每一块标签,颜色,百分比格式,数据标签距中心的距离,是否有阴影
    #每一块索引距离中心的距离 饼图的初始角度 饼图的半径 是否让饼图逆时针显示 饼图外边界属性 饼图中文本相关属性 饼图中心位置 是否显示饼图背后的的图框
    
    plt.subplot(1,1,1)
    
    x=np.array([8566,5335,7310,6482])
    
    labels=["东区","北区","南区","西区"]  
    colors='lightgreen','gold','lightskyblue','lightcoral'
    explode=[0.05,0,0,0]  #让第一块离圆心远一点
    labeldistance=1  #每一块索引离中心的距离
    plt.pie(x,labels=labels,colors=colors,autopct='%.0f%%',shadow=True,explode=explode,radius=0.5,labeldistance=labeldistance,startangle=-50)
    #保留0位小数,3个%;有阴影;半径;初始角度
    plt.axis('equal')
    plt.title("全国各区域任务量占比",loc="center")
    
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\pie.jpg')
    

    在这里插入图片描述

    import matplotlib.pyplot as plt
    
    labels='a','b','c','d'
    
    sizes=5,6,7,8
    
    
    
    explode=0,0,0,0
    
    plt.pie(sizes,explode=explode,labels=labels,
    
            colors=colors,autopct='%1.1f%%',shadow=True,startangle=50)
    
    plt.axis('equal')
    
    plt.show()
    

    在这里插入图片描述

    绘制环形图

    #绘制环形图  参数与饼图完全一致
    
    plt.subplot(1,1,1)
    
    x1=np.array([8566,5335,7310,6485])
    x2=4283,2667,3655,3241
    labels="东区","北区","南区","西区"
    plt.pie(x1,labels=labels,radius=1.0,wedgeprops=dict(width=0.5,edgecolor='w'))
    plt.pie(x2,labels=labels,radius=0.5,wedgeprops=dict(width=0.3,edgecolor='w'))
    
    #添加注释(完成量 任务量)
    plt.annotate("完成量",xy=(0.35,0.35),xytext=(0.7,0.45),arrowprops=dict(facecolor="black",arrowstyle="->"))
    plt.annotate("任务量",xy=(0.75,0.20),xytext=(1.1,0.2),arrowprops=dict(facecolor="black",arrowstyle="->"))
    
    plt.title("全国各区域任务量与完成量占比",loc="center")
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\pie2.jpg')
    

    - [ ] List item

    绘制水平线和垂直线

    #绘制热力图
    #绘制水平线和垂直线
    #plt.axhline(y,xmin,xmax)  y=2  时x的最大和最小值XXXXXXXXX 错错错     min max指的是比例,而不是实际像素值
    #plt.axvline(x,ymin.ymax)
    
    plt.subplot(1,2,1)
    plt.xlim(0,5)            #???????????????
    #python横坐标轴已经设置了0-5的范围,x在0.2-0.5的直线的位置为啥显示错了,下一行是答案
    #
    plt.axhline(y=2,xmin=0.2,xmax=0.3)
    plt.subplot(1,2,2)
    plt.ylim(0,5)
    plt.axvline(x=2,ymin=0,ymax=1)
    
    
    

    在这里插入图片描述

    直线

    plt.subplot(2,2,1)
    plt.axhline(y=0.5,c='r',ls='--',lw=2)
    

    在这里插入图片描述

    绘制组合图表—折线图+折线图

    #绘制组合图表---折线图+折线图
    plt.subplot(1,1,1)
    x=np.array([1,2,3,4,5,6,7,8,9])
    y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
    y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
    
    
    plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
    plt.plot(x,y2,label="激活人数",linestyle="dashdot",linewidth=1,marker="o",markersize=3)
    
    plt.title("1-9月注册与激活人数")
    
    for a,b in zip(x,y1):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    for a,b in zip(x,y2):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    plt.xlabel("月份")
    plt.ylabel("注册量")
    
    plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
    plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
    
    plt.legend()
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot双折线.jpg')
    
    

    在这里插入图片描述

    折线图+柱形图

    #折线图+柱形图
    
    plt.subplot(1,1,1)
    
    x=np.array([1,2,3,4,5,6,7,8,9])
    y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
    y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
    
    
    plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
    plt.bar(x,y2,label="激活人数")
    
    plt.title("1-9月注册与激活人数")
    
    for a,b in zip(x,y1):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    for a,b in zip(x,y2):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    plt.xlabel("月份")
    plt.ylabel("注册量")
    
    plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
    plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
    
    plt.legend()
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot+bar.jpg')
    
    

    在这里插入图片描述

    绘制双y轴图表

    #绘制双y轴图表   是一个坐标系中有两条y轴,使用的是plt库的twinx方法。
    #先建立坐标系,然后绘制主坐标轴上的图表,再调用plt.twinx方法。最后绘制次坐标轴上的图表。
    
    #折线图+柱形图
    
    
    plt.subplot(1,1,1)
    
    x=np.array([1,2,3,4,5,6,7,8,9])
    y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
    y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
    
    
    plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
    plt.xlabel("月份")
    plt.ylabel("注册量")
    plt.legend(loc="upper left")
    
    
    plt.twinx() #调用twinx方法
    
    plt.plot(x,y2,color="k",linestyle="dashdot",linewidth=1,marker="o",markersize=3,label="激活人数")
    plt.xlabel("月份")
    plt.ylabel("注册量")
    plt.legend()
    
    plt.title("1-9月注册与激活人数")
    
    for a,b in zip(x,y1):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    for a,b in zip(x,y2):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    plt.xlabel("月份")
    plt.ylabel("注册量")
    
    plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
    plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
    
    plt.legend()
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot+bar.jpg')
    

    在这里插入图片描述

    绘制双y轴图表

    #绘制双y轴图表
    
    plt.subplot(1,1,1)
    
    x=np.array([1,2,3,4,5,6,7,8,9])
    y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
    y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
    
    
    plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
    
    plt.twinx() #调用twinx方法
    plt.bar(x,y2,label="激活人数")
    
    plt.title("1-9月注册与激活人数")
    
    for a,b in zip(x,y1):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    for a,b in zip(x,y2):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    plt.xlabel("月份")
    plt.ylabel("注册量")
    
    plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
    plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
    
    plt.legend()
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot+bar.jpg')
    

    在这里插入图片描述

    绘制双x轴图表

    #绘制双x轴图表   一个坐标系中有两条x轴,使用plt库的twiny方法,具体流程和双y轴完全一样。但是在业务中使用较少
    
    plt.subplot(1,1,1)
    
    x=np.array([1,2,3,4,5,6,7,8,9])
    y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
    y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
    
    
    plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
    
    plt.twiny() #调用twinx方法
    plt.bar(x,y2,label="激活人数")
    
    plt.title("1-9月注册与激活人数")
    
    for a,b in zip(x,y1):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    for a,b in zip(x,y2):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    plt.xlabel("月份")
    plt.ylabel("注册量")
    
    plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
    plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
    
    plt.legend()
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot+bar.jpg')
    

    在这里插入图片描述

    图表的其他样式

    #matplotlib库默认的样式看起来不好看,但是可以调用其他格式。以下是matplotlib支持的所有样式
    plt.style.available
    
    #如果使用以上样式,只要在程序开头加上以下代码
    #只要在程序开头指明了哪些样式,那么该程序接下来的所有图表都会使用这种样式
    plt.style.use(样式名)
    以下都是样式的举例
    

    在这里插入图片描述

    使用新样式的方式

    plt.style.use('bmh')
    plt.subplot(1,1,1)
    
    x=np.array([1,2,3,4,5,6,7,8,9])
    y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
    y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
    
    
    plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
    
    plt.twiny() #调用twinx方法
    plt.bar(x,y2,label="激活人数")
    
    plt.title("1-9月注册与激活人数")
    
    for a,b in zip(x,y1):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    for a,b in zip(x,y2):
        plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
    
    plt.xlabel("月份")
    plt.ylabel("注册量")
    
    plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
    plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
    
    plt.legend()
    plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot+bar.jpg')
    

    –以上图表代码参考了张俊红书籍
    《对比excel,学习python数据分析》
    受益匪浅。

    展开全文
  • MatplotlibMatplotlib is the grandfather of python visualization packages. It is extremely powerful but with that power comes complexity.强大但相对复杂SeabornSeaborn is a visualization library based on...

    Matplotlib

    Matplotlib is the grandfather of python visualization packages. It is extremely powerful but with that power comes complexity.强大但相对复杂

    Seaborn

    Seaborn is a visualization library based on matplotlib. It seeks to make default data visualizations much more visually appealing. It also has the goal of making more complicated plots simpler to create. It does integrate well with pandas.和pandas完美配合,使可视化更引人注目,而且简单几步便可绘制复杂图形。

    ggplot

    ggplot is similar to Seaborn in that it builds on top of matplotlib and aims to improve the visual appeal of matplotlib visualizations in a simple way. It diverges from seaborn in that it is a port of ggplot2 for R. Given this goal, some of the API is non-pythonic but it is a very powerful

    Bokeh

    Bokeh is different from the prior 3 libraries in that it does not depend on matplotlib and is geared toward generating visualizations in modern web browsers.不同于前三种,不是基于matplotlib,用于web浏览器上的可视化工具。

    Pygal

    Pygal is used for creating svg charts. If the proper dependencies are installed, you can also save a file as a png. The svg files are pretty useful for easily making interactive charts. I also found that it was pretty easy to create unique looking and visually appealing charts with this tool.画矢量图

    Plot.ly

    Plot.ly is differentiated by being an online tool for doing analytics and visualization. It has robust API’s and includes one for python. Browsing the website, you’ll see that there are lots of very rich, interactive graphs. Thanks to the excellent documentation, creating the bar chart was relatively simple.一款在线可视化工具,配套文档完善。

    展开全文
  • 原标题:酷炫的可视化图表工具来帮忙 深度评测五大Python数据可视化工具不少Python用户的一大诉求是做出各种酷炫的可视化图表,而这就需要了解清楚工具特色,才好在制作不同类型图表顺利找到适合自己的那一款。...

    原标题:酷炫的可视化图表工具来帮忙 深度评测五大Python数据可视化工具

    不少Python用户的一大诉求是做出各种酷炫的可视化图表,而这就需要了解清楚工具特色,才好在制作不同类型图表顺利找到适合自己的那一款。今天就来聊聊五个Python数据可视化的库Matplotlib、Pyecharts、Seaborn、Plotly、Bokeh各有哪些优缺点。

    Pyecharts

    基于Echarts,加入Python富有表达力的语言,pyecharts 诞生了,支持30+种图表。

    在pyecharts中制作条形图首先需要导入相关库 。

    接着是绘图并不做任何调整,首先创建一个Bar实例,接着添加x轴y轴数据,注意仅接收list格式数据,最后添加标题并设置在notebook中直接展示。总体来说还是比较符合正常的作图逻辑,整体代码量并不多。

    默认生成的两系列柱状图如下:

    优点:

    支持交互式展示与点击

    默认生成的样式也较为美观

    详细的中文文档与demo,能比较快的上手

    文档十分完整,所以代码修改起来并不困难,比如可以修改主题并设置一些标记线、DataZoom,添加小组件等

    缺点:

    不支持使用pandas中的series数据,需要转换为list才可以使用

    Matplotlib

    Matplotlib应该是最广泛使用的Python可视化工具,支持的图形种类非常多。

    使用Matplotlib制作相同效果的图需要先导入相关库,并且并不支持原生中文所以还要设置下中文显示。

    接着就是绘图,但是相比较于pyecharts大多是往写好的代码里面添加数据、配置不同,matplotlib大多数需要我们自己写代码,所以代码量可能稍多一点。

    最后生成的默认图像如下:

    相较Pyecharts,由于Matplotlib的火热,网上关于matplotlib的资料更多更全面。

    但从美观度上来说,学术风更甚,并且不支持交互式点击查看等操作。代码编写量也相对较多。

    Plotly

    Plotly也是一款非常强大的Python可视化库,Plotly内置完整的交互能力及编辑工具,支持在线和离线模式,提供稳定的API以便与现有应用集成,既可以在web浏览器中展示数据图表,也可以存入本地拷贝。但是由于官方未提供中文文档,网上关于Plotly的教程也仅限于官方的一些demo,对于一些详细的参数设置并没有太多资料 。

    从优点来看,支持交互式操作的,同时是默认添加toolbox小组件,可以更方便的查看,支持30多种图形。

    但是如果真要熟练使用的话可能需要一点时间用于查找相关资料,因为网上关于Plotly的资料不多,大多是基本使用的简单教程。

    Bokeh

    Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Python库。这是Bokeh与其它可视化库最核心的区别,它可以做出像D3.js简洁漂亮的交互可视化效果,但是使用难度低于D3.js,首先还是导入相关库。

    相关依赖比上面三个要多出很多,并且Bokeh有自己的数据结构ColumnDataSource,所以要先对数据进行转换,接着就是创建画布、添加数据及设置。最后生成的默认图像如下:

    Bokeh一个很明显的特点就是代码量较上面三个工具要多了很多,大多是在数据的处理上,并且和Plotly一样,有关bokeh相关的中文资料也不多,大多是入门型的基本使用于介绍,虽然从官方给出的图来看能作出很多比pyecharts更精美的图,但是查找相关参数的设置上将会耗费一定时间。

    Seaborn

    从seaborn官网给出的标题就知道,seaborn是为了统计图表设计的,它是一种基于matplotlib的图形可视化库,也就是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图,还是我们的数据,使用Seaborn制作首先需要导入相关库,由于是基于Matplotlib,所以还是需要设置中文。

    相比上面四种工具,从代码量上来看是非常简洁的,不过还是要先将数据转换为DataFrame格式,这里没在代码中体现,但依旧是最简短的代码,同时并不支持交互。并且Seaborn和Plotly、bokeh有一个共同的地方就是虽然强大,但是网上有关这三个库的教程、讨论都远少于Pyecharts与Matplotlib,如果是新手的话可能很难快速通过搜索解决你遇到的问题,而需要自己研究别人的代码。

    不同工具的应用场景、目标用户都不完全相同,所以在选择工具时需要先思考自己的使用场景,并且还需要评估绘制目标图形的难度哦。

    展开全文
  • Recharts 是 2016 年初团队可视化组推出的一款可视化组件库,为基础表格的绘制提供了另外一种可能。Recharts 含义是重新定义(Redefined)图表。这个名字的背后在于这个图表在设计上带给开发者的是不一样的体验,不仅...

    Recharts 是 2016 年初团队可视化组推出的一款可视化组件库,为基础表格的绘制提供了另外一种可能。

    Recharts 含义是重新定义(Redefined)图表。这个名字的背后在于这个图表在设计上带给开发者的是不一样的体验,不仅是用 React 设计,也在于重新定义了组合与配置方式。

    Recharts 到今天的版本是 0.9.3,支持 React 0.14.x 或 15.0.x 版本,现在有至少四个国外团队在产品中使用。为方便国际化,文档只有英文官网 Recharts,中文官网还在编写中。如果试用有问题,欢迎给项目提 issue(P.S. 请使用英文来提,谢谢)。

    接下来我们会从思想层面来剖析 Recharts 的原理和精髓。

    大家可以回顾一下在做图表类的需求时,碰到最纠结的问题是什么?这里列了一些我碰到最多的问题:

    配置非常复杂,可配置的内容太多,找不到到底使用什么配置项来达到想要的目的

    很多样式无法完全统一,变化很多。这个线图怎么多了条线?这个柱图的“柱子”怎么是个三角形?

    那 Recharts 是怎么解决这些问题呢?

    声明式的标签,让写图表和写 HTML 一样简单

    贴近原生 SVG 的配置项,让配置项更加自然

    接口式的 API,解决各种个性化的需求

    下面我们将仔细分析这些是怎么实现的。

    声明式的标签

    在看代码实现之前,我们先看看怎样一步步的根据各自的需求创建一个线图:

    首先,通过调用 LineChart 添加一条 dataKey 为 pv 的 Line:

    const data = [{ name: 'a', uv: 4000, pv: 2400 }, { name: 'b', uv: 3000, pv: 1398 }, ....];

    运行代码后结果如下:

    然后,我们可以根据自己的需求去丰富这个线图,比如这个线图需要一个 X 轴和 Y 轴,那只需要在 LineChart 下添加一个 XAxis 和 YAxis 标签即可:

    const data = [{ name: 'a', uv: 4000, pv: 2400 }, { name: 'b', uv: 3000, pv: 1398 }, ....];

    运行代码结果如下:

    大家看到用 Recharts 绘制图表很多时候就想拼积木一样,那 LineChart 内部是如何去识别这些『零件』的呢?我们先来看一个简单的函数:

    const getDisplayName = (Comp) => {

    if (!Comp) { return ''; }

    if (typeof Comp === 'string') { return Comp; }

    return Comp.displayName || Comp.name || 'Component';

    };

    这个方法很简单,可以用来读取某个 ReactComponent 的名称。在 LineChart 的代码实现中,就是根据 ReactComponent 的 displayName 来识别所有的 Children。我们先来看一个工具方法:

    const findAllByType = (children, type) => {

    const result = [];

    let types = [];

    if (_.isArray(type)) {

    types = type.map(t => getDisplayName(t));

    } else {

    types = [getDisplayName(type)];

    }

    React.Children.forEach(children, child => {

    const childType = child && child.type && (child.type.displayName || child.type.name);

    if (types.indexOf(childType) !== -1) {

    result.push(child);

    }

    });

    return result;

    };

    这里 type 可以是 ReactComponent 或者 ReactComponent 数组。而 LineChart 内部实现的时候就是调用这个方法来识别各个『零件』:

    ...

    render() {

    const { children } = this.props;

    const lineItems = findAllByType(children, Line);

    ...

    }

    贴近原生的配置项

    图表的配置项可以非常多,但是有很多配置项如填充颜色、描边颜色、描边宽度等等这些都是SVG标签原生就支持的属性,为了减小大家的配置的成本,Recharts 的组件会去解析原生的属性。举个例子,一个线图里面有两条曲线,我想给一条曲线设置成虚线,一条设置成实线,我们只需要像原生的 SVG 元素一样设置 stroke-dasharray 属性就行:

    const data = [{ name: 'a', uv: 4000, pv: 2400 }, { name: 'b', uv: 3000, pv: 1398 }, ....];

    结果如下:

    实现原理也比较简单,首先 Recharts 内部维护一份 SVG 元素支持的所有属性,然后在渲染 SVG 元素之前,我们会去解析相应的ReactElement的 props,看看哪些是 SVG 元素能够支持的属性,最终这些属性可以传入到渲染的 SVG 元素中。

    const PRESENTATION_ATTRIBUTES = {

    fill: PropTypes.string,

    strokeDasharray: PropTypes.string,

    ...

    };

    const getPresentationAttributes = (el) => {

    if (!el || _.isFunction(el)) { return null; }

    const props = React.isValidElement(el) ? el.props : el;

    let result = null;

    for (const key in props) {

    if (props.hasOwnProperty(key) && PRESENTATION_ATTRIBUTES[key]) {

    if (!result) {result = {};}

    result[key] = props[key];

    }

    }

    return result;

    };

    关于更多SVG属性,大家可以参考W3C标准文档

    接口式的 API

    很多时基础图表往往不能满足所有的要求,那怎么去满足各种个性化的需求成了图表组件必须要考虑的事情。

    Recharts 对可能会变化的元素都提供了自定义的接口,以x轴的刻度为例,普通的刻度就是一些文字,在信息图表中,为了让图表更佳的生动,视觉往往希望能够将文字替换成形象的 icon。

    对于这种自定义的需求,Recharts 提供了两种方式,第一种是通过 React Element 的方式:

    const CustomizedTick = (props) => {

    const { x, y, payload, bgColor, index } = props;

    return (

    {index}

    );

    };

    }/>

    通过将 tick 设置成一个 React Element,在拿到内部 props 的同时,也可以非常方便的从外部传入 props。

    第二种自定义的方式是通过 function:

    const renderCustomizedTick = (props) => {

    const { x, y, payload, index } = props;

    return (

    {index}

    );

    };

    这种方法,renderCustomizedTick 中拿到的参数和 CustomizedTick 的 props 是一样的,当然这种自定义的方法外部传参数会稍微麻烦一些。

    看到这里大家可能会好奇内部是怎么去实现?原理也非常简单,我们在内部计算好 tick 的位置等信息,然后判读 tick 参数的类型,实现代码简化如下:

    let tickItem;

    if (React.isValidElement(tick)) {

    tickItem = React.cloneElement(tick, props);

    } else if (_.isFunction(tick)) {

    tickItem = tick(props);

    } else {

    tickItem = {value};

    }

    看到这里大家可以发现 Recharts 内部主要做了计算各种 layout 的事,每个区块具体展示什么内容都是可以自定义的。

    延伸

    到这里我们已经介绍了 Recharts 实现可视化组件的一些核心思想,其实这些思想不只是在可视化组件中可以应用,很多组件也可以考虑利用这种思想来实现,例如表格组件就可以抽取 Table 和 Column 两个组件,然后大家使用表格也非常简单:

    }/>

    关于 1.0 版本的发布

    我们大约会在本月末,或下月初发布,

    更好的动画支持

    同步文档更新

    增加一些图表的支持

    90% 的测试覆盖率

    关于无线支持可能会放到 1.0 之后再考虑,因为 SVG 对手机的兼容性支持度一般。1.0 版本之后,会切分出 React 15.x 的 Recharts。因为 15.x 对 SVG 的支持更加完善。

    尽管 web 端已经有不少优秀的可视化库,亦或是图表库,比如 Echarts,highcharts,科学界有 ggplot,他们都是可视化界的前辈。在可视化的探索上,给我们很多启发。我们造 Recharts 的初忠是给 React 社区贡献一个代码更优雅,灵活可装卸的图表库的图表库。

    感谢团队可视化组的小伙伴。最后是安利时间,第一款使用 Recharts 的线上项目 阿里指数。

    展开全文
  • 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。前言如果我们想要在图形中的任意位置添加注释,该如何用pyhton代码实现操作呢?...
  • 视化的技术可以追溯到2500年前世界上的第一张地图,但是,如今利用各种形态的数据可视化图表帮助用户减少分析时间,快速做出决策一直扮演着重要的作用。这里给你推荐5款现今最受欢迎的数据可视化工具,供你参考。1、...
  • Hand drawing style charts library for Python项目地址:https://github.com/chenjiandongx/cutecharts 初衷在闲逛 Github 的时候,发现了一个十分有趣的图表库 chart.xkcd,该库的图表的手绘风格很可爱。...
  • 作者:屈希峰,资深Python工程师,知乎多个专栏作者 来源:大数据DT(ID:hzdashuju) 柱状图(Histogram)是一种以长方形的长度为变量的表达图形的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,...
  • Python版(2)Excel版图样图森破,不落下风,对老表哥而言还带有一种亲切感。Excel版Excel动态图实现知识点:offset 函数,开发工具-表单控件,名称管理器,图表数据源关联,VBA 操作单元格。(1)offset函数该函数是...
  • matplotlib库作为Python数据可视化的常用库,前几次已经和大家介绍了常用的11个函数,它们分别如下所示哦,希望大家以后能够记住并常用它们:1.plot()函数:是用于显示变量的编号趋势哦2.scatter()函数:是用于显示...
  • Hand drawing style charts library for Python项目地址:https://github.com/chenjiandongx/cutecharts 初衷在闲逛 Github 的时候,发现了一个十分有趣的图表库 chart.xkcd,该库的图表的手绘风格很可爱。...
  • 数据可视化将数据通过图表的形式展现出来将大大的提升可读性和阅读效率本例包含柱状图、折线图、散点图、热力图、复杂柱状图、预览面板等技术栈vue2.xvuex 存储公共变量,如色值等vue-router 路由element-ui 饿了么...
  • Python之绘图和可视化1. 启用matplotlib最常用的Pylab模式的IPython(IPython --pylab)2. matplotlib的图像都位于Figure对象中。可以使用plt.figure创建一个新的Figure,不能通过空Figure绘图,必须用add_subplot创建...
  • 不过总体来说还是很棒的) 凸包问题例子 PS:这段代码只是一个节选,是基于我的完整的凸包问题而写的 所以需要把这段代码套入完整代码才会有这种效果: Python分治法解决凸包问题并用matplotlib实现可视化以及与蛮力法...
  • 网站上看到了一个可视化图表的代码 https://www.jianshu.com/p/b718c307a61c 代码可以说是非常的简单,然后就拿到本地运行了一下,就出现了一堆问题: 首先可视化图表的话需要安装pyecharts库,然后导入它的Bar 库 ...
  • 如何攻破可视化图表?附完整 Python 源代码翻译 |Lemon责编 | 郭 芮本文总结了 Matplotlib 以及 Seaborn 用的最多的50个图形。这些图表列表允许开发者使用 Python 的 Matplotlib 和 seaborn 库选择要显示的可视化...
  • 不少Python用户的一大诉求是做出各种酷炫的可视化图表,而这就需要了解清楚工具特色,才好在制作不同类型图表顺利找到适合自己的那一款。今天就来聊聊五个Python数据可视化的库Matplotlib、Pyecharts、Seaborn、...
  • 大家都知道,Matplotlib 是众多 Python 可视化包的鼻祖,也是Python最常用的标准可视化库,其功能非常强大,同时也非常复杂,想要搞明白并非易事。但自从Python进入3.0时代以后,pandas的使用变得更加普及,它的身影...
  • 原标题:酷炫的可视化图表工具来帮忙 深度评测五大Python数据可视化工具不少Python用户的一大诉求是做出各种酷炫的可视化图表,而这就需要了解清楚工具特色,才好在制作不同类型图表顺利找到适合自己的那一款。...
  • 可视化图表,有相当多种,但常见的也就下面几种,其他比较复杂一点,大都也是基于如下几种进行组合,变换出来的。对于初学者来说,很容易被这官网上众多的图表类型给吓着了,由于种类太多,几种图表的绘制方法很有...
  • 本文转自:https://github.com/chenjiandongx/cutecharts 今天,给大家介绍一个很酷的 Python 手绘风格可视化神包:cutecharts。和 Matplotlib 、pyecharts 等常见的图表不同,使用这个包可以生成下面这种看起来像...
  • 传递量化思维,深耕数据科技 本节以“贵州茅台近10年净利润以及增长率分析”可视化为案例,让大家知道怎么使用python画分析图表,先附上我们最终要画的图表,如下图所示:小试牛刀-找找用python画图的感觉01 ....
  • 上期推文推出第一篇基础图表绘制-R-ggplot2 基础图表绘制-散点图的绘制推文,得到了很多小伙伴的喜欢,也是我更加想使这个系列做的更加完善和系统,我之前也有说过,会推出Python和R的两个版本绘制教程,接下来我们...
  • 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。前言如果我们想要在图形中的任意位置添加注释,该如何用pyhton代码实现操作呢?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,635
精华内容 1,454
关键字:

python可视化图表

python 订阅