15_多子图-Subplot、Subplot: 使用多个figures和 axes、替代解决方案:
15.多子图-Subplot
15.1.Subplot: 使用多个figures和 axes
15.2.替代解决方案:
15.多子图-Subplot
Matplotlib绘图时一个常见问题是如何在一个图中包含多个图。即如何实现在一个窗口中有多个图形,每个图形都出现在子图中。
我们将使用两种不同的方法来实现这一目标:
subplot
gridspec
15.1.Subplot: 使用多个figures和 axes
subplot及其参数:
subplot(nrows, ncols, plot_number)
如果将subplot应用于一个figure,则该figure将在概念上分为nrows * ncols个子轴。
参数plot_number标识函数调用创建的subplot。 plot_number的范围可以从1到最大nrows * ncols。
如果三个参数的值小于10,则可以使用一个int参数调用函数subplot,其中百位数表示nrows,十位数表示ncols,个位数表示plot_number。 这意味着:可以写subplot(234)来代替subplot(2, 3, 4) 。
在下面的示例中,我们实现一个2x2网格的两个子图:
import matplotlib.pyplot as plt plt.figure(figsize=(6, 4)) plt.subplot(221) # equivalent to: plt.subplot(2, 2, 1) plt.text(0.5, # x coordinate, 0 leftmost positioned, 1 rightmost0.5, # y coordinate, 0 topmost positioned, 1 bottommost'subplot(2,2,1)', # the text which will be printed (2,2,1即:2行,2列,第1个个位置)horizontalalignment='center', # shortcut 'ha'verticalalignment='center', # shortcut 'va'fontsize=20, # can be named 'font' as wellalpha=.7 # float (0.0 transparent through 1.0 opaque)) python_course_green = "#90EE90" # 224即:2行,2列,第4个位置 plt.subplot(224, facecolor=python_course_green) plt.text(0.5, 0.5,'subplot(2,2,4)',ha='center', va='center',fontsize=20,color="b")plt.show()如果不需要在轴上设置刻度,可以将它们设置为空元组,并添加以下代码行:
plt.xticks(()) import matplotlib.pyplot as plt plt.figure(figsize=(6, 4)) plt.subplot(221) # equivalent to: plt.subplot(2, 2, 1) plt.xticks(()) plt.yticks(()) plt.text(0.5, # x coordinate, 0 leftmost positioned, 1 rightmost0.5, # y coordinate, 0 topmost positioned, 1 bottommost'subplot(2,2,1)', # the text which will be printedhorizontalalignment='center', # shortcut 'ha'verticalalignment='center', # shortcut 'va'fontsize=20, # can be named 'font' as wellalpha=.7 # float (0.0 transparent through 1.0 opaque)) python_course_green = "#90EE90" plt.subplot(224, facecolor=python_course_green) plt.xticks(()) plt.yticks(()) plt.text(0.5, 0.5,'subplot(2,2,4)',ha='center', va='center',fontsize=20,color="b") plt.show()我们还可以使用Figure类的实例即使用面向对象的方法。
下面重写前面的例子来展示。 在这种情况下,将add_subplot方法应用于Figure对象。
让我们再次去除刻度。 这次不能使用plt.xticks(())和plt.yticks(())。 而必须使用set_xticks(())和set_yticks(())方法。
import matplotlib.pyplot as plt fig = plt.figure(figsize=(6, 4)) sub1 = fig.add_subplot(221) # equivalent to: plt.subplot(2, 2, 1) sub1.set_xticks([]) sub1.set_yticks([]) sub1.text(0.5, # x coordinate, 0 leftmost positioned, 1 rightmost0.5, # y coordinate, 0 topmost positioned, 1 bottommost'subplot(2,2,1)', # the text which will be printedhorizontalalignment='center', # shortcut 'ha' verticalalignment='center', # shortcut 'va'fontsize=20, # can be named 'font' as wellalpha=.5 # float (0.0 transparent through 1.0 opaque)) sub2 = fig.add_subplot(224, facecolor=python_course_green) sub2.set_xticks([]) sub2.set_yticks([]) python_course_green = "#90EE90" sub2.text(0.5, 0.5, 'subplot(2,2,4)', ha='center', va='center',fontsize=20, color="b") plt.show()
前面的示例仅显示如何创建subplot设计。 下面我们演示如何使用一些真实的图填充先前的子图设计:
另外一个例子:
import matplotlib.pyplot as plt X = [ (2,1,1), (2,3,4), (2,3,5), (2,3,6) ] for nrows, ncols, plot_number in X:plt.subplot(nrows, ncols, plot_number) plt.show()以下示例没有任何特殊之处。 我们将去除xticks并改变figure和subplots的大小。 为此,引入figure的关键字参数figsize和函数subplot_adjust及其关键字参数bottom, left,top, right:
import matplotlib.pyplot as plt fig =plt.figure(figsize=(6,4)) fig.subplots_adjust(bottom=0.025, left=0.025, top = 0.975, right=0.975) X = [ (2,1,1), (2,3,4), (2,3,5), (2,3,6) ] for nrows, ncols, plot_number in X:sub = fig.add_subplot(nrows, ncols, plot_number)sub.set_xticks([])sub.set_yticks([]) plt.show()15.2.替代解决方案:
由于需要合并2x3网格的前三个子图,因此可以选择元组表示,在(2,3,(1,3))中(1,3) 含义为一个2x3网格的前三个元素进行了合并:
import matplotlib.pyplot as plt fig =plt.figure(figsize=(6,4)) fig.subplots_adjust(bottom=0.025, left=0.025, top = 0.975, right=0.975) X = [ (2,3,(1,3)), (2,3,4), (2,3,5), (2,3,6) ] for nrows, ncols, plot_number in X:sub = fig.add_subplot(nrows, ncols, plot_number)sub.set_xticks([])sub.set_yticks([]) plt.show() 与50位技术专家面对面20年技术见证,附赠技术全景图总结
以上是生活随笔为你收集整理的15_多子图-Subplot、Subplot: 使用多个figures和 axes、替代解决方案:的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 14_面向对象API绘图、图中图 (A
- 下一篇: 16、17、18_使用gridspec定