概述
matplotlib介绍
Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython
matplotlib安装
pip3 install matplotlib
绘制常用图表
一.折线图
表示随着时间的推移某指标的变化趋势
参数详解
plt.plot(x,y,color,linestyle,linewidth,marker,markersize,markeredgecolor,markeredgewidth,markerfacecolor,label)
- x:横坐标数据
- y:纵坐标数据
- linestyle:线条样式(’-’ , ‘.’ , ‘-.’ , ‘–’ 等)
- linewidth:线条宽度
- marker:节点样式('o’圈标记 , '.'点标记 , 'v’下三角 , '^'上三角 , 's’正方形等)
- markersize:节点大小
- markeredgecolor:标记外边颜色
- markeredgewidth:标记外边线宽
- markerfacecolor:标记填充颜色
- label:图例名称
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
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([866,2335,5710,6482,6120,1605,3813,4428,4631])
plt.plot(x,y,color='k',linestyle='-.',linewidth=1,marker='o',markersize=5,label="注册用户数")
for a,b in zip(x,y):
plt.text(a,b,b,ha='center',va='bottom',fontsize=11,color='k')
plt.title("XXX公司1-9月注册用户数",color='k')
plt.grid(True) #设置网格线
plt.legend() #设置图例
二.柱形图
比较不同类别之间的数据情况
参数详解
plt.bar(x,height,width=0.8,bottom=None,align=‘center’,color,edgecolor)
- x:在什么位置显示柱形图;
- height:每根柱子的高度;
- width:每根柱子的宽度,可以一样,也可以各不相同;
- bottom:每根柱子底部位置,可以一样,也可以各不相同;
- align:柱子的位置与x值的关系,有center、edge可选;
- color:柱子颜色;
- edgecolor:柱子边框颜色。
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
plt.subplot(111)
x = np.array(["东区","北区","南区","西区"])
y = np.array([8566,6482,5335,7310])
plt.bar(x,y,width=0.5,align='center',label="任务量",color='b')
plt.title("全国各分区任务量",color='k')
for a,b in zip(x,y):
plt.text(a,b,b,ha='center',va='bottom',fontsize=11,color='k')
plt.xlabel('分区')
plt.ylabel('任务量')
plt.legend()
三.簇状柱形图
用来表示不同类别随着同一变量的变化情况
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
plt.subplot(111)
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="任务量")
plt.bar(x+0.3,y2,width=0.3,label="完成量",color='b') #x+0.3相当于把完成量的每个柱子右移0.3
plt.title("全国各分区任务量和完成量",color='k')
for a,b in zip(x,y1):
plt.text(a,b,b,ha='center',va='bottom',fontsize=11,color='k')
for a,b in zip(x+0.3,y2):
plt.text(a,b,b,ha='center',va='bottom',fontsize=11,color='k')
plt.xlabel('区域')
plt.ylabel('任务情况')
plt.xticks(x+0.15,["东区","南区","西区","北区"])
plt.grid(False)
plt.legend(ncol=2)
四.堆积柱形图
用来比较同类别各变量和不同类别变量的总和趋势,只要在相同的x位置绘制不同的y,y就会自动叠加
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
plt.subplot(111)
x = np.array(["东区","北区","南区","西区"])
y1 = np.array([8566,5335,7310,6482])
y2 = np.array([4283,2667,3655,3241])
plt.bar(x,y1,width=0.3,label="任务量")
plt.bar(x,y2,width=0.3,label="完成量",color='b')
plt.title("全国各分区任务量和完成量",color='k')
for a,b in zip(x,y1):
plt.text(a,b,b,ha='center',va='bottom',fontsize=11,color='k')
for a,b in zip(x,y2):
plt.text(a,b,b,ha='center',va='top',fontsize=11,color='k')
plt.xlabel('区域')
plt.ylabel('任务情况')
plt.grid(False)
plt.legend(ncol=2,loc='upper center')
五.条形图
与柱形图类似,只是对柱形图的x轴和y轴进行了调换
参数详解
plt.barh(y,width,height,align,color,edgecolor)
- y:纵坐标
- width:横向宽度,即横坐标
- height:纵向高度,即柱子的实际宽度
- align:柱子对齐方式
- color:柱子颜色
- edgecolor:柱子边缘颜色
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
plt.subplot(111)
x = np.array(["东区","北区","南区","西区"])
y = np.array([8566,5335,7310,6482])
plt.barh(x,height=0.5,width=y,align="center")
plt.title("全国各分区任务量",color='k')
for a,b in zip(x,y):
plt.text(b,a,b,ha='center',va='center',fontsize=11,color='k')
plt.ylabel('区域')
plt.xlabel('任务量')
plt.grid(False)
六.散点图
用来发现各变量之间的相关关系
参数详解
plt.scatter(x,y,s,c,marker,linewidths,edgecolors)
- (x,y):散点的位置;
- s:散点的大小。如果只有一个具体值,则所有点大小一样;如果呈现大小不一,则变成气泡图;
- c:散点的颜色。可只有一个,也可以有多个不同颜色;
- marker:每个点的标记;
- inewidths:每个散点的线宽;
- edgecolors:每个散点的外轮廓的颜色
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
plt.subplot(111)
x = [5.5,6.6,8.1,15.8,19.5,22.4,28.3,28.9]
y = [2.38,3.85,4.41,5.67,5.44,6.03,8.15,6.87]
plt.scatter(x,y,marker='o',s=100)
plt.title("1-8月平均气温与啤酒销量关系图",loc='center',color='k')
plt.xlabel('平均气温')
plt.ylabel('啤酒销量')
plt.grid(False)
七.气泡图
与散点图类似,散点图各点大小一致,气泡图中各点大小不一致
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
plt.subplot(111)
x = np.array([5.5,6.6,8.1,15.8,19.5,22.4,28.3,28.9])
y = np.array([2.38,3.85,4.41,5.67,5.44,6.03,8.15,6.87])
colors = y*10 #根据y值的大小生成不同的颜色
area = y*100 #根据y值的大小生成大小不同的形状
plt.scatter(x,y,c=colors,s=area,marker='o')
plt.title("1-8月平均气温与啤酒销量关系图",loc='center',color='k')
for a,b in zip(x,y):
plt.text(a,b,b,ha='center',va='center',fontsize=11,color='white')
plt.xlabel('平均气温')
plt.ylabel('啤酒销量')
plt.grid(False)
八.面积图
参数详解
plt.stackplot(x,y,labels,colors)
- (x,y):x/y坐标数值;
- labels:不同系列图表的图例名;
- colors:不同系列图表的颜色。
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
plt.subplot(111)
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])
labels = ["注册人数","激活人数"]
plt.stackplot(x,y1,y2,labels=labels)
plt.title("XXX公司1-9月注册与激活人数",color='k')
plt.xlabel('月份')
plt.ylabel('注册与激活人数')
plt.xticks(x,["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
plt.grid(False)
plt.legend()
九.箱体图
用来反映一组数据的离散程度
参数详解
plt.boxplot(x,vert,widths,labels)
- x:待绘图源数据
- vert:箱体图方向,True纵向,False横向,默认True
- widths:箱体图的宽度
- label:标签
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
plt.subplot(1,1,1)
y1 = np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2 = np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
x = [y1,y2]
#绘图
labels = ["注册人数","激活人数"]
plt.boxplot(x,labels=labels,vert=True,widths=[0.2,0.5])
plt.title("XXX公司1-9月注册与激活人数",loc="center")
plt.grid(False)
十.饼图
常用来表示同一等级中不同类别的占比情况
参数详解
plt.pie(x,explode,labels,colors,autopct,pctdistance,shadow,labeldistance,startangle,radius,counterclock,wedgeprops,textprops,center,frame)
- x:待绘图数据;
- explode:每一块离圆心距离;
- labels:每一块标签;
- colors:每一块颜色;
- autopct:饼图内数值的百分比格式;
- pctdistance:数据标签距中心的距离;
- shadow:是否有阴影;
- labeldistance:每一块索引距中心的距离;
- startangle:饼图的初始角度;
- radius:饼图的半径;
- counterclock:是否逆时针显示;
- wedgeprops:内外边界属性;
- textprops:文本相关属性;
- center:中心位置;
- frame:是否显示背后的图框。
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
#饼图,建立坐标系
plt.subplot(1,1,1)
x=np.array([8566,5335,7310,6482])
labels=["东区","北区","南区","西区"]
explode=[0.1,0,0,0] # 区域之间的间隙
labeldistance=1.1
plt.pie(x,labels=labels,explode=explode,autopct='%.0f%%',shadow=True,
radius=1.0,labeldistance=labeldistance)
plt.title("全国个区域任务占比",loc="center")
十一.环形图
常用来表示同一层级不同类别之间的占比关系
参数详解
参数详解
plt.pie(x,explode,labels,colors,autopct,pctdistance,shadow,labeldistance,startangle,radius,counterclock,wedgeprops,textprops,center,frame)
- x:待绘图数据;
- explode:每一块离圆心距离;
- labels:每一块标签;
- colors:每一块颜色;
- autopct:饼图内数值的百分比格式;
- pctdistance:数据标签距中心的距离;
- shadow:是否有阴影;
- labeldistance:每一块索引距中心的距离;
- startangle:饼图的初始角度;
- radius:饼图的半径;
- counterclock:是否逆时针显示;
- wedgeprops:内外边界属性;
- textprops:文本相关属性;
- center:中心位置;
- frame:是否显示背后的图框。
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
#环形图,建立坐标系
plt.subplot(1,1,1)
#指明x值
x1=np.array([8566,5335,7310,6482])
x2=np.array([4283,2667,3655,3241])
#绘图
labels=["东区","北区","南区","西区"]
plt.pie(x1,labels=labels,radius=1.0,wedgeprops={"width":0.3,"edgecolor":"w"})
plt.pie(x2,radius=0.7,wedgeprops={"width":0.3,"edgecolor":"w"})
#添加注释
plt.annotate("完成量",xy=(0.35,0.35),xytext=(0.7,0.45),
arrowprops={"facecolor":"black","arrowstyle":"->"})
plt.annotate("任务量",xy=(0.75,0.2),xytext=(1.1,0.2),
arrowprops={"facecolor":"black","arrowstyle":"->"})
#设置标题
plt.title("全国各区域任务量与完成量占比",loc="center")
更多annotate内容
https://blog.csdn.net/TeFuirnever/article/details/88946088
十二.热力图
将某一事物的响应度反映在图表上,可以快速发现需要重点关注的区域
参数详解
plt.imshow(x,cmap)
- x:表示待绘图的数据,需要矩阵形式;
- cmap:配色方案,用来表明图表渐变的主题色。
代码示例
import itertools
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
cm = np.array([[1,0.082,0.031,-0.0086],[0.082,1,-0.063,0.062],
[0.031,-0.09,1,0.026],[-0.0086,0.062,0.026,1]])
cmap = plt.cm.cool #设置配色方案
plt.imshow(cm,cmap=cmap)
plt.colorbar() #显示右边的颜色条
#设置x轴和y轴的刻度标签
classes=["负债率","信贷数量","年龄","家属数量"]
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks,classes)
plt.yticks(tick_marks,classes)
#将数值显示在指定位置
for i,j in itertools.product(range(cm.shape[0]),range(cm.shape[1])):
plt.text(j,i,cm[i,j],ha="center")
plt.grid(False) #设置网格线
plt.show()
十三.雷达图
用来综合评价某一事物,它可以直观地看出该事物的优势与不足。其实雷达图就是先将各点展示在极坐标系中,再用线将各点连接起来
参数详解
plt.polar(theta,r,color,marker,linewidth)
- theta:每一点在极坐标系中的角度;
- r:每一点在极坐标系中的半径;
- color:连接各点之间线的颜色;
- marker:每点的标记物;
- linewidth:连接线的宽度
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
plt.subplot(1,1,1,polar = True) #参数polar等于True表示建立一个极坐标系
dataLenth = 5 #把整个圆均分成5份
#np.linspace 表示在指定的间隔内返回均匀间隔的数字
angles = np.linspace(0,2*np.pi,dataLenth,endpoint=False)
labels = ['沟通能力','业务理解能力','逻辑思维能力','快速学习能力','工具使用能力']
data=[2,3,4,5,6]
data = np.concatenate((data,[data[0]])) #闭合
angles = np.concatenate((angles,[angles[0]])) #闭合
plt.polar(angles,data,color='r',marker='o') #绘图
plt.xticks(angles,labels) #设置x轴刻度
plt.title('某数据分析师的综合评级')
树形图
表示同一等级中不同类别的占比关系,使用squarify包,需要先安装pip install squarify
参数详解
squarify.plot(sizes,label,color,value,edgecolor,linewidth)
- sizes:待绘图数据
- label:不同类别的图例标签
- color:不同类别的颜色
- value:不同类别的数据标签
- edgecolor:不同类别之间边框的颜色
- linewidth:边框线宽
代码示例
!pip install squarify --upgrade #更新squarify工具包
import squarify
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
#指定每一块的大小
size = np.array([3.4,0.693,0.585,0.570,0.562,0.531,0.530,0.524,0.501,0.478,0.468,0.436])
#指定每一块标签文字
xingzuo = np.array(["未知","摩羯座","天秤座","双鱼座","天蝎座","金牛座","处女座",
"双子座","射手座","狮子座","水瓶座","白羊座"])
#指定每一块数值标签
rate = np.array(["34%","6.93%","5.85%","5.70%","5.62%","5.31%","5.30%",
"5.24%","5.01%","4.78%","4.68%","4.36%"])
#指定每一块的颜色
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("菊粉星座分布",fontdict={'fontsize':12})
#去除坐标轴
plt.axis('off')
#去除上边框和右边框的刻度
plt.tick_params(top=False,right=False)
十五.水平线和垂直线
参数详解
plt.axhline(y,xmin,xmax) plt.axvline(x,ymin,ymax)
- y/x:画水平/垂直线时的横/纵坐标;
- xmin/xmax:水平线的起点和终点;
- ymin/ymax:垂直线的起点和终点。
代码示例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用自带的样式进行美化
# print(plt.style.available) # 打印出所有的样式
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False
plt.subplot(1,2,1)
plt.axhline(y=2,xmin=0.2,xmax=0.6)
plt.subplot(1,2,2)
plt.axvline(x=2,ymin=0.2,ymax=0.6)
欢迎大家的讨论与关注
最后
以上就是正直康乃馨为你收集整理的数据分析之matplotlib详解matplotlib介绍matplotlib安装绘制常用图表二.柱形图三.簇状柱形图四.堆积柱形图五.条形图六.散点图七.气泡图八.面积图九.箱体图十.饼图十一.环形图十二.热力图十三.雷达图树形图十五.水平线和垂直线欢迎大家的讨论与关注的全部内容,希望文章能够帮你解决数据分析之matplotlib详解matplotlib介绍matplotlib安装绘制常用图表二.柱形图三.簇状柱形图四.堆积柱形图五.条形图六.散点图七.气泡图八.面积图九.箱体图十.饼图十一.环形图十二.热力图十三.雷达图树形图十五.水平线和垂直线欢迎大家的讨论与关注所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复