绘制常用图表

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()

image-20220323103816139

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()

image-20220323104638323

① 簇状柱形图

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()

image-20220323104855207

② 堆积柱形图

# 堆积柱形图
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()

image-20220323105045786

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()

image-20220323105438001

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')

image-20220323105956452

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')

image-20220323110126362

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()

image-20220323110559296

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()

image-20220323111113588

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()

image-20220323111645884

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()

image-20220323112023560

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()

image-20220323112659005

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()

image-20220323112858728

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()

image-20220323113320232

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)

image-20220323113524250