Matplotlib在一张画布上画多个图的两种方法,plt.subplot,plt.subplots。

目录

  • 回顾
  • plt.subplots()画法
  • plt.subplot()画法
  • 保存

回顾

之前也用过plt.subplots()在一张图上画过多个图,今天看到用plt.subplot()的画法想着也来实现下,同时也发现了两者之间的优缺点,感觉subplot()更便捷一点。其实两者都是别人写好的库函数,只要理解好库函数的传递参数的参数,合理的将自己传入的参数整理,两者都容易上手的。
这里我用的是jupyter notebook 画的,工具挺多的。

plt.subplots()画法

import matplotlib.pyplot as plt
import numpy as np#数据
v1 = [5, 20, 36, 10, 75, 90]
v2 = [10, 25, 8, 60, 20, 80]
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]#plt.subplots()是一个函数,返回一个包含figure和axes数组对象的元组
figure ,axes =plt.subplots(2,2,figsize=(18,12),dpi=100)
# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号ax = axes.flatten() #子图展平,将ax由n*m的Axes组展平成1*nm的Axes组(二维变一维)# 绘制直方图
# data:必选参数,绘图数据
# bins:直方图的长条形数目,可选项,默认为10
# facecolor:长条形的颜色
# edgecolor:长条形边框的颜色
data = np.random.randn(1000)# 随机生成(1000)服从正态分布的数据
axes[0][0].hist(data,bins=30,facecolor='blue',edgecolor='red')
axes[0][0].set_xlabel("区间")# 显示横轴标签
axes[0][0].set_ylabel("频数/频率")# 显示纵轴标签
axes[0][0].set_title("hist")# 绘制条形图
axes[0][1].bar(attr,v1,width=0.4, alpha=0.8, color='red', label="v1")
# axes[0][1].bar(attr,v2,width=0.3, alpha=0.8, color='green', label="v2")
axes[0][1].set_title("bar")
axes[0][1].set_xlabel("类别")# 显示横轴标签
axes[0][1].set_ylabel("销量")# 显示纵轴标签
axes[0][1].legend()# 绘制条形图
ax[2].bar(attr,v2,width=0.4, alpha=0.8, color='green', label="v1")
# axes[0][1].bar(attr,v2,width=0.3, alpha=0.8, color='green', label="v2")
ax[2].set_title("bar1")
ax[2].set_xlabel("类别")# 显示横轴标签
ax[2].set_ylabel("销量")# 显示纵轴标签
ax[2].legend()# 绘制饼图
sum =0
for data in v2:sum+=data
d =[]
for data in v2:d.append(data/sum)
explode = [0.06,0,0,0,0.05,0]
ax[3].pie(x=d,labels=attr,autopct = '%3.2f%%', colors=('b', 'g', 'r', 'c', 'm', 'y'),explode=explode)
ax[3].set_title("pie")
ax[3].axis('equal')
ax[3].legend()
# x   (每一块)的比例,如果sum(x) > 1会使用sum(x)归一化
# labels   (每一块)饼图外侧显示的说明文字
# explode (每一块)离开中心距离
# startangle   起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起
# shadow   是否阴影
# labeldistance label绘制位置,相对于半径的比例, 如<1则绘制在饼图内侧
# autopct 控制饼图内百分比设置,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
# pctdistance 类似于labeldistance,指定autopct的位置刻度
# radius   控制饼图半径 plt.savefig("D:\\StudyDemo\\IDEA\\PythonDemo\\MatplotlibPaint\\SaveData\\subplots.png")
plt.show()

图subplots

plt.subplot()画法

import matplotlib.pyplot as plt
import numpy as np#数据
v1 = [5, 20, 36, 10, 75, 90]
v2 = [10, 25, 8, 60, 20, 80]
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号#设置画布大小像素点
plt.figure(figsize=(14,14),dpi=100)# 绘制直方图
plt.subplot(2,2,1)
data = np.random.randn(1000)# 随机生成(1000)服从正态分布的数据
plt.hist(data,bins=40,facecolor='blue',edgecolor='red')
plt.ylabel("频率/区间")
plt.xlabel("区间")
plt.title("直方图")# 绘制条形图
plt.subplot(2,2,2)
plt.bar(attr,v1,width=0.4, alpha=0.8, color='red', label="v1")
plt.legend()
plt.ylabel("销量")
plt.xlabel("种类")
plt.title("条形图")# 绘制条形图
plt.subplot(2,2,3)
plt.bar(attr,v2,width=0.4, alpha=0.8, color='black', label="v2")
plt.legend()
plt.ylabel("销量")
plt.xlabel("种类")
plt.title("条形图")# 绘制条形图
plt.subplot(2,2,4)
sum =0
for data in v2:sum+=data
d =[]
for data in v2:d.append(data/sum)
explode = [0.06,0,0,0,0.05,0]
plt.pie(x=d,explode=explode,labels=attr,autopct = '%3.2f%%', colors=('b', 'g', 'r', 'c', 'm', 'y'))
plt.legend()
plt.title("饼图")plt.savefig("D:\\StudyDemo\\IDEA\\PythonDemo\\MatplotlibPaint\\SaveData\\subplot.png")
plt.show()

