pythonic生物人

Matplotlib 200个小技巧-下篇

有人说之前的Matplotlib教程不够基础👉Python matplotlib保姆级教程

这里重新补充基础知识点《Matplotlib 200个小技巧-下篇》,每个技巧都配上代码和超接地气的注释,干货满满,赶紧收藏起来,边学边练,画图效率和颜值蹭蹭往上涨!


101. 设置刻度颜色

# 刻度黑乎乎多单调,换个颜色亮起来!
plt.tick_params(axis='x', colors='red')

102. 画虚线网格

# 网格线实线太硬?虚线一换,柔和又好看!
plt.grid(True, linestyle=':', color='gray')

103. 设置标题颜色

# 标题黑乎乎没亮点?换个蓝色,吸睛又高级!
plt.title("标题", color='blue')

104. 画多折线图

# 一堆数据咋展示?多折线一起上,省事又直观!
plt.plot([1, 2, 3], [4, 5, 6], label='A')
plt.plot([1, 2, 3], [3, 4, 5], label='B')
plt.legend()

105. 设置线条透明度

# 线条重叠看不清?调个透明度,层次感满满!
plt.plot([1, 2, 3], [4, 5, 6], alpha=0.7)

106. 画虚线散点

# 散点加虚线连起来,动向一目了然!
plt.plot([1, 2, 3], [4, 5, 6], '--o')

107. 设置坐标轴粗细

# 坐标轴太细不显眼?加粗一下,气场全开!
plt.gca().spines['bottom'].set_linewidth(2)

108. 画对称轴

# 数据对称咋展示?对称轴一画,完美呈现!
plt.axvline(x=2, color='gray', linestyle='--')
plt.axhline(y=5, color='gray', linestyle='--')

109. 设置子图标题

# 子图没标题多乱,加个标题,整齐又好看!
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.set_title("子图1")
ax2.set_title("子图2")

110. 画圆形区域

# 想圈个重点?圆形区域一画,焦点全在这!
from matplotlib.patches import Circle
plt.gca().add_patch(Circle((2, 5), radius=1, color='red', alpha=0.3))

111. 设置刻度标签颜色

# 刻度标签灰扑扑?换个颜色,亮眼又好看!
plt.tick_params(axis='x', labelcolor='purple')

112. 画多组散点

# 多组数据咋区分?散点颜色分开,清晰又好看!
plt.scatter([1, 2, 3], [4, 5, 6], c='blue', label='A')
plt.scatter([1, 2, 3], [3, 4, 5], c='red', label='B')
plt.legend()

113. 设置图例边框

# 图例没边框显单调?加个框,精致感立马有!
plt.plot([1, 2, 3], [4, 5, 6], label='数据')
plt.legend(edgecolor='black')

114. 画虚线区域

# 填充区域太实?虚线边框一加,高级感爆棚!
plt.fill_between([1, 2, 3], [4, 5, 6], [3, 4, 5], edgecolor='black', linestyle='--', facecolor='none')

115. 设置子图大小

# 子图大小不合适?调一下,布局更和谐!
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))

116. 画曲线平滑

# 折线太生硬?平滑曲线一上,柔和又好看!
from scipy.interpolate import make_interp_spline
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
x_smooth = np.linspace(x.min(), x.max(), 300)
y_smooth = make_interp_spline(x, y)(x_smooth)
plt.plot(x_smooth, y_smooth)

117. 设置标题字体

# 标题字体太普通?换个粗体,气场不一样!
plt.title("标题", fontweight='bold')

118. 画多组箱线图

# 多组数据咋对比?箱线图并排,分布全看清!
plt.boxplot([[1, 2, 3], [4, 5, 6], [7, 8, 9]], labels=['A', 'B', 'C'])

119. 设置箱线宽度

# 箱线太宽显笨重?调个宽度,精致又好看!
plt.boxplot([1, 2, 3, 4, 5], widths=0.5)

120. 画极坐标柱状图

# 柱状图也能玩极坐标?圆形布局,创意满满!
theta = np.linspace(0, 2*np.pi, 6, endpoint=False)
plt.bar(theta, [1, 2, 3, 4, 5, 6], width=0.8, bottom=0, polar=True)

121. 设置色条范围

