绘制常用图表
1> 绘制折线图
plt.plot(x, y, color, linestyle, linwidth, marker, markeredgecolor, markeredgewidth, markerfacecolor, markersize, label)
| color参数 | 说明 |
|---|---|
| b | 蓝色 |
| g | 绿色 |
| r | 红色 |
| c | 青色 |
| m | 品红 |
| y | 黄色 |
| k | 黑色 |
| w | 白色 |
| linestyle参数 | 说明 |
|---|---|
| solid | 实线 |
| dashed | 短线 |
| dashdot | 点画线 |
| dotted | 虚线 |
| marker参数 | 说明 |
|---|---|
| . | 点标记 |
| 'o | 圆圈标记 |
| v | 下三角标记 |
| ^ | 上三角标记 |
| < | 左三角标记 |
| > | 右三角标记 |
| s | 正方形标记 |
| p | 五边形标记 |
| * | 五角星标记 |
| h | 六边形标记 |
| + | +号标记 |
| x | x 标记 |
| D | 大菱形标记 |
| d | 小菱形标记 |
| - | 横线标记 |
| marker相关参数 | 说明 |
|---|---|
| markeredgecolor | 标记外边颜色 |
| markeredgwidth | 标记外边线宽 |
| markerfacecolor | 标记实心颜色 |
| markersize | 标记大小 |
| label | 图例名称 |
plt.subplot(1,1,1)
x = np.arange(1,10)
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('注册用户量',loc = 'center',fontproperties = my_font)
# 数据标签
for a,b in zip(x,y):
plt.text(a,b,b,ha = 'center', va = 'bottom', fontsize = 10)
plt.grid(True)
plt.legend(prop = my_font)
plt.savefig('./assets/注册.png')
plt.show()

2> 绘制柱形图
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 | 表示柱子边缘的颜色 |
x1 = np.array(['东区','北区','南区','西区'])
y1 = np.array([8566, 6482, 5335, 7310])
# 设置图形大小
plt.figure(figsize=(6,4),dpi = 80)
# 绘图
plt.bar(x1, y1, width = 0.5, align = 'center', label = '任务量')
# 设置标题
plt.title('任务量', loc = 'center',fontproperties = my_font)
# 添加数据标签
for a,b in zip(x1,y1):
plt.text(a,b,b,ha = 'center', va = 'bottom', fontsize = 10)
# 设置轴标签
plt.xlabel('分区',fontproperties = my_font)
plt.ylabel('任务量',fontproperties = my_font)
plt.xticks(fontproperties = my_font)
# 显示图例
plt.legend(prop = my_font)
# 保存视图
plt.savefig('./assets/柱形图.png')
# 显示视图
plt.show()

① 簇状柱形图
x2 = np.arange(1,5)
y2_1 = np.array([8566, 6482, 5335, 7310])
y2_2 = np.array([4283, 2667, 3655, 3241])
# 设置图形大小
plt.figure(figsize=(6,4),dpi = 80)
# 绘图
plt.bar(x2, y2_1, width = 0.3, label = '任务量')
plt.bar(x2+0.3, y2_2, width = 0.3, label = '完成量')
# 设置标题
plt.title('任务量', loc = 'center', fontproperties = my_font)
# 添加数据标签
for a,b in zip(x2,y2_1):
plt.text(a, b, b, ha = 'center', va = 'bottom', fontsize = 10)
for a,b in zip(x2+0.3,y2_2):
plt.text(a, b, b, ha = 'center', va = 'bottom', fontsize = 10)
# 设置轴标签
plt.xlabel('分区',fontproperties = my_font)
plt.ylabel('任务量',fontproperties = my_font)
# 设置轴刻度
plt.xticks(x+0.15, ['东区','北区','南区','西区'], fontproperties = my_font)
# 显示图例
plt.legend(prop = my_font)
# 设置网格线
plt.grid(False)
# 设置x轴长度
plt.xlim(0,5)
# 保存视图
plt.savefig('./assets/簇状柱形图.png')
# 显示视图
plt.show()

