绘制折线图(plot)
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 设置中文样式
plt.rcParams['axes.unicode_minus'] = False # 防止变成方块
x = np.arange(0,10,2)
y = np.array(2*x)
plt.xlabel('x轴') # x轴标签
plt.ylabel('y轴') # y轴标签
plt.title("简单的折线图",# 标题
color='r',#设置颜色
size=20 # 字体大小
)
plt.plot(x, # 表示x轴的数据
y, # 表示y轴的数据
'o-r', # fmt = '[marker][line][color]' # 格式化字符串:由标记、线条和颜色部分组成,每一个参数都是可选的
linewidth=1, # 设置画出的线的粗细大小 # linewidth=lw
# color='y', #设置颜色,在fmt的后面设置,会覆盖其颜色
)
plt.legend(['折线图']) # 创建图例 # 在plot后面设置
plt.show()
绘制条形图或堆积条形图(barh)
绘制条形图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 设置中文样式
plt.rcParams['axes.unicode_minus'] = False # 防止变成方块
# 单组条形图
y = np.arange(5)
x1 = np.array([10,7,5,8,11])
x2 = np.array([11,8,6,9,12])
erro=[0.1,0.1,0.2,0.3,0.3]
error_test={'ecolor':'blue', # 误差棒的线条颜色设置
'capsize':1, # 表示误差棒边界横杆的大小
'capthick':1, # 表示误差棒边界横杆的厚度
'elinewidth':1 # 表示误差棒的线条宽度
}
plt.title('简单的条形图')
plt.barh(y,# 条形的y坐标值
x1,# 条形图的长度
height=0.4,# 条形的宽度
left=0,# 条形左侧x的左边,默认从0开始
align='center',# 有'center'和'edge'两个取值,'center'表示将条形与刻度线居中对齐,'edge'表示条形的底边与刻度线对齐,默认center
color='r',# 设置条形图的颜色
tick_label=['a','b','c','d','e'],# 设置y轴坐标标签
edgecolor='r', # 条形形边缘的颜色设置
xerr=erro, # 绘制水平误差棒的范围
yerr=erro, # 绘制垂直误差棒的范围
error_kw=error_test # error_kw,表示误差棒的属性字典
)
# 绘制第二组条形图
plt.barh(y+0.4, # 加上height的长度
x2,
height=0.4)
plt.show()
绘制堆积条形图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 设置中文样式
plt.rcParams['axes.unicode_minus'] = False # 防止变成方块
y = np.arange(5)
x1 = np.array([10,7,5,8,11])
x2 = np.array([11,8,6,9,12])
erro=[1,3,2,2.5,1.4] # 设置偏差数据
plt.title("简单的堆积条形图")
plt.barh(y, x1,tick_label=['a','b','c','d','e'],height=0.4)
plt.barh(y, x2,left=x1,height=0.4,xerr=erro)
plt.show()
绘制柱形图或堆积柱形图(bar)
绘制柱形图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 设置中文样式
plt.rcParams['axes.unicode_minus'] = False # 防止变成方块
x = np.arange(5)
hegiht= np.array([2,9,7,12,11])
y1 = np.array([3,1,2,6,8])
plt.title("简单的柱形图")
erro=[1,0.5,0.6,0.8,0.3]
error_test={'ecolor':'blue', # 误差棒的线条颜色设置
'capsize':1, # 表示误差棒边界横杆的大小
'capthick':1, # 表示误差棒边界横杆的厚度
'elinewidth':1 # 表示误差棒的线条宽度
}
plt.bar(x, # 柱形的x坐标值
hegiht, # 表示柱形的高度
width=0.2, # 表示柱形的宽度,默认为0.8
bottom=None, # 柱形底部的y坐标值,默认为0,绘制堆积柱形图时使用
align='center', # 柱形对齐方式,有两个取值:"center"(居中对齐)、"edge"(将柱形的左边与刻度线对齐),默认是center
tick_label=['a','b','c','d','e'], # 表示柱形对应的x轴刻度标签,默认值:无
color='r',# 设置柱形图的颜色
edgecolor='r', # 柱形边缘的颜色设置
xerr=erro, # 绘制水平误差棒的范围
yerr=erro, # 绘制垂直误差棒的范围
error_kw=error_test # error_kw,表示误差棒的属性字典
)
# 绘制第二组柱形图
plt.bar(x+0.2, # 加上第一组柱形图的宽度
y1,width=0.2)
plt.show()
绘制堆积柱形图
x = np.arange(5)
hegiht= np.array([2,9,7,12,11])
y1 = np.array([3,1,2,6,8])
plt.title("简单的堆积柱形图")
plt.bar(x, hegiht, width=0.2)
plt.bar(x, y1,
bottom=hegiht, # bottom等于前一个柱形图的高度
width=0.2 # 柱形宽度
)
plt.show()
绘制堆积面积图(stackplot)
绘制简单的堆积面积图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 设置中文样式
plt.rcParams['axes.unicode_minus'] = False # 防止变成方块
x = np.arange(6)
y1 = np.array([1,4,3,5,6,7])
y2 = np.array([1,3,4,2,7,6])
y3 = np.array([3,4,3,6,5,5])
# 绘制堆积面积图
plt.title("简单的堆积面积图")
plt.stackplot(x,# 表示x轴的数据,可以是一维数组
y1, y2, y3, # 表示y轴数据,可以是二维数组或一维数组
baseline='zero'#'zero':恒定零基线,即简单的堆积图。
#'sym':围绕零对称,有时称为“ThemeRiver”。
#'wiggle':最小化平方斜率的总和。
#'weighted_wiggle': 做同样的事情,但权重要考虑每一层的大小。它也被称为“流图”布局。
)
plt.show()
例子
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
x = np.arange(5)
y = np.array([[20,34,30,35,37],[25,32,34,20,25],[21,31,37,21,28]])
baseline = ['zero','sym','wiggle','weighted_wiggle']
fig, axes = plt.subplots(1, 4, figsize=(13,3))
for ax, b in zip(axes, baseline): # zip序列解包,
# zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象
ax.stackplot(x, y, baseline = b)
plt.show()
绘制直方图(hist)
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 设置中文样式
plt.rcParams['axes.unicode_minus'] = False # 防止变成方块
# 准备100个随机测试的数据
data = np.random.randint(0,100,100)
data1 = np.random.randint(0,100,100)
plt.subplot(421)
plt.hist([data,data1],# 表示x轴的数据,可以为单个数组或多个数组的序列
10,# bins,表示矩形的条数,默认为10
histtype='barstacked'# 堆积直方图
# rwidth 直方图柱体宽度
# log 是否以对数形式展示y轴刻度 默认False
# stacked 数据集是否以堆叠形式展示 默认False
# density y轴显示频数或频率
# cumulative y轴数据是否累加显示
# weights 数据的权重数组
)
plt.subplot(422)
plt.hist([data,data1], 10,histtype='bar',# 传统直方图
orientation='horizontal'# 表示矩形条的摆放方式,默认为'vertical'垂直方向,horizontal是水平方向
)
plt.subplot(423)
plt.hist([data,data1], 10,
histtype='step'# 未填充的线条直方图
)
plt.subplot(424)
plt.hist([data,data1], 10,histtype='stepfilled',# 填充的线条直方图
align='left',# 表示矩形的对齐方式,可设置为'left','mid'或'right',默认为'mid'
)
plt.xticks(np.arange(0,101,10))
plt.show()
绘制饼图或圆环图
绘制饼图
## 饼图
import numpy as np
import matplotlib.pyplot as plt
## 设置中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
data = np.array([500,1000,200,300,700])
plt.title("简单的饼图",color='r')
plt.pie(data,
explode = ([0,0.3,0,0,0]),# 扇形离开圆心的距离
labels=(['吃饭','购物','车费','洗脚','按摩']), # 扇形对应的标签文本
autopct='%2.2f%%',# 表示控制扇形数值的字符串
shadow=True,# 表示是否显示阴影
startangle=90,# 起始绘制角度,默认x轴正方向逆时针旋转
frame=True,# 是否显示坐标轴图框
center=(0.5,0.5),# 饼图圆心的位置,值是一个坐标(x,y)
radius=1.5# 饼图半径大小,默认为1
# counterclock 数据绘制的方向,默认True,逆时针旋转
# wedgeprops 控制扇形属性的字典,例如wedgeprops = {'width':0.7}
# textprops 控制饼图中文本属性的字典,例如:{'font':'SimHei', 'color':'red', 'size':16}
)
plt.show()
绘制圆环图
import numpy as np
import matplotlib.pyplot as plt
## 设置中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
data = np.array([500,1000,200,300,700])
plt.title("简单的圆环图",color='r',loc="center",pad=25)
# 绘制圆环图:外圆半径为1.5,楔形的宽度为0.7
plt.pie(data,radius=1.5,wedgeprops={'width':0.7},labels=(['吃饭','购物','车费','洗脚','按摩']),autopct='%2.2f%%',
pctdistance=0.75 # 扇形数值距离圆心的距离
)
plt.show()
绘制散点图或气泡图(scatter)
绘制散点图
# 散点图
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors
## 设置中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
norm = colors.Normalize(0.3, 0.8)
num = 50
x = np.random.rand(num)
y = np.random.rand(num)
plt.title("简单的散点图")
plt.scatter(
x,y,
c = 'r',# 设置颜色
# cmap = 'b',# 设置颜色,仅当c是浮点数组时才使用cmap
# marker = '',
norm=norm,# 表示数据宽度,在0~1之间
vmin=0.3,# 表示亮度的最小值
vmax=0.8,# 表示亮度的最大值,给出norm时使用vmin / vmax是会被忽略的
alpha=0.8,# 表示透明度,介于 0(透明)和 1(不透明)之间。
edgecolors='b',# 数据点的边缘颜色。
#linewidths:表示数据点边缘的颜色
)
plt.show()
绘制气泡图
# 气泡图
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors
## 设置中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
num = 50
x = np.random.rand(num)
y = np.random.rand(num)
plt.title("简单的气泡图")
area = (30*np.random.rand(num))**2 # 以点为单位的标记大小**2。默认为。rcParams['lines.markersize'] ** 2
plt.scatter(x,y,s=area)# 其他参数与散点图一致
plt.show()
绘制箱形图(boxplot)
# 箱型图
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.sans-serif"] = ["KaiTi"] # 设置中文样式
plt.rcParams["axes.unicode_minus"] = False # 防止负号变成方块
data1 = np.random.randn(100)
data2 = np.random.randn(100)
plt.title("简单的箱形图")
plt.boxplot([data1,data2],# 绘制箱形图的数据
notch=True, # 箱型是否在中位线凹进去
sym='x', # 类似marker,异常值使用符号,默认为o
vert=False, # 箱形的位置
positions=([2,5]), # 箱体的位置
widths=([0.3,0.5]), # 箱体的宽度
patch_artist=True, # 箱型填充的颜色,默认False,若要填充颜色,改为True即可
showcaps=True, # 显示最大值和最小值的两根线
showfliers=False, # 是否显示异常值
labels=(['箱形1','箱形2']), # 箱型图的标签
# boxplot=(), # 控制箱体属性的字典
# filerprops=(), # 控制异常值属性的字典
# meanprops=(), # 控制均值点的属性的字典
# medianprops=() # 控制中位线属性的字典
meanline=True # 是否用跨箱体的线条标出中位数,默认不使用
)
plt.show()
绘制雷达图(polar)
绘制简单的雷达图
# 雷达图
import matplotlib.pyplot as plt
import numpy as np
# 中文设置
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
data = np.array([0.4,0.32,0.35,0.3,0.3,0.88])
angles = np.linspace(0,2*np.pi,6,endpoint=True)
labels_angles = np.array([0,60,120,180,240,300])# 设置指定度数范围
plt.polar(angles,# 表示每个数据点所在射线与极径的夹角
data # 指定数据的点到原点的距离
)
plt.thetagrids(labels_angles,# 带有浮点数、度数的角度元组
labels=['研究','艺术','企业','社会','传统','现实']# 标签
)
# 填充多边形
plt.fill(angles, data,alpha=0.3)
plt.show()
实例:霍兰德职业兴趣测试
# 实例:霍兰德职业兴趣测试
import matplotlib.pyplot as plt
import numpy as np
# 中文设置
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
dim_num = 6
data = np.array([[0.40, 0.32, 0.35, 0.30, 0.30, 0.88],
[0.85, 0.35, 0.30, 0.40, 0.40, 0.30],
[0.43, 0.89, 0.30, 0.28, 0.22, 0.30],
[0.30, 0.25, 0.48, 0.85, 0.45, 0.40],
[0.20, 0.38, 0.87, 0.45, 0.32, 0.28],
[0.34, 0.31, 0.38, 0.40, 0.92, 0.28]
])
angles = np.linspace(0, 2*np.pi, dim_num, endpoint=False)# endpoint如果为 True,则停止是最后一个样本。否则,不包括在内。默认为真。
angles = np.concatenate((angles,[angles[0]])) # [angles[0]]数组以第一个数据结尾,因为上一个angles是以第一个数据开始的,所以第一个数据结尾相连
data = np.concatenate((data,[data[0]])) # 同上
# 纬度标签
rradar_labels = ['研究型(I)', '艺术型(A)', '社会型(S)',
'企业型(E)', '传统型(C)', '现实型(R)']
radar_labels = np.concatenate((rradar_labels,[rradar_labels[0]]))
# 绘制雷达图
plt.polar(angles, data)
# 设置极坐标标签
plt.thetagrids(angles * 180/np.pi, labels=radar_labels)
# 填充多边形
plt.fill(angles, data, alpha=0.3)
plt.show()
绘制误差棒图(errorbar)
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.sans-serif"] = ["KaiTi"]
plt.rcParams["axes.unicode_minus"] = False
x = np.arange(5)
y = (25, 32, 34, 20, 25)
y_offset = (3, 5, 2, 3, 3)
plt.title("简单的误差棒图",color='y',size=20)
plt.errorbar(x,y, # 数据点的位置
yerr=y_offset,# 表示误差的范围
capsize=3, # 误差棒边界横杆的大小
capthick=2,# 误差棒边界横杆的厚度
elinewidth=2,# 误差棒的线条宽度
fmt='o-r',# fmt = '[marker][line][color]' # 格式化字符串:由标记、线条和颜色部分组成,每一个参数都是可选的
ecolor='b' # 误差棒的线条颜色
)
plt.show()