pyplot画多个图,在一个图中绘制多个子图

4 篇文章 0 订阅
1 篇文章 0 订阅

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()方法指定间隔。

 

 

 

author:蓝何忠

email:lanhezhong@163.com

  • 32
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值