② 堆积柱形图
# 堆积柱形图
x3 = np.arange(1,5)
y3_1 = np.array([8566, 6482, 5335, 7310])
y3_2 = np.array([4283, 2667, 3655, 3241])
# 绘图
plt.bar(x3, y3_1, width = 0.3, label = '任务量')
plt.bar(x3, y3_2, width = 0.3, label = '完成量')
# 设置标题
plt.title('任务量', loc = 'center', fontproperties = my_font)
# 添加数据标签
for a,b in zip(x3,y3_1):
plt.text(a, b, b, ha = 'center', va = 'bottom', fontsize = 10)
for a,b in zip(x3,y3_2):
plt.text(a, b, b, ha = 'center', va = 'bottom', fontsize = 10)
# 设置轴标签
plt.xlabel('分区',fontproperties = my_font)
plt.ylabel('任务量',fontproperties = my_font)
# 设置轴刻度
plt.xticks(x, ['东区','北区','南区','西区'], fontproperties = my_font)
# 显示图例
plt.legend(prop = my_font)
# 设置网格线
plt.grid(True,axis = 'y')
# 设置坐标轴长度
plt.xlim(0,5)
plt.ylim(0,10000)
# 保存视图
plt.savefig('./assets/堆积柱形图.png')
# 显示视图
plt.show()

3> 绘制条形图
plt.barh(y, height, width, align, color, edgecolor)
| 参数 | 说明 |
|---|---|
| y | 表示在什么位置显示柱子,即纵坐标 |
| width | 表示柱子在横向的宽度,即横坐标 |
| height | 表示柱子在纵向的高度,即柱子的实际宽度 |
| align | 表示柱子的对齐方式 |
| color | 表示柱子的颜色 |
| edgecolor | 表示柱子边缘的颜色 |
x4 = np.array(['东区','北区','南区','西区'])
y4 = np.array([8566, 6482, 5335, 7310])
# 绘图
plt.barh(x4, height = 0.5, width = y4, align = 'center', label = '任务量')
# 设置标题
plt.title('任务量', loc = 'center',fontproperties = my_font)
# 添加数据标签
for a,b in zip(x4,y4):
plt.text(b,a,b,ha = 'center', va = 'bottom', fontsize = 10)
# 设置轴标签
plt.xlabel('分区', fontproperties = my_font)
plt.ylabel('任务量', fontproperties = my_font)
plt.yticks(fontproperties = my_font)
# 显示图例
plt.legend(prop = my_font)
# 保存视图
plt.savefig('./assets/条形图.png')
# 显示视图
plt.show()

4> 绘制散点图
plt.scatter(x, y, s, c, marker, linewidths, edgecolors)
| 参数 | 说明 |
|---|---|
| (x,y) | 表示散点的位置 |
| s | 表示每个点的面积,即散点的大小.如果只有一个具体值时,则所有点的大小都一样. 也可以呈现多个值,让每个点点的大小都不一样,这时候就成了气泡图 |
| c | 表示每个点的颜色,如果只有一种颜色时,则所有点的颜色都相同,也可以呈现多个颜色值,让不同点的颜色不同 |
| marker | 每个点的标记,和折线图的 marker 相同 |
| linewidth | 表示每个散点的线宽 |
| edgecolors | 表示每个散点外轮廓的颜色 |
x5 = [5.5, 6.6, 8.1, 15.8, 19.5, 22.4, 28.3, 28.9]
y5 = [2.38, 3.85, 4.41, 5.67, 5.44, 6.03, 8.15, 6.87]
# 绘图
plt.scatter(x5, y5, marker = 'o', s = 100)
# 设置标题
plt.title('气温和啤酒销量关系图',loc = 'center',fontproperties = my_font)
# 设置x轴和y轴的名称
plt.xlabel('平均气温',fontproperties = my_font)
plt.ylabel('啤酒销量',fontproperties = my_font)
# 设置网格线
plt.grid(False)
# 保存图表
plt.savefig('./assets/散点图.png')

