题目要求:
要求
1.一个画布上,有四个子图,画布大小设置为 6,6
2.左上子图,折线图,y=x*x
3.右上子图,散点图,x轴范围(0-10)之间整数,y轴为(0-1)之间正太分布数据
4.左下子图,饼图,数值见图下,分别标记各个块为 ABCD,同时,突出表示B代表的块
5.右下子图,条形图,ABCDE五个类别的数值分别是15,20,25,30,35
用三种不同的方法做出下图
方法一 plt.subplots()
from matplotlib import pyplot as plt
import numpy as np
fig,ax=plt.subplots(2,2,figsize=(6,6))
x=np.linspace(0,100,1000)
ax[0,0].plot(x,x*x)
ax[0,1].scatter(range(10),np.random.rand(10))
ax[1,0].pie([15,30,45,10],labels=['A','B','C','D'],autopct='%.0f',explode=[0,0.05,0,0])
ax[1,1].bar([10,15,20,25,30],[15,20,25,30,35],tick_label=['A','B','C','D','E'])
plt.show()
这种方法,显示定义画布,以及子图个数,使用ax在对应的位置上作图即可。这时候,多个子图是一个整体,一个画布被分成了多份,如果有一个子图没有用到,则会有一个空的图框。以上面代码为例,假设注释掉第四个子图的代码,则得到的图如下:
方法二 plt.subplot()
from matplotlib import pyplot as plt
import numpy as np
plt.figure(figsize=(6,6))
plt.subplot(2,2,1)
x=np.linspace(0,100,1000)
plt.plot(x,x*x)
plt.subplot(2,2,2)
plt.scatter(range(10),np.random.rand(10))
plt.subplot(2,2,3)
plt.pie([15,30,45,10],labels=['A','B','C','D'],autopct='%.0f',explode=[0,0.05,0,0])
plt.subplot(2,2,4)
plt.bar([10,15,20,25,30],[15,20,25,30,35],tick_label=['A','B','C','D','E'])
plt.show()
这种方法相比第一种,更加自由一些,各个子图并没有捆绑,如果注释掉第四个子图的代码,得到的图像如下:
方法三 plt.add_subplot()
from matplotlib import pyplot as plt
import numpy as np
fig=plt.figure(figsize=(6,6))
fig.add_subplot(2,2,1)
x=np.arange(1,100)
y=x*x
plt.plot(x,y)
fig.add_subplot(2,2,2)
plt.scatter(np.arange(10),np.random.rand(10))
fig.add_subplot(2,2,3)
plt.pie(x=[15,30,45,10],labels=['A','B','C','D'],autopct='%.0f',explode=[0,0.05,0,0])
fig.add_subplot(2,2,4)
plt.bar([10,15,20,25,30],[15,20,25,30,35],tick_label=['A','B','C','D','E'])
add_subplot() 与直接使用subplot()比较相似,但需要注意的是,使用subplot()是plt直接调用,也就是plt.subplot(),但add_subplot() 是先显示定义画布对象fig,然后fig调用add_subplot()