pythonic生物人

Matplotlib 200个小技巧-上篇

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

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

1. 导入 Matplotlib 的正确姿势

# 别老写全名,plt 简洁又顺手,省下的时间喝杯咖啡多好!
import matplotlib.pyplot as plt

2. 快速画折线图

# 一行代码,折线图就出来了,比 Excel 还快,爽不爽?
plt.plot([1, 2, 3], [4, 5, 6])

3. 加个标题

# 给图加个标题多重要啊,不然老板看了还得猜半天!
plt.title("我的第一个图")

4. 设置坐标轴标签

# X轴Y轴标清楚,谁看了都夸你细心!
plt.xlabel("X轴")
plt.ylabel("Y轴")

5. 显示网格线

# 加个网格线,数据对比一目了然,专业感蹭蹭往上涨!
plt.grid(True)

6. 调整图的大小

# 图太小看不清?调成 10x6,眼睛舒服多了!
plt.figure(figsize=(10, 6))

7. 保存图片

# 高清保存下来,发给同事显摆显摆,多有面子!
plt.savefig("my_plot.png")

8. 显示图表

# 画完不显示等于白忙活,别忘了这一步啊!
plt.show()

9. 设置线条颜色

# 红色多抓眼球啊,调个颜色瞬间变高级!
plt.plot([1, 2, 3], [4, 5, 6], color='red')

10. 改线条样式

# 虚线、实线随便换,风格自己定,多酷!
plt.plot([1, 2, 3], [4, 5, 6], linestyle='--')

11. 加个图例

# 多条线挤一起不怕,加个图例,分分钟变清晰!
plt.plot([1, 2, 3], [4, 5, 6], label="数据1")
plt.plot([1, 2, 3], [6, 5, 4], label="数据2")
plt.legend()

12. 调整字体大小

# 标题太小看不清?放大到 16,老远都能瞅见!
plt.title("标题", fontsize=16)

13. 设置中文字体

# 中文乱码太头疼,换个 SimHei,妥妥解决!
plt.rcParams['font.sans-serif'] = ['SimHei']

14. 去掉顶部和右侧边框

# 边框多了显乱,砍掉顶部和右侧,简洁又大气!
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)

15. 自定义刻度

# 刻度默认太死板,自己改成“低中高”,多有意思!
plt.xticks([0, 1, 2], ["低", "中", "高"])

16. 画散点图

# 折线看腻了?试试散点图,数据分布一清二楚!
plt.scatter([1, 2, 3], [4, 5, 6])

17. 调整散点大小

# 散点太小不显眼?调大到 100,视觉效果杠杠的!
plt.scatter([1, 2, 3], [4, 5, 6], s=100)

18. 填充颜色

# 想让图高级点?填充个浅蓝色,层次感立马出来!
plt.fill_between([1, 2, 3], [4, 5, 6], [2, 3, 4], color='lightblue')

19. 画柱状图

# 柱状图简单又直观,数据对比效果绝了!
plt.bar([1, 2, 3], [4, 5, 6])

20. 柱子加颜色

# 灰扑扑的柱子多没劲,天蓝色一上,心情都变好了!
plt.bar([1, 2, 3], [4, 5, 6], color='skyblue')

21. 设置透明度

# 线条重叠看不清?加个透明度,层次分明又好看!
plt.plot([1, 2, 3], [4, 5, 6], alpha=0.5)

22. 加阴影

# 柱子加个边框,立体感蹭蹭往上涨,超有质感!
plt.bar([1, 2, 3], [4, 5, 6], color='blue', edgecolor='black', linewidth=1)

23. 调整边距

# 标签挤在一起多尴尬,一键优化布局,完美!
plt.tight_layout()

24. 用调色盘

# 调颜色太麻烦?内置调色盘一键搞定,省心又好看!
plt.plot([1, 2, 3], [4, 5, 6], color=plt.cm.Set1(0))

25. 画饼图

# 想秀占比?饼图简单几行就搞定,太方便了!
plt.pie([30, 40, 30], labels=['A', 'B', 'C'])

26. 饼图加百分比

# 光看饼图不够直观?加个百分比,谁看了都明白!
plt.pie([30, 40, 30], autopct='%1.1f%%', labels=['A', 'B', 'C'])