5> 绘制气泡图
# 气泡图
x6 = np.array([5.5, 6.6, 8.1, 15.8, 19.5, 22.4, 28.3, 28.9])
y6 = np.array([2.38, 3.85, 4.41, 5.67, 5.44, 6.03, 8.15, 6.87])
colors = y6 * 10
area = y6 * 150
# 绘图
plt.scatter(x6, y6, c = colors, s = area, marker = 'o')
# 设置标题
plt.title('气温和啤酒销量关系图', loc = 'center',fontproperties = my_font)
# 设置x轴和y轴的名称
plt.xlabel('平均气温',fontproperties = my_font)
plt.ylabel('啤酒销量',fontproperties = my_font)
# 设置网格线
plt.grid(False)
# 保存图表
plt.savefig('./assets/气泡图.png')

6> 绘制面积图
plt.stackplot(x, y, labels, colors)
| 参数 | 说明 |
|---|---|
| (x,y) | 表示坐标数值 |
| labels | 不同系列图表的图例名 |
| colors | 不同系列图表的颜色 |
x7 = np.arange(1,10)
y7_1 = np.array([866, 2335, 5710, 6428, 6120, 1605, 3813, 4428, 4631])
y7_2 = np.array([433, 1167, 2855, 3241, 3060, 802, 1906, 2214, 2315])
#绘图
labels = ['注册人数', '激活人数']
plt.stackplot(x7, y7_1, y7_2, labels = labels)
# 设置标题
plt.title('注册及其激活人数', loc = 'center',fontproperties = my_font)
# 设置x轴和y轴名称
plt.xlabel('月份',fontproperties = my_font)
plt.ylabel('注册与激活人数',fontproperties = my_font)
# 设置网格
plt.grid(False)
# 设置图例
plt.legend(prop = my_font)
plt.savefig(r'./assets/面积图.png')
plt.show()

7> 绘制树地图
常用来表示同一等级中不同类别的占比关系,需要使用squarify;
pip install squarify
squarify.plot(sizes, label, color, value, edgecolor, linewidth)
| 参数 | 说明 |
|---|---|
| sizes | 待绘图数据 |
| label | 不同类别的图例标签 |
| color | 不同类别的颜色 |
| value | 不同类别的颜色 |
| edgecolor | 不同类别之间边框的颜色 |
| linewidth | 边框线宽 |
# 指定每一块的大小
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','#9997fe','red','indianred','green','yellow','orange']
# 绘图
plot = squarify.plot(sizes = size, label = xingzuo, color = colors, value = rate, edgecolor = 'white', linewidth = 3)
# 设置标题
plt.title('星座分布',fontsize = 12,fontproperties = my_font)
# 去除坐标轴
plt.axis('off')
# 去除上边框和右边框的刻度
plt.tick_params(top = 'off', right = 'off')
# 保存图表
plt.savefig(r'./assets/树地图.png')
plt.show()

8> 绘制雷达图
plt.polar(theta, color, marker, linewidth)
| 参数 | 说明 |
|---|---|
| theta | 每一点在极坐标中的角度 |
| r | 每一点在极坐标中的半径 |
| color | 连接各点之间线的颜色 |
| marker | 每点的标记物 |
| linewidth | 连接线的宽度 |
# 建立坐标系
plt.subplot(1, 1, 1, polar = True) # polar = True 表示建立一个极坐标系
# 将整个圆分为5份
dataLenth = 5
# 设置角度
angles = np.linspace(0, 2*np.pi, dataLenth, endpoint = False)
labels = ['沟通能力','业务理解能力','逻辑思维能力','快速学习能力','工具使用能力']
data = [2, 3.5, 4, 4.5, 5]
# 数据和角度闭合
data = np.concatenate((data, [data[0]]))
angle = np.concatenate((angles, [angles[0]]))
# 绘图
plt.polar(angle,data,color = 'r', marker = 'o')
# 设置x轴的刻度
plt.xticks(angles,labels)
# 设置标题
plt.title(label = '综合评级')
# 保存图表
plt.savefig('./assets/雷达图.png')
plt.show()

