pyplot画多个图,在一个图中绘制多个子图
pyplot绘制多个子图方法
matplotlib在一个图中绘制多个子图用plt.subplot()方法。
import matplotlib.pyplot as plt import numpy as np plt.rcParams[font.sans-serif]=[SimHei]#用来正常显示中文标签 plt.rcParams[axes.unicode_minus]=False#用来正常显示负号 if __name__ == __main__: # plt.figure(figsize=(19.2, 9)) # 第一个图:折线图 plt.subplot(2, 4, 1) X = range(0, 100) Y = [(x-50)**2 for x in X] plt.title("折线图") plt.plot(X, Y, c="r", label="图例一") plt.xlabel("X") plt.ylabel("Y") plt.legend() # 第二个图:柱状图 plt.subplot(2, 4, 2) X=["苹果", "雪梨", "红浪"] Y = [100,200,150] plt.title("柱状图") plt.bar(X, Y, facecolor=#9999ff, edgecolor=white) plt.ylabel("Y") # 第三个图:条形图 plt.subplot(2, 4, 3) plt.title("条形图") plt.barh(X, Y, facecolor=#9900cc, edgecolor=white) # 第五个图:饼图 plt.subplot(2, 4, 5) labels=["香蕉", "拔辣", "西柚", "柠檬茶", "王炸"] sizes=[100,150,30,75,68] explode = (0, 0.1, 0, 0, 0) plt.title("饼图") plt.pie(sizes, explode=explode, labels=labels, autopct=%.1f%%,shadow=False,startangle=150) # 第六个图:散点图 plt.subplot(2, 4, 6) X = range(0, 100) Y1 = np.random.randint(0, 20, 100) Y2 = np.random.randint(0, 20, 100) plt.title("散点图") plt.plot(X, Y1, ".", marker=".", c="#9966ff", label="Y1") plt.plot(X, Y2, ".", marker="*", c="#6699ff", label="Y2") plt.xlabel("X") plt.ylabel("Y") plt.legend(loc="upper right") # 第七个图:雷达图 plt.subplot(2, 4, 7, polar=True) plt.title("雷达图", pad=20) labels = np.array(["生命值", "灵敏度", "攻击力", "护甲", "守护光环", "威慑力", "成长"]) dataLength = 7 data1 = np.random.randint(5, 15, 7) data2 = np.random.randint(4, 15, 7) angles = np.linspace(0, 2 * np.pi, dataLength, endpoint=False) # 分割圆周长 data1 = np.concatenate((data1, [data1[0]])) # 闭合 data2 = np.concatenate((data2, [data2[0]])) # 闭合 angles = np.concatenate((angles, [angles[0]])) # 闭合 plt.polar(angles, data1, .-, linewidth=1) # 做极坐标系 plt.fill(angles, data1, alpha=0.25) # 填充 plt.polar(angles, data2, .-, linewidth=1) # 做极坐标系 plt.fill(angles, data2, alpha=0.25) # 填充 plt.thetagrids(angles * 180 / np.pi, labels) # 设置网格、标签 # 第把个图:箱线图 plt.subplot(2, 4, 8) A = np.random.randint(0, 20, 100) B = np.random.randint(5, 20, 100) plt.title("箱线图") plt.boxplot((A,B),labels=["A","B"]) plt.tight_layout(pad=1.08) plt.show()
效果
方法说明
1、plt.subplot(2, 4, 1)创建一个2行4列的图,并指定当前使用第1个子图。第三个参数可以取0~8(2*4),按行顺序获取子图,例如:plt.subplot(2, 4, 5)就是第5个,也就是第二行第一个。不需要画图的位置可以留空。
2、如果要使用极坐标系,例如上面的雷达图,那么plt.subplot需要加一个参数polar=True,不然这个图会直接覆盖其他的图。
3、为了多个子图间间隔合理,不至于出现不同子图之间文字覆盖,用plt.tight_layout()方法指定间隔。