27. 饼图突出某块

# 重点数据得突出啊,explode 一调,焦点全在这块!
plt.pie([30, 40, 30], explode=[0, 0.1, 0], labels=['A', 'B', 'C'])

28. 设置背景色

# 默认白底太单调,换个浅灰色,气质都不一样了!
plt.gca().set_facecolor('lightgray')

29. 加文本标注

# 想提醒大家看重点?直接标个文字,简单又实用!
plt.text(1, 5, "这里是重点")

30. 画双Y轴

# 数据太多挤不下?双Y轴安排上,信息量翻倍!
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot([1, 2, 3], [4, 5, 6])
ax2.plot([1, 2, 3], [60, 50, 40], color='red')

31. 画热力图

# 数据多到眼花?热力图一出,趋势秒懂!
plt.imshow([[1, 2], [3, 4]], cmap='hot')

32. 加色条

# 热力图配个色条,专业感直接爆棚!
plt.imshow([[1, 2], [3, 4]], cmap='hot')
plt.colorbar()

33. 画3D图

# 平面图看腻了?3D图一上,惊艳全场!
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot3D([1, 2, 3], [4, 5, 6], [7, 8, 9])

34. 动态图初体验

# 想让图动起来?动画功能试试,数据也能跳舞!
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
x, y = [], []
line, = ax.plot([], [])
defupdate(frame):
    x.append(frame)
    y.append(frame)
    line.set_data(x, y)
return line,
ani = FuncAnimation(fig, update, frames=range(10))

35. 设置刻度旋转

# 标签太长挤一起?旋转45度,完美解决!
plt.xticks(rotation=45)

36. 画误差条

# 数据得严谨,误差条一加,科学感满满!
plt.errorbar([1, 2, 3], [4, 5, 6], yerr=[0.1, 0.2, 0.3])

37. 对数坐标

# 数据跨度太大看不清?对数坐标救场!
plt.yscale('log')

38. 画升序降序

# 想秀排序效果?升序降序一图搞定!
plt.plot([1, 2, 3], [4, 5, 6], 'o-', label='升序')
plt.plot([1, 2, 3], [6, 5, 4], 'o-', label='降序')
plt.legend()

39. 子图布局

# 一张图不够用?子图安排上,信息量翻倍!
plt.subplot(2, 1, 1)
plt.plot([1, 2, 3], [4, 5, 6])
plt.subplot(2, 1, 2)
plt.plot([1, 2, 3], [6, 5, 4])

40. 共享坐标轴

# 子图对齐多舒服,共享X轴,上下图美美哒!
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax1.plot([1, 2, 3], [4, 5, 6])
ax2.plot([1, 2, 3], [6, 5, 4])

41. 快速清空画布

# 画错了想重来?一键清空,省时省力!
plt.clf()

42. 批量设置线条

# 多条线一起画,谁还一条条调啊!
lines = plt.plot([1, 2, 3], [4, 5, 6], [1, 2, 3], [6, 5, 4])

43. 关闭交互模式

# 批量画图卡顿?关掉交互,速度飞起!
plt.ioff()

44. 保存透明背景

# PPT 用图背景得透明,这一招超实用!
plt.savefig("plot.png", transparent=True)

45. 检查当前轴

# 画图乱了套?随时检查当前轴,心里有数!
plt.gca()

46. 快速复制图表

# 想再画个一样的?复制粘贴,so easy!
fig1 = plt.figure()
plt.plot([1, 2, 3], [4, 5, 6])
fig2 = plt.figure()
fig1.canvas.draw()

47. 设置全局样式

# 调参太累?一键换 ggplot 风格,省心又好看!
plt.style.use('ggplot')

48. 查看可用样式

# 风格挑花眼?看看有哪些可选,总有一款适合你!
print(plt.style.available)

49. 批量加标题

# 多子图还得一个个加标题?批量搞定,效率爆棚!
fig, axs = plt.subplots(2)
for ax in axs:
    ax.set_title("标题")

50. 快速预览

# 边调边看多爽,交互模式开起来!
plt.ion()

51. 设置线条宽度

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

52. 画水平线

# 想标个基准线?水平线一拉,简单又实用!
plt.axhline(y=5, color='gray', linestyle='--')

53. 画垂直线