# 色条范围乱七八糟?自己定个范围,清爽多了!
plt.imshow([[1, 2], [3, 4]])
plt.colorbar()
plt.clim(0, 5)

122. 画多组饼图

# 多组占比咋展示?子图饼图安排上,清晰又好看!
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.pie([30, 70], labels=['A', 'B'])
ax2.pie([40, 60], labels=['C', 'D'])

123. 设置饼图颜色

# 饼图颜色太随机?自己挑几个,颜值蹭蹭涨!
plt.pie([30, 40, 30], labels=['A', 'B', 'C'], colors=['red', 'blue', 'green'])

124. 画环形图

# 饼图太实心?掏个洞变环形,高级感立马有!
plt.pie([30, 40, 30], labels=['A', 'B', 'C'], wedgeprops=dict(width=0.3))

125. 设置热力图颜色

# 热力图颜色不好看?换个 viridis,清新又高级!
plt.imshow([[1, 2], [3, 4]], cmap='viridis')

126. 画3D散点图

# 3D折线不够炫?散点一上,立体感爆棚!
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.scatter3D([1, 2, 3], [4, 5, 6], [7, 8, 9])

127. 设置3D视角

# 3D图角度不好看?调个视角,完美呈现!
ax = plt.axes(projection='3d')
ax.plot3D([1, 2, 3], [4, 5, 6], [7, 8, 9])
ax.view_init(30, 45)

128. 画3D曲面

# 3D还能更酷?曲面图一出,数据美炸了!
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap='coolwarm')

129. 设置3D颜色

# 3D曲面颜色单调?换个 coolwarm,层次感满满!
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap='coolwarm')

130. 画3D柱状图

# 柱状图也能3D?立体感一上,数据更吸睛!
xpos = [1, 2, 3]
ypos = [1, 1, 1]
zpos = [0, 0, 0]
dx = dy = [0.5, 0.5, 0.5]
dz = [4, 5, 6]
ax = plt.axes(projection='3d')
ax.bar3d(xpos, ypos, zpos, dx, dy, dz)

131. 设置动态图速度

# 动态图太快看不清?调个间隔,节奏刚刚好!
ani = FuncAnimation(fig, update, frames=range(10), interval=200)

132. 保存动态图

# 动态图咋分享?保存成 gif,随时秀给朋友看!
ani.save("animation.gif", writer='pillow')

133. 画时间序列

# 时间数据咋展示?折线图一画,趋势全在眼前!
import pandas as pd
dates = pd.date_range('20230101', periods=5)
plt.plot(dates, [1, 2, 3, 4, 5])

134. 设置时间格式

# 时间刻度太长看不清?调个格式,简洁又好看!
from matplotlib.dates import DateFormatter
plt.plot(dates, [1, 2, 3, 4, 5])
plt.gca().xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))

135. 画堆叠面积图

# 多组数据咋叠加?堆叠面积图一出,层次感满满!
plt.stackplot([1, 2, 3], [4, 5, 6], [1, 2, 1], labels=['A', 'B'])
plt.legend()

136. 设置面积图颜色

# 面积图颜色不好看?自己挑几个,颜值蹭蹭涨!
plt.stackplot([1, 2, 3], [4, 5, 6], [1, 2, 1], colors=['red', 'blue'])

137. 画对角填充

# 填充区域太空?加个对角线,质感立马有!
plt.fill_between([1, 2, 3], [4, 5, 6], [3, 4, 5], hatch='//')

138. 设置填充透明度

# 填充太实挡视线?调个透明度,柔和又好看!
plt.fill_between([1, 2, 3], [4, 5, 6], [3, 4, 5], alpha=0.3)

139. 画多组热力图

# 多组数据咋对比?子图热力图安排上,清晰又好看!
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.imshow([[1, 2], [3, 4]])
ax2.imshow([[5, 6], [7, 8]])

140. 设置热力图刻度

# 热力图刻度乱七八糟?调一下,整齐又好看!
plt.imshow([[1, 2], [3, 4]])
plt.xticks([0, 1], ['A', 'B'])
plt.yticks([0, 1], ['X', 'Y'])

141. 画带标签的柱状图

