Python绘图笔记——4.其他
补充几个不常用的图像绘制的示例代码。
直方图
函数原型为 1
2def ax.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs):
...
其中的主要选项包括:
x
,要统计的数据,array or sequence of arraysbins
,决定数据 x 如何被分割- 如果 bins 是整数 n,则数据 x 分割为 n 个等宽部分
- 如果 bins 是一个序列,则定义 bin 的边缘,包括第一个 bin 的左边缘和最后一个 bin 的右边缘,这样 bin 可能不等距
- 如果 bins 是字符串,则支持分割策略,'auto', 'fd', 'doane', 'scott', 'stone', 'rice', 'sturges', or 'sqrt'
density
,是否绘制概率密度,bool,default: Falseweights
,与 x 形状相同的权重数组,array or sequence of arrays,default: Nonecumulative
,是否累计,bool,default: Falsebottom
,每个条形的基底部高度,必须与 bin 相匹配,default: Nonehisttype
,直方图的类型,{'bar', 'barstacked', 'step', 'stepfilled'},default: 'bar'align
,对齐方式,{'left', 'mid', 'right'}, default: 'mid'orientation
,直方图的方向,{'vertical', 'horizontal'}, default: 'vertical'rwidthfloat
,条的相对宽度,float,default: None
例如 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24np.random.seed(0)
x = 4 + np.random.normal(0, 1, 2000)
fig, axes = plt.subplots(2, 2, figsize=(9, 6))
axes[0, 0].hist(x, bins=8, linewidth=0.5, edgecolor="white")
axes[0, 0].set_title("bins=8")
axes[0, 1].hist(x, bins=np.arange(0, 8, 0.5), linewidth=0.5, edgecolor="white")
axes[0, 1].set_title("bins=np.arange(0,8,0.5)")
axes[1, 0].hist(
x, bins=np.arange(0, 8, 0.5), linewidth=0.5, edgecolor="white", density=True
)
axes[1, 0].set_title("density=True")
axes[1, 1].hist(
x, bins=np.arange(0, 8, 0.5), linewidth=0.5, edgecolor="white", cumulative=True
)
axes[1, 1].set_title("cumulative=True")
for i in np.arange(2):
for j in np.arange(2):
axes[i, j].set(xlim=[0, 8])
饼图
直接用例子吧,很少用饼图: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50fig, axes = plt.subplots(2, 2, figsize=(8, 8))
labels = ["大型", "中型", "小型", "微型"] # 定义标签
sizes = [46, 253, 321, 66] # 每块值
axes[0, 0].pie(
sizes, # 数据
explode=(0, 0, 0, 0), # 将某一块分割出来,值越大分割出的间隙越大
labels=labels, # 标签
colors=["red", "yellowgreen", "lightskyblue", "yellow"], # 每块颜色定义
autopct="%3.2f%%", # 数值保留固定小数位
shadow=False, # 无阴影设置
startangle=90, # 逆时针起始角度设置
pctdistance=0.6, # 数值距圆心半径倍数距离
)
axes[0, 0].legend()
axes[0, 1].pie(
sizes, # 数据
explode=(0.1, 0.05, 0.05, 0.05), # 将某一块分割出来,值越大分割出的间隙越大
labels=labels, # 标签
colors=["red", "yellowgreen", "lightskyblue", "yellow"], # 每块颜色定义
autopct="%3.2f%%", # 数值保留固定小数位
shadow=False, # 无阴影设置
startangle=90, # 逆时针起始角度设置
pctdistance=0.6, # 数值距圆心半径倍数距离
)
axes[1, 0].pie(
sizes, # 数据
explode=(0.1, 0.05, 0.05, 0.05), # 将某一块分割出来,值越大分割出的间隙越大
labels=labels, # 标签
colors=["red", "yellowgreen", "lightskyblue", "yellow"], # 每块颜色定义
autopct="%3.2f%%", # 数值保留固定小数位
shadow=True, # 无阴影设置
startangle=90, # 逆时针起始角度设置
pctdistance=0.6, # 数值距圆心半径倍数距离
)
axes[1, 1].pie(
sizes, # 数据
explode=(0.1, 0.05, 0.05, 0.05), # 将某一块分割出来,值越大分割出的间隙越大
labels=labels, # 标签
colors=["red", "yellowgreen", "lightskyblue", "yellow"], # 每块颜色定义
autopct="%3.2f%%", # 数值保留固定小数位
shadow=True, # 无阴影设置
startangle=90, # 逆时针起始角度设置
pctdistance=0.7, # 数值距圆心半径倍数距离
)
等值线图
最简单的例子如下: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# 生成(X,Y)网格数据
xlist = np.linspace(-3.0, 3.0, 100)
ylist = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(xlist, ylist)
# 生成Z
Z = np.sqrt(X**2 + 2*Y**2)
# 绘制等值线图,添加colorbar
fig,ax=plt.subplots()
cp = ax.contourf(X, Y, Z)
fig.colorbar(cp)
# 补充细节
ax.set_title('Filled Contours Plot')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
包括如下几个部分:
- 生成
(X,Y,Z)
网格数据 - 绘制等值线图并添加 colorbar
- 补充细节