# 时间点要突出?垂直线一画,重点全在这!
plt.axvline(x=2, color='gray', linestyle='--')

54. 设置刻度范围

# 刻度范围乱七八糟?自己定个范围,清爽多了!
plt.xlim(0, 5)
plt.ylim(0, 10)

55. 反转坐标轴

# 数据倒挂看着别扭?反转一下,舒服了!
plt.gca().invert_yaxis()

56. 设置刻度间隔

# 刻度太密挤成一团?调个间隔,疏密有致!
plt.xticks(range(0, 10, 2))

57. 画堆叠柱状图

# 数据叠起来看多直观,堆叠柱状图安排上!
plt.bar([1, 2, 3], [2, 3, 4], label='A')
plt.bar([1, 2, 3], [1, 2, 1], bottom=[2, 3, 4], label='B')
plt.legend()

58. 画水平柱状图

# 竖着看腻了?横着画柱状图,换个角度更清爽!
plt.barh([1, 2, 3], [4, 5, 6])

59. 设置柱子宽度

# 柱子太粗显笨重?调个宽度,精致感立马有!
plt.bar([1, 2, 3], [4, 5, 6], width=0.5)

60. 画等高线图

# 数据复杂看不懂?等高线图一出,层次感满满!
import numpy as np
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)
plt.contour(X, Y, Z)

61. 填充等高线

# 等高线太空洞?填充颜色,视觉效果更饱满!
plt.contourf(X, Y, Z, cmap='viridis')

62. 设置色条标签

# 色条没说明谁懂啊?加个标签,清晰又专业!
plt.contourf(X, Y, Z)
cbar = plt.colorbar()
cbar.set_label("数值大小")

63. 画向量场

# 想秀方向感?向量场一画,数据动向全掌握!
x, y = np.meshgrid(np.arange(0, 5), np.arange(0, 5))
u = np.sin(x)
v = np.cos(y)
plt.quiver(x, y, u, v)

64. 设置散点颜色

# 散点颜色单调多无聊,随手一调,活力满满!
plt.scatter([1, 2, 3], [4, 5, 6], c='purple')

65. 用数据控制散点颜色

# 颜色还能反映数据大小?太酷了,直接上!
plt.scatter([1, 2, 3], [4, 5, 6], c=[1, 2, 3], cmap='Blues')

66. 设置散点形状

# 圆点看腻了?换个星星形状,个性爆棚!
plt.scatter([1, 2, 3], [4, 5, 6], marker='*')

67. 画箱线图

# 数据分布想一目了然?箱线图简单又实用!
plt.boxplot([1, 2, 3, 4, 5])

68. 自定义箱线颜色

# 箱线图灰扑扑多没劲,加点颜色亮起来!
box = plt.boxplot([1, 2, 3, 4, 5])
for whisker in box['whiskers']:
    whisker.set(color='blue')

69. 画小提琴图

# 箱线图不够炫?小提琴图一出,数据分布美炸了!
plt.violinplot([1, 2, 3, 4, 5])

70. 设置图例位置

# 图例挡住数据多尴尬,挪个位置多清爽!
plt.plot([1, 2, 3], [4, 5, 6], label='数据')
plt.legend(loc='upper left')

71. 设置图例标题

# 图例还得有个名头,加个标题更专业!
plt.plot([1, 2, 3], [4, 5, 6], label='数据')
plt.legend(title='图例说明')

72. 调整图例字体

# 图例字体太小看不清?调大一点,舒服多了!
plt.plot([1, 2, 3], [4, 5, 6], label='数据')
plt.legend(prop={'size': 12})

73. 设置坐标轴颜色

# 坐标轴黑乎乎多单调,换个颜色亮眼又好看!
plt.gca().spines['bottom'].set_color('blue')

74. 隐藏坐标轴

# 有时候坐标轴多余,直接藏起来,清爽又简洁!
plt.axis('off')

75. 设置刻度方向

# 刻度朝里朝外自己挑,细节控的最爱!
plt.tick_params(axis='x', direction='in')

76. 画极坐标图

# 平面图玩腻了?极坐标一上,圆形美感绝了!
r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r
plt.polar(theta, r)

77. 设置极坐标刻度

