绘制常用图表
- 折线图
- 柱形图
- 普通柱形图
- 簇状柱形图
- 堆积柱形图
- 条形图
- 散点图
- 气泡图
- 面积图
- 树地图
- 雷达图
- 箱形图
- 饼图
折线图
plt.plot(x,y,color,linestyle,linewidth,marker,markeredecolor,markeregwidth,markerfacecolor,markersize,lable)
- x,y表示x轴和y轴的数据,为必选项
- color表示折线颜色
- linestyle表示线的风格
- linewidth表示线的宽度
- marker表示折线图中每点的标记物的形状
- markeredgecolor表示标记外边颜色
- markeregwidth表示标记外边线宽
- markerfacecolor表示标记实心颜色
- markersize表示标记大小
- lable表示该图的图例名称
实例:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 解决中文乱码
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
%config InlineBackend.figure_format = 'svg'
# 建立一个坐标系
plt.subplot(1,1,1)
# 指明x和y值
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 = 'dashdot',linewidth = 1,marker = 'o',markersize = 5,label = '注册用户数')
# 设置标题名及标题位置
plt.title('xxx公司1-9月注册用户量',loc ='center' )
# 添加数据标签
for a,b in zip(x,y):plt.text(a,b,b,ha = 'center',va = 'bottom',fontsize = 10)
# 设置网格线
plt.grid(True)
# 设置图例
plt.legend()
# 保存图表到本地
plt.savefig(r'/Users/faye/Desktop/python学习/plot.jpg')
柱形图
plt.bar(x,height,width = 0.8,bottom = None,align = 'center',color,edgecolor)
- x表示在哪个位置显示柱形图
- height表示每根柱子的高度
- width表示每根柱子的宽度,可以一样,也可以不同
- bottom表示每根柱子的底部位置,可以一样,也可以不同
- align表示柱子的位置与x值的关系,有center、edge两个,center表示柱子位于x值中心,edge表示柱子位于x值边缘
- color表示柱子颜色
- edgecolor表示柱子边缘的颜色
普通柱形图
# 建立一个坐标系
plt.subplot(1,1,1)
# 指明x,y
x = np.array(['东区','北区','南区','西区'])
y = np.array([8566,6482,5335,7310])
# 绘图
plt.bar(x,y,width = 0.5,align = 'center',label = '任务量')
# 设置标题
plt.title('全国各分区任务量',loc = 'center')
# 添加数据标签
for a,b in zip(x,y):plt.text(a,b,b,ha = 'center',va = 'bottom',fontsize = 12)
# 设置x轴,y轴的名称
plt.xlabel('分区')
plt.ylabel('任务量')
plt.legend() #显示图例
簇状柱形图
# 建立一个坐标系
plt.subplot(1,1,1)
# 指明x,y
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 = '任务量') # 柱形宽度为0.3
plt.bar(x+0.3,y2,width = 0.2,label = '完成量') #柱形宽度为0.2,x+0.3相当于把任务量的每个柱子右移0.3
# 设置标题
plt.title('全国各分区任务量和完成量',loc = 'center')
# 添加数据标签
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)
# 设置x轴,y轴名称
plt.xlabel('区域')
plt.ylabel('任务情况')
# 设置x轴刻度值
plt.xticks(x+0.15,['东区','南区','西区','北区'])
# 设置网格线
plt.grid(True)
# 图例设置
plt.legend()
堆积柱形图
# 建立坐标系
plt.subplot(1,1,1)
# 指明x,y
x = np.array(['东区','南区','北区','西区'])
y1 = np.array([8566,6482,5335,7310])
y2 = np.array([4283,3241,2667,3655])
# 绘图
plt.bar(x,y1,width = 0.3,label = '任务量')
plt.bar(x,y2,width = 0.3,label = '完成量')
# 设置标题
plt.title('全国各分区任务量和完成量',loc = 'center')
# 添加数据标签
for a,b in zip(x,y1):plt.text(a,b,b,ha = 'center',va = 'bottom' ,fontsize = 12)
for a,b in zip(x,y2):plt.text(a,b,b,ha = 'center',va = 'bottom' , fontsize = 12)
# 设置x轴,y轴名字
plt.xlabel('区域')
plt.ylabel('任务情况')
# 设置图例
plt.legend(loc = 'upper center',ncol = 2)
条形图
plt.barh(y,width,height,align,color,edgecolor)
- y表示在什么位置显示柱子,即纵坐标
- width表示柱子的横向的宽度,即横坐标
- height表示柱子的纵向的宽度,即柱子的实际宽度
- align表示柱子的对齐方式
- color表示柱子的颜色
- edgecolor表示柱子边缘的颜色
# 建立坐标系
plt.subplot(1,1,1)
#指明x,y
x = np.array(['东区','西区','北区','南区'])
y = np.array([8566,6482,5335,7310])
# 绘图
plt.barh(x,height = 0.5,width = y,align = 'center')
#设置标题
plt.title('全国各区任务量')
# 添加数据标签
for a,b in zip(x,y):plt.text(b,a,b,ha = 'center',va = 'center',fontsize =12)
# 设置x轴,y轴
plt.xlabel('任务量')
plt.ylabel('区域')
# 保存图表到本地
plt.savefig(r'/Users/faye/Desktop/python学习/barh.jpg')
散点图
plt.scatter(x,y,s,c,marker,linwidths,edgecolors)
- (x,y)表示散点的位置
- s表示散点大小
- c表示散点颜色
- marker表示每个点的标记
- linewidths表示散点的线宽
- edgecolors表示散点外轮廓的颜色
# 建立坐标系
plt.subplot(1,1,1)
# 指明x,y
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月气温与啤酒销量关系图')
# 设置x轴,y轴
plt.xlabel('气温')
plt.ylabel('啤酒销量')
气泡图
气泡图与散点图类似,散点图中的各点的大小一致,气泡图中各点的大小不一致,同样使用plt库的scatter方法
# 建立坐标系
plt.subplot(1,1,1)
# 指明x,y
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])
# 绘图
plt.scatter(x,y,c = (y*10),marker = 'o',s = (y*100))
# 设置标题
plt.title('1-8月气温与啤酒销量关系图')
# 添加数据标签
for a,b in zip(x,y):plt.text(a,b,b,ha = 'center',va = 'center',fontsize = 10,color = 'white')
# 设置x轴,y轴
plt.xlabel('气温')
plt.ylabel('啤酒销量')
面积图
plt.stackplot(x,y,labels,colors)
- (x,y)表示坐标数值
- labels表示不同系列图表的图例名
- colors表示不同系列图表的颜色
# 建立坐标系
plt.subplot(1,1,1)
# 指明x,y
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.stackplot(x,y1,y2,labels = ['注册人数','激活人数'])
# 设置标题
plt.title('1-9月注册与激活人数')
# 设置x轴、y轴名称
plt.xlabel('月份')
plt.ylabel('注册与激活人数')
# 设置图例
plt.legend()
树地图
squarity.plot(sizes,label,color,value,edgecolor,linewidth)
- sizes表示待绘图数据
- label表示不同类别的图例标签
- color表示不同类别的颜色
- value表示不同类别的数据标签
- edgecolor表示不同类别之间的边框的颜色
- linewidth边框线宽
import squarify#中文及负号处理办法
plt.rcParams['font.sans-serif'] = 'Arial Unicode MS'
plt.rcParams['axes.unicode_minus'] = False# 数据创建
name = ['上海GDP','北京GDP','广州GDP','深圳GDP','天津GDP','重庆GDP','苏州GDP','武汉GDP','成都GDP','杭州GDP','南京GDP','青岛GDP','长沙GDP', '无锡GDP','佛山GDP','宁波GDP','大连GDP','郑州GDP','沈阳GDP','烟台GDP']
income =[26688,24541,20004,19300,17800,17010,15400,11756,11721,11700,10450,10100,9309,9157,8600,8560,8150,7920,7644,7003]# 绘图details
colors = ['steelblue','#9999ff','red','indianred','deepskyblue','lime','magenta','violet','peru', 'green','yellow','orange','tomato','lawngreen','cyan','darkcyan','dodgerblue','teal','tan','royalblue']
plot = squarify.plot(sizes = income, # 指定绘图数据label = name, # 指定标签color = colors, # 指定自定义颜色alpha = 0.6, # 指定透明度value = income, # 添加数值标签edgecolor = 'white', # 设置边界框为白色linewidth =3 # 设置边框宽度为3)
# 设置标签大小为10
plt.rc('font', size=10)
# 设置标题大小
plot.set_title('2017年城市GDP排名前20(亿元)',fontdict = {'fontsize':15})
# 除坐标轴
plt.axis('off')
# 除上边框和右边框刻度
plt.tick_params(top = 'off', right = 'off')
# 图形展示
plt.show()
雷达图
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]])) #闭合
angles = np.concatenate((angles,[angles[0]])) # 闭合
# 绘图
plt.polar(angles,data,color = 'r',marker = 'o')
# 设置x轴刻度
plt.xticks(angles,labels)
# 设置标题
plt.title('数据分析师的综合评级')
箱形图
plt.boxplot(x,vert,widths,labels)
- x表示待绘图源数据
- vert表示箱形图方向,True为纵向,False为横向,默认为True
- widths箱形图的宽度
- labels箱形图的标签
# 建立坐标系
plt.subplot(1,1,1)
# 指明x值
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]
# 绘图
plt.boxplot(x,labels = ['注册人数','激活人数'],vert = True,widths = [0.2,0.5])
plt.title('1-9月注册与激活人数')