直方图
ax.hist() 方法用于绘制直方图
常用参数及其含义:
- x:要绘制直方图的数据。
- bins:指定直方图的箱子(柱子)数量或分布方式。可以是一个整数,表示箱子的数量,也可以是一个列表,指定每个箱子的边界值。
- range:指定绘制直方图的数据范围,例如 (0, 10) 表示只绘制数据范围在 0 到 10 之间的直方图。
- density:如果为 True, 表示概率,并进行归一化,使得直方图下面的面积总和为 1。False: 频次。
- cumulative:如果为 True,则绘制累积直方图。
- histtype:指定直方图的类型,如 bar(传统的直方图)、barstacked(堆叠直方图)、step(默认),等等。
- color:指定直方图的颜色。
- alpha:指定直方图的透明度。
import numpy as np
import matplotlib.pyplot as plt
mu = 100 # 平均值
sigma = 15 # 标准差
# 10000个数据
x = np.random.normal(loc = mu,scale = 15,size = 10000)
fig, ax = plt.subplots()
# bins=10 指定箱子数量为10
# density=False 统计数字在某个范围内的次数(频次)
# rwidth=0.8:指定每个箱子的宽度占总宽度的比例为 0.8,这可以用来调整箱子的宽度
n, bins, patches = ax.hist(x, bins=10, density=False,rwidth=0.8)
# n:返回直方图每个箱子中数据点的数量,是一个长度为箱子数量的数组
n # array([ 26., 204., 807., 2055., 2876., 2422., 1176., 359., 67., 8.])
# bins:返回直方图的箱子边界值,是一个长度比 n 多 1 的数组
bins
"""
array([ 48.5195012 , 59.53834689, 70.55719257, 81.57603825,
92.59488394, 103.61372962, 114.6325753 , 125.65142099,
136.67026667, 147.68911235, 158.70795804])
"""
# bins[:-1] 取出除了最后一个元素之外的所有元素,保持与直方图的箱子边界值对应
plt.bar(bins[:-1],n,width = 10)
# 添加注释
for i, v in enumerate(n):
plt.text(bins[i], v + 0.5, str(v), color='black', ha='center')
plt.xlabel('Bins')
plt.ylabel('Frequency')
plt.title('Histogram with Annotations')
箱型图
plt.boxplot() 绘制箱线图
常用参数:
- x:表示要绘制箱线图的数据,可以是单个数组或者多个数组组成的列表。
- notch:设置为 True 时,在箱体中绘制凹口以表示置信区间的中位数估计,默认为 False。
- vert:设置为 True 时,箱线图垂直绘制;设置为 False 时,箱线图水平绘制。
- patch_artist:设置为 True 时,箱线图将被绘制为填充的箱体;设置为 False 时,箱线图将被绘制为线条。
- showmeans:设置为 True 时,显示均值点;默认为 False。
- meanline:设置为 True 时,显示均值线;默认为 False。
- showfliers:设置为 False 时,禁用异常值的显示。
data=np.random.normal(size=(500,4)) # 正太分布
lables = ['A','B','C','D']
# 1: 在箱体中绘制凹口以表示置信区间的中位数(黄色线,中位数)
# 查看数据分布情况,看异常值
_ = plt.boxplot(data, 1, 'ro', labels=lables) # 红色的圆点是异常值
plt.boxplot(data, notch=True, vert=False, patch_artist=True, showmeans=True, meanline=True, showfliers=False)
散点图
plt.scatter()
常用参数:
- x:散点的 x 坐标。
- y:散点的 y 坐标。
- s:散点的大小。
- c:散点的颜色。
- marker:散点的标记形状。
- cmap:颜色映射,用于设置散点的颜色映射。
- alpha:设置散点的透明度。
- label:设置散点的标签。
- linewidths:散点边界线的宽度。
- edgecolors:散点边界线的颜色。
data = np.random.randn(100,2)
s = np.random.randint(100,300,size = 100)
color = np.random.randn(100)
plt.scatter(data[:,0], # 横坐标
data[:,1], # 纵坐标
s = s, # 尺寸
c = color, # 颜色
alpha = 0.5, # 透明度
label='Points')
# 设置图形标题和坐标轴标签
plt.title('Scatter Plot Example')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 添加图例
plt.legend()
# 显示散点图
plt.show()
饼图
plt.pie()
常用参数:
- x:用于绘制饼图的数据,可以是一个数组。
- labels:每个扇形的标签。
- colors:每个扇形的颜色。
- autopct:控制扇形上的显示百分比格式。
- startangle:起始角度,以逆时针方向测量,即 0 度位于 3 点钟方向。
- explode:用于突出显示某些扇形,以便与其它扇形区分开。
- shadow:设置为 True 时,在饼图下方绘制阴影。
- labeldistance:标签与圆心的距离。
- pctdistance:百分比标签与圆心的距离。
- radius:饼图的半径大小。
- counterclock:设置为 False 时,绘制顺时针方向的饼图。
# 解决中文字体乱码的问题
plt.rcParams['font.sans-serif']='SimHei'
labels =["五星","四星","三星","二星","一星"] # 标签
percent = [95,261,105,30,9] # 某市星级酒店数量
# 设置图片大小和分辨率
fig=plt.figure(figsize=(5,5), dpi=120)
# 偏移中心量,突出某一部分
# 0.1 表示 10%,自身高度的10%,相对值
explode = (0, 0, 0, 0.1, 0)
# 绘制饼图:autopct显示百分比,这里保留一位小数;shadow控制是否显示阴影
_ = plt.pie(x = percent, labels=labels, autopct='%0.1f%%',
explode = explode, shadow=True) # 阴影,3D效果
热力图
# 标签
vegetables = ["cucumber", "tomato", "lettuce", "asparagus","potato", "wheat", "barley"]
farmers = list('ABCDEFG')
# 查看颜色
plt.colormaps()[:10]
"""
['magma',
'inferno',
'plasma',
'viridis',
'cividis',
'twilight',
'twilight_shifted',
'turbo',
'Blues',
'BrBG']
"""
# 创造数据,随机数
harvest = np.random.randn(7,7)*5 # 农民丰收数据
plt.rcParams['font.size'] = 18
plt.rcParams['font.weight'] = 'heavy'
plt.figure(figsize=(6,6))
# imshow,显示图片
im = plt.imshow(harvest, cmap = 'PuBu')# 因为数值,各不相同
# 绘制文本
for i in range(len(vegetables)):
for j in range(len(farmers)):
text = plt.text(j, i, round(harvest[i, j],1),
ha="center", va="center", color='r')
蜘蛛图
plt.rcParams['font.family'] = 'SimHei'
labels=np.array(["个人能力","IQ","服务意识","团队精神","解决问题能力","持续学习"])
y=[83, 61, 95, 67, 76, 88]
# 画图数据准备,角度、状态值
x = np.linspace(0, 2*np.pi, len(labels), endpoint=False)
y = np.concatenate([y,[y[0]]]) # 首尾相接
x = np.concatenate([x,[x[0]]]) # 增加
x
"""
array([0. , 1.04719755, 2.0943951 , 3.14159265, 4.1887902 ,
5.23598776, 0. ])
"""
y # array([83, 61, 95, 67, 76, 88, 83])
# 用Matplotlib画蜘蛛图
fig = plt.figure(figsize=(6, 6))
# polar=True: 指定子图是一个极坐标图
ax = fig.add_subplot(111, polar=True)
# 'r*--' 指定线条的样式 'r' 为红色(red)'*' 数据点标记为星号。'--' 线条样式为虚线。
# linewidth=2 指定线条的宽度为 2。
# markersize=30 指定数据点的大小为 30。
ax.plot(x, y, 'r*--', linewidth=2, markersize = 30) # 连线
ax.fill(x, y, alpha = 0.2)
# x = 3.14 ---> 180
# 标签显示,去掉一个
_ = ax.set_thetagrids(x[:-1] * 180/np.pi,
labels,
fontsize = 18)