# 柱子高度看不清?加个标签,数据一目了然!
bars = plt.bar([1, 2, 3], [4, 5, 6])
for bar in bars:
    plt.text(bar.get_x() + bar.get_width()/2, bar.get_height(), bar.get_height(), ha='center')

142. 设置柱状图边框

# 柱子没边框显单调?加个黑边,精致感立马有!
plt.bar([1, 2, 3], [4, 5, 6], edgecolor='black')

143. 画分组柱状图

# 多组数据咋并排?分组柱状图一出,清晰又好看!
x = np.array([1, 2, 3])
plt.bar(x - 0.2, [4, 5, 6], width=0.4)
plt.bar(x + 0.2, [3, 4, 5], width=0.4)

144. 设置柱状图透明度

# 柱子太实挡视线?调个透明度,层次感满满!
plt.bar([1, 2, 3], [4, 5, 6], alpha=0.7)

145. 画带误差的柱状图

# 数据有误差咋展示?误差条一加,靠谱又好看!
plt.bar([1, 2, 3], [4, 5, 6], yerr=[0.1, 0.2, 0.3])

146. 设置误差条颜色

# 误差条灰扑扑多没劲?换个颜色,亮眼又好看!
bars = plt.bar([1, 2, 3], [4, 5, 6], yerr=[0.1, 0.2, 0.3], capsize=5)
plt.gca().errorbar([1, 2, 3], [4, 5, 6], yerr=[0.1, 0.2, 0.3], fmt='none', ecolor='red')

147. 画带标签的散点图

# 散点没名字谁认识?加个标签,清晰又好看!
for i, txt in enumerate(['A', 'B', 'C']):
    plt.scatter(i+1, i+4)
    plt.text(i+1, i+4, txt)

148. 设置散点透明度

# 散点重叠看不清?调个透明度,层次感满满!
plt.scatter([1, 2, 3], [4, 5, 6], alpha=0.5)

149. 画带误差的散点图

# 散点数据有波动?误差条一加,科学感爆棚!
plt.errorbar([1, 2, 3], [4, 5, 6], yerr=[0.1, 0.2, 0.3], fmt='o')

150. 设置误差条粗细

# 误差条太细不显眼?加粗一下,气场全开!
plt.errorbar([1, 2, 3], [4, 5, 6], yerr=[0.1, 0.2, 0.3], fmt='o', linewidth=2)

151. 画带箭头的折线

# 折线没方向感?加个箭头,动向一目了然!
plt.plot([1, 2, 3], [4, 5, 6], marker='>')

152. 设置折线粗细

# 折线太细看不清?加粗到 3,粗中有细!
plt.plot([1, 2, 3], [4, 5, 6], linewidth=3)

153. 画带标签的折线

# 折线关键点没说明?加个标签,重点全在这!
plt.plot([1, 2, 3], [4, 5, 6])
plt.text(2, 5, "最高点")

154. 设置折线颜色渐变

# 折线颜色单调?渐变一上,颜值蹭蹭涨!
points = np.array([[1, 4], [2, 5], [3, 6]])
plt.scatter(points[:, 0], points[:, 1], c=range(3), cmap='viridis')
plt.plot(points[:, 0], points[:, 1])

155. 画带阴影的折线

# 折线太空洞?加个阴影,质感立马有!
plt.plot([1, 2, 3], [4, 5, 6])
plt.fill_between([1, 2, 3], [4, 5, 6], 0, alpha=0.2)

156. 设置子图边框颜色

# 子图边框黑乎乎多单调?换个颜色,亮眼又好看!
fig, ax = plt.subplots()
for spine in ax.spines.values():
    spine.set_color('blue')

157. 画带网格的子图

# 子图没网格显单调?加个网格,专业感满满!
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.grid(True)

158. 设置子图刻度

# 子图刻度乱七八糟?调一下,整齐又好看!
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_xticks([1, 2, 3])

159. 画带标题的子图

# 子图没标题多乱,加个标题,整齐又好看!
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title("子图标题")

160. 设置子图透明度

# 子图太实挡视线?调个透明度,层次感满满!
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6], alpha=0.7)

161. 画带色条的热力图

# 热力图没色条谁懂啊?加个色条,专业感爆棚!
plt.imshow([[1, 2], [3, 4]])
plt.colorbar()

162. 设置热力图透明度