# 极坐标刻度乱糟糟?调一下,整齐又好看!
ax = plt.subplot(111, polar=True)
ax.set_xticks(np.pi/180 * np.linspace(0, 360, 8, endpoint=False))

78. 画面积图

# 数据变化想更直观?面积图一画,趋势全在眼前!
plt.stackplot([1, 2, 3], [4, 5, 6], [1, 2, 1])

79. 设置线条标记

# 线条加个小标记,数据点一目了然!
plt.plot([1, 2, 3], [4, 5, 6], marker='o')

80. 调整标记大小

# 标记太小看不清?调大一点,显眼又好看!
plt.plot([1, 2, 3], [4, 5, 6], marker='o', markersize=10)

81. 设置标题位置

# 标题默认居中不好看?挪个位置,随心所欲!
plt.title("标题", loc='left')

82. 加标题背景

# 标题加个框框,高级感立马有!
plt.title("标题", bbox=dict(facecolor='lightyellow', edgecolor='black'))

83. 设置刻度字体

# 刻度字体太小看不清?调大一点,谁看了都夸!
plt.tick_params(axis='both', labelsize=12)

84. 画步进图

# 数据跳跃感强?步进图一画,变化超直观!
plt.step([1, 2, 3], [4, 5, 6])

85. 设置步进样式

# 步进图还能调样式,细节控的最爱!
plt.step([1, 2, 3], [4, 5, 6], where='post')

86. 画误差区域

# 数据有波动?误差区域一画,靠谱又好看!
plt.fill_between([1, 2, 3], [4, 5, 6], [3, 4, 5], alpha=0.2)

87. 设置网格样式

# 网格线单调?换个虚线,风格立马不一样!
plt.grid(True, linestyle='--', alpha=0.7)

88. 画对角线

# 想加个参考线?对角线一画,简洁又实用!
plt.plot([0, 10], [0, 10], 'k--')

89. 设置坐标轴比例

# 图变形了咋办?固定比例,完美还原!
plt.axis('equal')

90. 画多边形

# 想画个自定义形状?多边形安排上,创意满满!
from matplotlib.patches import Polygon
plt.gca().add_patch(Polygon([[1, 1], [2, 3], [3, 1]], color='green', alpha=0.5))

91. 设置子图间距

# 子图挤一起多难看,调个间距,舒服多了!
plt.subplots_adjust(wspace=0.4, hspace=0.4)

92. 画圆形散点

# 散点还能画圆?大小随数据变,太酷了!
plt.scatter([1, 2, 3], [4, 5, 6], s=[100, 200, 300])

93. 设置子图背景

# 子图背景单调?换个颜色,个性爆棚!
fig, ax = plt.subplots()
ax.set_facecolor('lightblue')

94. 画箭头

# 想指个方向?箭头一画,重点全在这!
plt.arrow(1, 1, 1, 1, head_width=0.1, color='red')

95. 设置箭头样式

# 箭头还能调形状,细节控的最爱!
plt.arrow(1, 1, 1, 1, head_width=0.1, head_length=0.2, fc='blue', ec='black')

96. 画折线填充

# 折线下加个填充,数据趋势更直观!
plt.plot([1, 2, 3], [4, 5, 6])
plt.fill_between([1, 2, 3], [4, 5, 6], 0, alpha=0.3)

97. 设置色条方向

# 色条竖着不好看?横着摆,布局更灵活!
plt.imshow([[1, 2], [3, 4]])
plt.colorbar(orientation='horizontal')

98. 画饼图阴影

# 饼图太平面?加个阴影,立体感立马有!
plt.pie([30, 40, 30], labels=['A', 'B', 'C'], shadow=True)

99. 设置饼图半径

# 饼图太大占地方?调个半径,小巧又精致!
plt.pie([30, 40, 30], labels=['A', 'B', 'C'], radius=0.8)

100. 画多组柱状图

# 多组数据咋对比?并排放一起,清清楚楚!
x = np.array([1, 2, 3])
plt.bar(x - 0.2, [4, 5, 6], width=0.4, label='A')
plt.bar(x + 0.2, [3, 4, 5], width=0.4, label='B')
plt.legend()

写在最后

前100个技巧到这里就结束了,更多精彩见下一篇,也可以学习更系统的教程,

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

图片

图片

图片

图片

图片

图片

加入学习(收费)

图片