可视化(import matplotlib.pyplot as plt)
绘图和可视化
- 数据探索过程的一部分,找出异常值,必要的数据转换,得出建模的想法
- pip install matplotlib / conda install matplotlib
一、 polt函数
- plot函数及其参数
-
传入格式化字符串用于规定颜色、标记和线型
类型 可选值示例 说明 颜色 'r'
(红),'g'
(绿),'b'
(蓝)支持单字母或十六进制值。 标记 'o'
(圆形),'s'
(方形),'^'
(三角形)数据点的显示样式。 线型 '-'
,'--'
,':'
实线、虚线、点线等。 -
该函数的其他参数
参数 说明 color
/ c颜色( 'red'
,'#FF0000'
)。linestyle
/ ls线型( '-'
,'--'
,':'
,'None'
)。linewidth
/ lw线宽(默认 1.5)。 marker
标记样式( 'o'
,'*'
,'x'
)。markersize
/ms
标记大小(默认 6)。 label
图例标签(需配合 plt.legend()
使用)。alpha
透明度(0-1)。 markerfacecolor
/mfc
给标记填充颜色 markeredgecolor
/mec
给标记填充边缘色
- 基础的折线图
years = [2006 + x for x in range(16)]
weights = np.random.randint(65, 80, 16)
plt.plot(years, weights, c="purple", lw=3, linestyle='--',marker = "s",markerfacecolor = "blue",markeredgecolor="black")
plt.show()
二、 scatter函数
- 函数的参数
参数 | 含义 |
---|---|
s | 点的大小(标量或数组) |
c=None | 点的颜色(颜色字符串、RGB数组或数值映射) |
marker=None | 点的形状 '.' : 小圆点 'o' : 大圆点 'v' : 倒三角形 '^' : 正三角形 '<' : 左三角形 '>' : 右三角形 's' : 正方形 'p' : 五边形 '*' : 星形 '+' : 加号 'x' : 叉号 'D' : 菱形 |
alpha=None | 透明度(0-1) |
linewidths=None | 点边缘线宽 |
edgecolors=None | 点边缘颜色 |
cmap=None | 颜色映射(当c为数值时使用) |
norm=None | 归一化对象(配合cmap使用) |
vmin=None, vmax=None | 颜色映射范围 |
- 函数的基础使用
X_data = np.random.standard_normal(10000) * 100
Y_data = np.random.standard_normal(10000) * 100
plt.scatter(X_data, Y_data, c="r", marker="*", s=150, alpha=0.1, linewidths=0.5, edgecolors="g" )
三、 bar函数
- 函数的参数
参数 | 含义 |
---|---|
x | 条形图的 x 轴坐标(类别标签的位置)。 |
y | y 轴坐标(类别)。 |
height | 条形的高度(y 轴的值)。 |
width | 条形的宽度(默认 0.8)。 |
bottom | 条形的起始高度(用于堆叠条形图,默认 None)。 |
align | 对齐方式: |
‘center’ | (默认,条形居中于 x 坐标) |
‘edge’ | (条形左边缘对齐 x 坐标)。 |
color | 条形的颜色(支持字符串、RGB、列表)。 |
edgecolor | 条形边框颜色(默认 None)。 |
linewidth | 条形边框宽度(默认 0,无边框)。 |
tick_label | 自定义 x 轴刻度标签(替代 x 的默认数值标签)。 |
label | 图例标签(配合 plt.legend() 使用)。 |
- 函数的基础使用
x = ["C++", "C#", "Python", "Java", "Go"]
y = [20, 50, 140, 1, 45]
plt.bar(x,y) # 柱状图
plt.bar(x, y, color="r", align="edge", width=0.5, edgecolor="green", lw=2)
四、 hist 函数
- 函数的参数
参数 | 含义 |
---|---|
x, | # 输入数据(一维数组或列表) |
bins=None, | 区间划分方式,显示多少个方块( int :指定区间数量(如 bins=10); list :自定义区间边界(如 bins=[0, 10, 20, 30]); str :自动计算方式(如 bins=‘auto’)) |
range=None, | # 数据范围 |
density=False, | # 是否归一化为频率 |
weights=None, | # 权重 |
cumulative=False, | # 是否累积统计 |
bottom=None, | # 柱状图底部基线 |
histtype=‘bar’, | # 直方图类型( bar (默认);barstacked (堆叠); step (无填充); stepfilled (有填充)) |
align=‘mid’, | # 柱状图对齐方式(left (左对齐);mid (居中,默认);right (右对齐) |
orientation=‘vertical’, | # 水平或垂直(vertical (垂直,默认);horizontal (水平)) |
rwidth=None, | # 柱状图相对宽度 |
log=False, | # 是否对数刻度 |
color=None, | # 颜色 |
label=None, | # 图例标签 |
stacked=False, | # 是否堆叠 |
**kwargs | # 其他绘图参数 |
- 函数的基础使用
x = ["C++", "C#", "Python", "Java", "Go"]
y = [20, 50, 140, 1, 45]
plt.hist(ages, bins=20, cumulative=True)
plt.show()
五、 pie函数
- 函数的参数
参数 | 含义 |
---|---|
x | 数据(数组或列表),表示每个扇区的数值大小 |
labels (可选) | 每个扇区的标签(列表或数组) |
colors (可选) | 每个扇区的颜色(列表或数组,支持颜色名称或十六进制值) |
autopct (可选) | 显示百分比格式,如 ‘%.1f%%’ 表示保留 1 位小数 |
startangle (可选) | 起始角度(默认 0°,即从正东方向开始,逆时针旋转) |
explode (可选) | 突出显示某些扇区(数组,非零值表示偏移距离) |
shadow (可选) | 是否显示阴影(True/False) |
pctdistance (可选) | 百分比标签距离圆心的比例(默认 0.6) |
labeldistance (可选) | 标签距离圆心的比例(默认 1.1) |
rotatelabels (可选) | False , 旋转标签 |
normalize (可选) | True, 是否自动归一化(总和=1) |
radius (可选) | 饼图的半径(默认 1) |
wedgeprops (可选) | 扇区属性(字典,如 {‘linewidth’: 2, ‘edgecolor’: ‘white’}) |
textprops (可选) | 文本属性(字典,如 {‘fontsize’: 12, ‘color’: ‘black’}) |
center (可选) | 饼图中心坐标(默认 (0, 0)) |
frame (可选) | 是否显示坐标轴框架(True/False,默认 False) |
- 基础使用
langs = ["Python", "C++", "Java", "C#", "Go"]
votes = [50, 24, 14, 6, 17]
plt.pie(votes, labels=langs, autopct="%.1f%%", explode=[0.2, 0.1, 0, 0, 0], startangle=90) # autopct自动百分比,explode 表示分离,startangle表示角度的调整
plt.show()
六、 boxplot函数
- 函数的参数
参数 | 含义 |
---|---|
x, | # 输入数据(数组或列表) |
notch=None,True | # 是否显示中位数凹口 |
patch_artist=True, | # 是否填充箱体颜色 |
widths=0.5, | # 箱体宽度 |
vert=None, | # 是否垂直显示 |
showfliers=None, | # 是否显示异常值 |
sym=‘o’, | # 异常值符号 |
flierprops=None, | # 自定义异常值属性 |
whis=None, | # 须线范围。设为 “range” 时,须线延伸至最小/最大值 whis=“range” |
boxprops=None, | # 箱体属性,例如boxprops=dict(color=‘red’, linewidth=2) |
whiskerprops=None, | # 须线属性 |
medianprops=None, | # 中位数线属性 |
capprops=None, | # 顶端横线属性 |
- 函数的基础使用
heights = np.random.normal(172, 8, 300)
plt.boxplot(heights,sym='*')
plt.show()
图和子图
- matplotlib的图像位于Figure(图像)对象中,可以用plt.figure创建一张新图
- 不能在空Figure(图像)对象上绘图,必须用add_subplot创建一个或多个 Axes 对象(子图),才能在该子图上绘制具体图表
一、使用 figure 结合 add_subplot 创建多个子图
fig = plt.figure() # 创建一个空白画布
# 2*2,4张子图,编号从1开始
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax1.hist(np.random.standard_normal(100),
bins=20, color="black", alpha=0.5)
# alpha=0.5 设置图像透明度
ax2.scatter(np.arange(30), np.arange(30) + 3*np.random.standard_normal(30))
ax3.plot(np.random.standard_normal(50).cumsum(),
color="purple", linestyle="dashed")
fig = plt.figure()
# 极坐标子图
ax_polar = fig.add_subplot(121, projection='polar')
ax_polar.plot([0, np.pi/2, np.pi], [1, 2, 1])
# 3D子图
ax_3d = fig.add_subplot(122, projection='3d')
ax_3d.scatter([1, 2, 3], [1, 2, 3], [1, 3, 2])
plt.show()
二、采用plt.subplots函数创建多个子图
fig, axes = plt.subplots(2,2)
# 位置为(0,0)的地方的子图
x = np.linspace(0.1, 20, 100) # 0.1到20分成100等分
axes[0,0].plot(x, np.sin(x)) # 对第一个子图对象画图
axes[0,0].set_title("sin func") # 每个子图可以自定义信息
# 第二个子图
axes[0,1].plot(x, np.cos(x))
axes[0,1].set_title("cos func")
# 第三个子图
axes[1,0].plot(x, np.random.random(100))
axes[1,0].set_title("random func")
# 第四个子图
axes[1,1].plot(x, np.log(x))
# axes[1,1].set_title("log func")
# 画sigmoid函数 : f(x) = 1/(1+e**(-x)); 图像命名为sigmoid func
axes[1,1].plot(x,1/(1+np.e**(-x)))
axes[1,1].set_title("sigmoid func")
fig.suptitle("Four plots") # 整个图的大标题
plt.tight_layout() # 解决标题的堆叠
plt.show()
保存画出的图片(savefig() )
- plt.savefig(“examples/images”, format=fig_extension文件扩展名, dpi=resolution分辨率)
保存图片的时候的错误做法:
plt.boxplot(data)
plt.show() # 显示图形(会阻塞代码,关闭窗口后继续执行)
plt.savefig('boxplot.png') # 可能因图形已关闭而保存空白
# 正确做法:直接保存,或显式关闭
plt.boxplot(data)
plt.savefig("images/testplt.png", format="png", dpi=100)
plt.close() # 关闭当前图形