# 热力图太实挡视线?调个透明度,柔和又好看!
plt.imshow([[1, 2], [3, 4]], alpha=0.8)

163. 画带标签的热力图

# 热力图没数字看不清?加个标签,数据一目了然!
data = np.array([[1, 2], [3, 4]])
plt.imshow(data)
for i in range(2):
for j in range(2):
        plt.text(j, i, data[i, j], ha='center', va='center')

164. 设置热力图范围

# 热力图范围乱七八糟?定个范围,清爽多了!
plt.imshow([[1, 2], [3, 4]])
plt.clim(0, 5)

165. 画带边框的热力图

# 热力图没边框显单调?加个边框,精致感立马有!
plt.imshow([[1, 2], [3, 4]], edgecolors='black', linewidths=1)

166. 设置饼图标签位置

# 饼图标签挤一起?调个位置,清爽又好看!
plt.pie([30, 40, 30], labels=['A', 'B', 'C'], labeldistance=1.1)

167. 画带箭头的饼图

# 饼图标签太远看不清?加个箭头,指向超明确!
plt.pie([30, 40, 30], labels=['A', 'B', 'C'], autopct='%1.1f%%', pctdistance=0.85, wedgeprops={'arrowprops': dict(arrowstyle='->')})

168. 设置饼图透明度

# 饼图太实挡视线?调个透明度,柔和又好看!
plt.pie([30, 40, 30], labels=['A', 'B', 'C'], wedgeprops={'alpha': 0.7})

169. 画带标签的箱线图

# 箱线图没名字谁认识?加个标签,清晰又好看!
plt.boxplot([1, 2, 3, 4, 5], labels=['数据'])

170. 设置箱线透明度

# 箱线太实挡视线?调个透明度,层次感满满!
box = plt.boxplot([1, 2, 3, 4, 5])
for patch in box['boxes']:
    patch.set_alpha(0.7)

171. 画带标签的小提琴图

# 小提琴图没名字多乱,加个标签,整齐又好看!
plt.violinplot([1, 2, 3, 4, 5])
plt.xticks([1], ['数据'])

172. 设置小提琴颜色

# 小提琴灰扑扑多没劲?换个颜色,亮眼又好看!
violin = plt.violinplot([1, 2, 3, 4, 5])
for pc in violin['bodies']:
    pc.set_facecolor('purple')

173. 画带网格的3D图

# 3D图没网格显单调?加个网格,立体感满满!
ax = plt.axes(projection='3d')
ax.plot3D([1, 2, 3], [4, 5, 6], [7, 8, 9])
ax.grid(True)

174. 设置3D刻度

# 3D刻度乱七八糟?调一下,整齐又好看!
ax = plt.axes(projection='3d')
ax.plot3D([1, 2, 3], [4, 5, 6], [7, 8, 9])
ax.set_xticks([1, 2, 3])

175. 画带标签的3D图

# 3D图没说明谁懂啊?加个标签,清晰又好看!
ax = plt.axes(projection='3d')
ax.plot3D([1, 2, 3], [4, 5, 6], [7, 8, 9])
ax.set_xlabel('X轴')

176. 设置3D透明度

# 3D图太实挡视线?调个透明度,层次感满满!
ax = plt.axes(projection='3d')
ax.plot3D([1, 2, 3], [4, 5, 6], [7, 8, 9], alpha=0.7)

177. 画带色条的3D图

# 3D图没色条看不清?加个色条,专业感爆棚!
ax = plt.axes(projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap='viridis')
plt.colorbar(surf)

178. 设置动态图背景

# 动态图背景单调?换个颜色,质感立马有!
fig, ax = plt.subplots()
ax.set_facecolor('lightgray')
ani = FuncAnimation(fig, update, frames=range(10))

179. 画带标签的动态图

# 动态图没说明谁懂啊?加个标签,清晰又好看!
fig, ax = plt.subplots()
line, = ax.plot([], [])
ax.text(0.5, 0.5, "动态数据")
ani = FuncAnimation(fig, update, frames=range(10))

180. 设置动态图透明度

# 动态图太实挡视线?调个透明度,柔和又好看!
fig, ax = plt.subplots()
line, = ax.plot([], [], alpha=0.7)
ani = FuncAnimation(fig, update, frames=range(10))