图subplot

保存

python matplotlib在一张画布上画多个图的两种方法,plt.subplot(),plt.subplots()。相关推荐

  1. python基础入门:实现(无重复字符)字符串的全排列的两种方法

    求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 目前有两种解决的方法 方法一: def str_sort(s='') ...

  2. android 画布叠加,Android实现图片叠加效果的两种方法

    本文实例讲述了Android实现图片叠加效果的两种方法.分享给大家供大家参考,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(Vi ...

  3. python3+matplotlib绘制双轴折线图(两种方法)

    Background 这里提供两种方法,一种是基于pandas,另一种是基于twinx. 1.先看最终效果图 pandas twinx 2.源码 import pandas as pd import ...

  4. python统计中文字符的个数_python统计中文字符数量的两种方法

    方法一: def str_count(str): '''找出字符串中的中英文.空格.数字.标点符号个数''' count_en = count_dg = count_sp = count_zh = c ...

  5. jpg格式电脑怎么弄_电脑上怎么压缩JPG图片?两种方法帮你轻松解决

    我们在工作中经常会使用到各种图片,尤其做PPT时,需要大量的图片素材.为了方便保存与传输图片,首先我们要进行图片压缩,但在压缩时很容易导致图片质量受损.今天小编向大家分享两种图片压缩的方法,帮助大家在 ...

  6. php lotus notes,Linux_Ubuntu Linux Wine上使用Lotus Notes 7,两种方法:   A、如果data - phpStudy...

    Ubuntu Linux Wine上使用Lotus Notes 7 两种方法: A.如果data目录装在d盘,wine下虚拟d盘到Windows的D盘 B.不用动原来的notes.ini,而是另外维护 ...

  7. Matlab画三维图的两种方法

    2010-11-07  21:20:30 zz: http://hi.baidu.com/mynana/blog/item/3c79c1ce6b65cb0393457e7a.html 这几天看到Ras ...

  8. 百钱买百鸡python编程列表推导式_使用循环和列表推导式两种方法求解百钱买百鸡问题。假设大鸡5元一只,中鸡3元一只,小鸡1元三只,现有100元钱想买100只鸡,有多少种买法?...

    [程序题]编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数 1/1+1/3+...+1/n [单选题]患者男,67岁.确诊为原发性支气管肺癌,为行手术 ...

  9. python画平行坐标图_Python实现平行坐标图的两种方法小结

    怎么用python实现一个坐标图的平移和缩放最容易想到的应该是DP算法,即取初始轨迹的起点A和终点B连线,计算每个点到这条线的距离,距离最大的点C若小于要分享误差则结束: 否则将C点加入压缩后的数据集 ...

最新文章

  1. 是时候装逼了,试试 IDEA 解决 Maven 依赖冲突的高能神器!
  2. 转 ofbiz的webservice接口提供(2)-数据类型的局限性
  3. jQuery中的队列是什么?
  4. Java多线程之CountDownLatch用法
  5. 前端项目里常见的十种报错及其解决办法
  6. FileFilter接口 java
  7. 【Kafka】kafka Failed to acquire lock on file .lock in /data/kafak-logs a kafka instance
  8. Spring中IoC创建对象方式(构造器注入)
  9. mongoDB学习——第一天
  10. 如何在SQL Server中实现错误处理
  11. 开课吧课程:什么是TreeSet类
  12. RNN(3) ------ “blog:RNN学习之路”
  13. X11/XWINDOW GUI窗口应用在任务栏上没有显示的解决办法
  14. html表格的基础知识及源代码-尚硅谷
  15. 鼠标不能动怎么选择计算机,鼠标动不了怎么办 电脑鼠标不动了按什么键
  16. 理财——优质生活的第一步
  17. FigDraw 22. SCI文章中绘图之核密度及山峦图 (ggridges)
  18. Linux系统下如何在防火墙开放指定端口
  19. 精灵图(雪碧图)的好处
  20. 计算机启动盘安装教程,笔记本系统重装教程,笔记本电脑u盘启动盘装系统教程...

热门文章

  1. 计算机毕业设计Java婚纱摄影网设计(源码+系统+mysql数据库+lw文档)
  2. iPad 上最强 IDE,支持 20 多种开发语言,还开源了
  3. 注意!买无线路由器需要看的参数
  4. Python 华为机考真题【用户调度问题】分值【Q2-200】
  5. 6263:布尔表达式
  6. centos 浏览器中文乱码解决办法
  7. Cent OS 7 虚拟机安装
  8. 4点小诀窍,帮助你设计企业在线学习课程,让学员轻松记忆
  9. 解析java中的继承
  10. 个人微信号二次开发的实现,api接口