9> 绘制箱型图
plt.boxplot(x, vert, widths, labels)
| 参数 | 说明 |
|---|---|
| x | 待绘图源数据 |
| vert | 箱型图方向,True : 纵向,False : 横向 |
| widths | 箱型图的宽度 |
| labels | 箱型图的标签 |
y8_1 = np.array([866, 2335, 5710, 6428, 6120, 1605, 3813, 4428, 4631])
y8_2 = np.array([433, 1167, 2855, 3241, 3060, 802, 1906, 2214, 2315])
x8 = [y8_1, y8_2]
#绘图
labels = ['注册人数', '激活人数']
plt.boxplot(x8, labels=labels, vert = True, widths = [0.2, 0.5])
# 设置标题
plt.title('注册及其激活人数', loc = 'center',fontproperties = my_font)
# 设置网格
plt.grid(False)
plt.savefig(r'./assets/箱线图.png')
plt.show()

10> 绘制饼图
plt.pie(x, explode, labels, colors, autopct, petdistance, shadow, labeldistance, startangle, radius, counterclock, wedgeprops, textprops, center, frame)
| 参数 | 说明 |
|---|---|
| x | 待绘图数据 |
| explode | 饼图中每一块离圆心的距离 |
| labels | 饼图中每一块的标签 |
| colors | 饼图中每一块的颜色 |
| autopct | 控制饼图内数值的百分比格式 |
| pctdistance | 数据标签距中心的距离 |
| shadow | 饼图是否有阴影 |
| labeldistance | 每一块索引距离中心的距离 |
| startangle | 饼图的初识角度 |
| radius | 饼图的半径 |
| counterclock | 是否让饼图逆时针显示 |
| wedgeprops | 饼图内外边界属性 |
| textprops | 饼图中文本相关属性 |
| center | 饼图中心位置 |
| frame | 是否显示饼图背后的图框 |
x = np.array([8566, 5335, 7310, 6482])
# 设置标签
labels = ['东区', '北区', '南区', '西区',]
# 设置饼图离圆心的距离
explode = [0.1, 0, 0, 0]
# 索引距离中心的距离
labeldistance = 1.1
# 绘图
plt.pie(x, labels = labels, autopct = '%.0f%%', shadow = True, explode = explode, radius = 1.0, labeldistance = labeldistance)
#设置标题
plt.title('全国各区域任务量占比', loc = 'center')
#保存图表
plt.savefig(r'./assets/饼图.png')
plt.show()

11> 圆环图
在饼图的基础上调整 wedgeprops 参数
# 绘制圆环图
x9_1 = np.array([866, 2335, 5710, 6428])
x9_2 = np.array([433, 1167, 2855, 3241])
# 绘图
labels = ['东区', '北区', '南区', '西区']
plt.pie(x9_1, labels = labels, radius = 1.0,wedgeprops = dict(width = 0.3, edgecolor = 'w'))
plt.pie(x9_2, radius = 0.7,wedgeprops = dict(width = 0.3, edgecolor = 'w'))
# 添加注释
plt.annotate('完成量', xy = (0.35,0.35), xytext = (1.1,0.5), arrowprops = dict(facecolor = 'black', arrowstyle = '->'))
plt.annotate('任务量', xy = (0.75,0.2), xytext = (1.3,0.3), arrowprops = dict(facecolor = 'black', arrowstyle = '->'))
# 设置标题
plt.title('任务量和完成量的占比', loc = 'center')
# 保存图表
plt.savefig(r'./assets/圆环图.png')
plt.show()

12> 绘制热力图
plt.imshow(x, cmap)
| 参数 | 说明 |
|---|---|
| x | 待绘图的数据,需要是矩阵形式 |
| cmap | 配色方案,用来表明图表渐变的主题色 |
import itertools
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)
# 显示有比恩的颜色条
plt.colorbar()
# 设置刻度标签
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], horizontalalignment = 'center')
#保存图片
plt.savefig(r'./assets/热力图.png')
plt.show()

13> 绘制水平线和垂直线
plt.subplot(1,2,1)
plt.axhline(y = 4, xmin = 0.2, xmax = 0.8)
plt.subplot(1,2,2)
plt.axvline(x = 4, ymin = 0.2, ymax = 0.8)