181. 画带网格的时间序列

# 时间序列没网格显单调?加个网格,专业感满满!
plt.plot(dates, [1, 2, 3, 4, 5])
plt.grid(True)

182. 设置时间序列颜色

# 时间序列灰扑扑多没劲?换个颜色,亮眼又好看!
plt.plot(dates, [1, 2, 3, 4, 5], color='purple')

183. 画带标签的时间序列

# 时间序列没说明谁懂啊?加个标签,清晰又好看!
plt.plot(dates, [1, 2, 3, 4, 5])
plt.text(dates[2], 3, "关键点")

184. 设置时间序列透明度

# 时间序列太实挡视线?调个透明度,层次感满满!
plt.plot(dates, [1, 2, 3, 4, 5], alpha=0.7)

185. 画带误差的时间序列

# 时间序列有波动?误差条一加,靠谱又好看!
plt.errorbar(dates, [1, 2, 3, 4, 5], yerr=[0.1, 0.2, 0.3, 0.4, 0.5])

186. 设置堆叠面积透明度

# 堆叠面积太实挡视线?调个透明度,柔和又好看!
plt.stackplot([1, 2, 3], [4, 5, 6], [1, 2, 1], alpha=0.5)

187. 画带标签的堆叠面积

# 堆叠面积没名字多乱,加个标签,整齐又好看!
plt.stackplot([1, 2, 3], [4, 5, 6], [1, 2, 1], labels=['A', 'B'])
plt.legend()

188. 设置对角填充颜色

# 对角填充灰扑扑多没劲?换个颜色,亮眼又好看!
plt.fill_between([1, 2, 3], [4, 5, 6], [3, 4, 5], hatch='//', facecolor='red')

189. 画带网格的等高线

# 等高线没网格显单调?加个网格,立体感满满!
plt.contour(X, Y, Z)
plt.grid(True)

190. 设置等高线颜色

# 等高线灰扑扑多没劲?换个颜色,亮眼又好看!
plt.contour(X, Y, Z, colors='purple')

191. 画带标签的等高线

# 等高线没说明谁懂啊?加个标签,清晰又好看!
plt.contour(X, Y, Z)
plt.clabel(plt.contour(X, Y, Z))

192. 设置等高线透明度

# 等高线太实挡视线?调个透明度,柔和又好看!
plt.contourf(X, Y, Z, alpha=0.7)

193. 画带网格的向量场

# 向量场没网格显单调?加个网格,专业感满满!
plt.quiver(x, y, u, v)
plt.grid(True)

194. 设置向量场颜色

# 向量场灰扑扑多没劲?换个颜色,亮眼又好看!
plt.quiver(x, y, u, v, color='purple')

195. 画带标签的向量场

# 向量场没说明谁懂啊?加个标签,清晰又好看!
plt.quiver(x, y, u, v)
plt.text(2, 2, "向量方向")

196. 设置向量场透明度

# 向量场太实挡视线?调个透明度,层次感满满!
plt.quiver(x, y, u, v, alpha=0.7)

197. 画带网格的极坐标

# 极坐标没网格显单调?加个网格,立体感满满!
ax = plt.subplot(111, polar=True)
ax.plot(theta, r)
ax.grid(True)

198. 设置极坐标颜色

# 极坐标灰扑扑多没劲?换个颜色,亮眼又好看!
ax = plt.subplot(111, polar=True)
ax.plot(theta, r, color='purple')

199. 画带标签的极坐标

# 极坐标没说明谁懂啊?加个标签,清晰又好看!
ax = plt.subplot(111, polar=True)
ax.plot(theta, r)
ax.text(0, 1, "极坐标数据")

200. 设置极坐标透明度

# 极坐标太实挡视线?调个透明度,柔和又好看!
ax = plt.subplot(111, polar=True)
ax.plot(theta, r, alpha=0.7)

写在最后

Matplotlib 200个技巧到这里就结束了,也可以学习更系统的Matplotlib教程,

-END-
推荐阅读:
👉Python matplotlib保姆级教程
👉保姆级matplotlib教程—详细目录
👉Python seaborn保姆级教程
👉保姆级seaborn教程:详细目录
图片
图片
图片
图片
图片

图片

图片

图片

图片

图片

图片

加入学习(收费)

图片