可视化笔记3--matplotlib 常见图形绘制3

2023-11-07

可视化笔记3--matplotlib 常见图形绘制3

 

接着上一篇博文,继续简单学习了下matplotlib绘图功能,基本包括:图片保存及工具栏使用、区域填充、形状绘制、图形美化、绘制极坐标、绘制积分函数、散点和条形图综合案例,相应学习笔记分享在此处,以便于后续参考。后续若有新功能函数及案例,也会在此处加以补充!

 

1、图片保存及工具栏使用

matplotlib不仅可以手动保存图片,也可以自动通过plt.savefig方法来保存图片,代码如下所示;

matplotlib提供了一个很方便的工具栏,其可以对图片进行放缩、调整显示格式、保存等操作。

import matplotlib.pyplot as plt
import numpy as np

#图片保存
x = np.linspace(0,5*np.pi,1000)
y1 = np.sin(x)
y2 = np.sin(2*x)
plt.plot(x,y1,'r')
plt.plot(x,y2,'b')
plt.savefig('./img/C21_1.png') #保存图片
plt.show()

#工具栏使用
x = np.random.rand(1000)
y = np.random.rand(1000)
colors = np.random.rand(1000)
area = np.pi*(15*np.random.rand(1000)**2)
plt.scatter(x,y,s=area,c=colors,alpha=0.5)
plt.show()

savefig保存的图片如下:

默认生成的散点图,及其局部放大后效果:

2、区域填充

matplotlib可以通过fill和fill_between填充区域,达到不同的填充效果,代码如下:

import matplotlib.pyplot as plt
import numpy as np

#图片填充-填充曲线到x轴区间
x = np.linspace(0,5*np.pi,1000)
y1 = np.sin(x)
y2 = np.sin(2*x)
#plt.plot(x,y1,'r') #绘制曲线
#plt.plot(x,y2,'b')
plt.fill(x,y1,'r',alpha=0.3)
plt.fill(x,y2,'b',alpha=0.3) #默认蓝色会覆盖红色
plt.savefig('./Notes/img/C22_1.png') #保存图片
plt.show()

#图片填充--填充两个曲线之间部分
x = np.linspace(0,5*np.pi,1000)
y1 = np.sin(x)
y2 = np.sin(2*x)
plt.plot(x,y1,x,y2,'black') #绘制曲线
plt.fill_between(x,y1,y2,where=y1>y2,facecolor='red',alpha=0.3)
plt.fill_between(x,y1,y2,where=y1<y2,facecolor='blue',alpha=0.3)
# where=y1>y2, 通过比较y1 y2的值填充不同颜色
#interpolate=True可以自动填充空白位置
plt.savefig('./Notes/img/C22_2.png')
plt.show()

3、绘制形状

matplotlib.patches库具备多种图形函数,可以根据需要添加,此处添加了4个基础图形!

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches #需要引入该库

#reference https://matplotlib.org/api/patches_api.html

fig,ax = plt.subplots()
#1 添加圆形
xy1 = np.array([0.2,0.2]) #确定圆心
circle = mpatches.Circle(xy1,0.2) #坐标,半径
ax.add_patch(circle)

#2 添加长方形
xy2=np.array([0,0.7])
rect = mpatches.Rectangle(xy2,0.4,0.3) #左下角位置,宽高
ax.add_patch(rect)

#添加多边形
xy3=np.array([0.7,0.2])
polygon=mpatches.RegularPolygon(xy3,5,0.1)#圆心位置,边数量,顶点到圆心距离
ax.add_patch(polygon)

#添加椭圆
xy4=np.array([0.7,0.8])
ellipse = mpatches.Ellipse(xy4,0.4,0.2,color='y') #圆心,长直径,短直径
ax.add_patch(ellipse)

plt.axis('equal') #调整xy轴比例,确保图像为圆形的
plt.grid()
plt.savefig('./Notes/img/C23_1.png')
plt.show()

4、图形美化

matplotlib默认绘图样式可能看上去不太符合所有人的需求,那么可以使用 plt.style.use()函数来选择自己喜欢的绘图类型,如下代码分别选择了ggplot和bmh两种样式!

、import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

#1) 默认样式
def DrwaFigures(PicName='C24_1.png'):
    # 绘制散点
    fig,ax = plt.subplots(ncols=2,nrows=2)
    ax1,ax2,ax3,ax4=ax.ravel()
    x,y=np.random.normal(size=(2,100))
    ax1.plot(x,y,'o')

    #绘制10条不同颜色线段
    x=np.arange(0,10)
    y=np.arange(0,10)
    ncolors = len(mpl.rcParams['axes.prop_cycle']) #显示颜色种类
    shift = np.linspace(0,10,ncolors)
    for s in shift:
       ax2.plot(x,y+s,'-')

    #绘制柱状图-分别使用默认的0-1-2号颜色
    x=np.arange(5)
    y1,y2,y3=np.random.randint(1,25,size=(3,5))
    width=0.25
    #print(mpl.rcParams['axes.prop_cycle'])
    ax3.bar(x,y1,width,color = mpl.rcParams['axes.prop_cycle'].by_key()['color'][0])
    ax3.bar(x+width,y2,width,color=mpl.rcParams['axes.prop_cycle'].by_key()['color'][1])
    ax3.bar(x+2*width,y3,width,color=mpl.rcParams['axes.prop_cycle'].by_key()['color'][2])

    # 添加圆形
    #print(plt.rcParams['axes.prop_cycle'])
    for i,xcolor in enumerate(plt.rcParams['axes.prop_cycle']):
        xy=np.random.normal(size=2)
        ax4.add_patch(plt.Circle(xy,radius=0.3,color=xcolor['color']))
    ax4.axis('equal')
    plt.savefig('./Notes/img/'+PicName)
    plt.show()

def DrawFigureWithStyle():
    #)2调整样式
    print(plt.style.available)
    # 默认样式: ['bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2', 'tableau-colorblind10', '_classic_test']
    plt.style.use('ggplot')
    DrwaFigures('C24_2.png')
    plt.style.use('bmh')
    DrwaFigures('C24_3.png')

if __name__ =='__main__':
    DrwaFigures()
    DrawFigureWithStyle()

默认样式:

ggplot样式:

bmh样式: 

5、绘制极坐标图形

极坐标是一种常用的数学图形,它由极半径和极角构成,其绘制方法如下:

import matplotlib.pyplot as plt
import numpy as np

#绘制极坐标图形
r=np.arange(1,6,1)
scope = [0,np.pi/2,np.pi,3*np.pi/2,2*np.pi]
ax = plt.subplot(111,projection='polar') #定义一个坐标
ax.plot(scope,r,color='r',linewidth=2)
ax.grid(True)
plt.savefig('./Notes/img/C25_1.png')
plt.show()

#绘制一个正方形,需要你5个点按照次序相连接
r = np.empty(5) #生成大小为5的数组
r.fill(5) #填充值为5
scope = [0,np.pi/2,np.pi,3*np.pi/2,2*np.pi]
ax = plt.subplot(111,projection='polar')
ax.plot(scope,r,color='r',linewidth=2)
ax.grid(True)
plt.savefig('./Notes/img/C25_2.png')
plt.show()

#绘制8边形需要9个点连接
r = np.empty(9) #生成大小为9的数组
r.fill(9) #
print('r:',r)
scope = [0,np.pi/4,np.pi/2,3*np.pi/4,4*np.pi/4,5*np.pi/4,6*np.pi/4,7*np.pi/4,2*np.pi]
ax = plt.subplot(111,projection='polar')
ax.plot(scope,r,color='r',linewidth=2)
ax.grid(True)
plt.savefig('./Notes/img/C25_3.png')
plt.show()

6、绘制积分函数

以下通过积分函数来熟悉曲线、坐标轴、多边形、公式的绘制,代码如下:

import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
import numpy as np

#函数积分图

def func(x):
    return  -(x-2)*(x-8)+40

#1)绘制函数曲线
x = np.linspace(0,10)
y = func(x)
fig,ax=plt.subplots()
plt.plot(x,y,'r',linewidth=1.5)

# 2)绘制坐标轴信息
#坐标轴参考文献 https://matplotlib.org/api/axes_api.html
a = 2
b = 9
ax.set_xticks([a,b]) #设置x轴[a,b]范围为[2,9]
ax.set_xticklabels(['$a$','$b$']) #设置为具体字符,此处为了保值字体和公式字体一样使用$a$表示公式变量
ax.set_yticks([])
plt.figtext(0.9,0.05,'$x$') #x,y范围为[0,1],1表示远离0,0表示接近0
plt.figtext(0.1,0.88,'$y$')

#3)绘制多边形
ix = np.linspace(a,b)
iy=func(ix)
ixy=zip(ix,iy)
verts=[(a,0)]+list(ixy)+[(b,0)]
#print(verts)
poly = Polygon(verts,facecolor='0.8',edgecolor='0.5') #数字越大,颜色越浅
ax.add_patch(poly)

#4)绘制公式
x_math=a+(b-a)/20 #此处也可以直接写具体位置
y_math=30
plt.text(x_math,y_math,r'$\int_a^b (-(x-2)*(x-8)+40)dx$',fontsize=15)

plt.savefig('./Notes/img/C26_1.png')
plt.show()

7、散点、条形图综合案例

先绘制一个散点图,并分别用条形图描述其x、y轴分布的频率,其代码如下:

import matplotlib.pyplot as plt
import numpy as np

#1)设置散点和风格
plt.style.use('ggplot') #设置风格
x=np.random.randn(200)
y=x+np.random.randn(200)*0.5

#2)设置三个区域图形
margin_border=0.1 #边缘宽度
width=0.6 #大正方形宽高
margin_between=0.02 #大小矩形之间间隔
height=0.2 #小矩形高度

#定义大正方形坐标
left_s = margin_border
bottom_s = margin_border
height_s = width
width_s = width

#定义贴近y轴上的小矩形
left_y=margin_border
bottom_y=margin_border+width+margin_between
height_y= height
width_y = width

#定义贴近x轴上的小矩形
left_x = margin_border+width+margin_between
bottom_x =margin_border
height_x = width
width_x = height

plt.figure(1,figsize=(8,8))
rect1 = [left_s,bottom_s,width_s,height_s]
rect2 = [left_y,bottom_y,width_y,height_y]
rect3 = [left_x,bottom_x,width_x,height_x]
#3)去掉多余坐标
axScatter1=plt.axes(rect1)
axScatter2=plt.axes(rect2)
axScatter2.set_xticks([]) #去掉x轴重复坐标
axScatter3=plt.axes(rect3)
axScatter3.set_yticks([])#去掉y轴重复坐标
#4)绘制散点图和条形图
axScatter1.scatter(x,y)
bin_width=0.25
xymax=np.max([np.max(np.fabs(x)),np.max(np.fabs(y))]) #求出x或者y的最大值
lim = int(xymax/bin_width+1)*bin_width #+1防止四舍五入,lim为新的宽度值
axScatter1.set_xlim(-lim,lim)#设置x轴位置
axScatter1.set_ylim(-lim,lim)#设置y轴位置
#绘制条形图
bins = np.arange(-lim,lim+bin_width,bin_width)
axScatter2.hist(x,bins=bins)
axScatter2.set_xlim(axScatter1.get_xlim())
axScatter3.hist(y,bins=bins,orientation='horizontal')
axScatter3.set_ylim(axScatter1.get_ylim())

plt.savefig('./Notes/img/C28.png')
plt.show()

说明:

以上默认测试python版本为python3.6.3,matplotlib 3.0.0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可视化笔记3--matplotlib 常见图形绘制3 的相关文章

  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • django 模板 - 如何动态访问变量?

    假设我有一个具有以下上下文的 django 模板 data1 this is data1 data2 this is data2 data name data2 现在我知道了data name 假设它是 data2 是否可以用它来访问变量d
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • 如何从hdfs读取文件[重复]

    这个问题在这里已经有答案了 我在 project1目录下的hadoop文件系统中有一个文本文件名mr txt 我需要编写 python 代码来读取文本文件的第一行 而不将 mr txt 文件下载到本地 但我无法从 hdfs 打开 mr tx
  • Django 多对多关系(类别)

    我的目标是向我的 Post 模型添加类别 我希望以后能够按不同类别 有时是多个类别 查询所有帖子 模型 py class Category models Model categories 1 red 2 blue 3 black title
  • 查找与另一列 Pandas 中的唯一值关联的列中的值的交集

    如果我有一个像这样的数据框 非常小的例子 col1 col2 0 a 1 1 a 2 2 b 1 3 b 2 4 b 4 5 c 1 6 c 2 7 c 3 我想要所有的交集col2当价值观与其独特性相关时col1值 因此在这种情况下 交集
  • 正在使用 PIL 保存损坏的图像

    我遇到一个问题 操作图像像素导致保存损坏的图像 因此 我使用 PIL 打开图像 然后将其转换为 NumPy 数组 image Image open myimage png np image np asarray image 然后 我转置图像
  • 使用 subprocess.Popen() 或 subprocess.check_call() 时程序卡住

    我想从 python 运行一个程序并找到它的内存使用情况 为此 我正在使用 l a out lt in txt gt out txt p subprocess Popen l shell False stdout subprocess PI
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • 数据框中 .map(str) 和 .astype(str) 有什么区别

    我有一个数据框 其列名为 col1 和 col2 的整数类型条目 我想将 col1 和 col2 的条目以及其间的 点 连接起来 我搜索并发现添加两个列条目 df col df col1 map str df col2 map str 并添
  • 更改 Matplotlib 投影轴的背景颜色

    我正在尝试使用 Cartopy 创建一个图形 该图形需要在未投影的轴上绘制投影轴 这是一个尽可能简单的代码版本 它将轴上的内容替换为背景颜色 import matplotlib pyplot as plt import cartopy cr
  • Seaborn 中没有线性拟合的散点图

    我想知道是否有办法关闭seaborn中的线性拟合lmplot或者是否有一个等效函数可以生成散点图 当然 我也可以使用 matplotlib 但是 我发现 seaborn 中的语法和美学非常吸引人 例如 我想绘制以下情节 import sea
  • Django 2、python 3.4 无法解码 urlsafe_base64_decode(uidb64)

    我正在尝试通过电子邮件激活用户 电子邮件有效 编码有效 我使用了 django1 11 中的方法 该方法运行成功 在 Django 1 11 中 以下内容成功解码为 28 其中 uidb64 b Mjg force text urlsafe
  • 如何获取分类数据的分组条形图

    I have a big dataset with information about students And I have to build a graph of dependencies between different value
  • 无法导入QUERY_TERMS

    我正在运行一个网站Python and Django Django filters 2 1 installed Django 2 1 installed 当我运行时 我收到以下错误 importError Could not import
  • 从 wxPython 事件处理程序中调用函数

    我正在努力寻找一种在 wxPython 事件处理函数中使用函数的方法 假设我有一个按钮 单击该按钮时 它会使用事件处理程序运行一个名为 OnRun 的函数 但是 用户忘记单击 OnRun 按钮之前的 RadionButton 我想弹出一个
  • Python 读取未格式化的直接访问 Fortran 90 给出不正确的输出

    这是数据的写入方式 它是一个二维浮点矩阵 我不确定大小 open unit 51 file rmsd nn output form unformatted access direct status replace recl Npoints
  • 如何使用 enumerate 来倒数?

    letters a b c 假设这是我的清单 在哪里for i letter in enumerate letters 将会 0 a 1 b 2 c 我怎样才能让它向后枚举 如 2 a 1 b 0 c 这是一个很好的解决方案并且工作完美 i

随机推荐

  • HKPCA Show携手电巢直播开启“云”观展!掀起一场电子人的顶级狂欢!

    近日 国际电子电路 深圳 展览会 HKPCA Show 已于深圳国际会展中心圆满举办 本次展览划分七大主题专区 面积超50 000平方米 展位超2500个 汇聚众多行业知名 有影响力的参展商 引用现场观众的一句话讲 这种规模的电子展览会真是
  • 北欧--2022年Python爬虫心得

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 前言 网络爬虫也称为 蜘蛛 它可以在海量的互联网信息爬取需要的信息 简单地说它是模拟人类请求网站的行为 即自动请求网页 抓取数据 然后从中提取有价值的数据 具体步骤如下 首先
  • oracle主键约束删除,oracle删除主键查看主键约束及创建联合主键

    oracle删除主键查看主键约束及创建联合主键 1 主键的删除 ALTER TABLE TABLENAME DROP PRIMARY KEY 执行上面的SQL可以删除主键 如果不成功可以用 ALTER TABLE TABLENAME DRO
  • C/C++访问MySQL数据库

    C C 访问MySQL数据库 VS2019配置 打开mysql的安装目录 默认安装目录如下 C Program Files MySQL MySQL Server 8 0 确认 lib 目录和include 目录是否存在 打开VS2019 新
  • 如何将自己的项目jar包打包成docker 镜像

    首先将自己的项目打包成jar 并在自己本地先用java jar xxx jar启动下 看是否可以启动 随后将自己的jar包同级目录创建一个Dockerfile文件 并用notepad打开 文件无后缀 FROM kdvolder jdk8 V
  • linux下手动安装编译的通用步骤

    手动安装编译的通用步骤 在自己的下载目录中 1 在官网下载压缩包 wget xxx 2 解压文件 tar zxf xxx 3 开始编译安装 查看解压的目录下的文件 是config还是autogen之类的 来决定使用 autogen sh还是
  • 如何使用memset函数

    如何使用memset函数 memset用处 memset使用方法 memset用处 memset函数是主要用于初始化字符串的一个函数 也可以用于初始化自定义类型数组 结构体数组和其他类型数组 memset使用方法 memset函数原型如下
  • 机器学习19:反卷积算法

    机器学习19 反卷积算法 转载和整理 在整理全卷积网络的过程中 被反卷积的概念困扰很久 于是将反卷积算法单独整理为一篇博客 本文主要转载和整理自知乎问题如何通俗易懂地解释反卷积 中的高票答案 1 反卷积概述 应用在计算机视觉的深度学习领域
  • java将本地图片复制添加水印并导出到本地

    模板信息 package com example demo ChartGraphics import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JP
  • Mybatis动态公用sql

  • 文件夹自动同步工具

    这是我之前开发的文件夹自动同步工具 主要实现开发机和服务器之间的文件夹同步 项目地址 https github com mike zhang autoSync 问题描述 在windows下修改代码 到服务器上去编译 但每次都要通过winsc
  • JAR 文件揭密

    JAR 文件揭密 探索 JAR 文件格式的强大功能 转载 原文地址 http www ibm com developerworks cn java j jar 简介 大多数 Java 程序员都熟悉对 JAR 文件的基本操作 但是只有少数程序
  • 【c++ 之 多态】

    目录 前言 多态 认识多态 多态的定义与实现 构成多态的条件 虚函数 1 协变 基类与派生类虚函数返回值不同 2 析构函数的重写 c 11 两个虚函数修饰关键字 final override 重载 重写 重定义再理解 抽象类 抽象类的概念
  • 飞书“蒙冤”,还是舆论有噪声?

    飞书遭微信大范围屏蔽 添加好友 共享文档等功能遭禁 初次看到这个消息的时候并没有过于惊讶 毕竟头条系和腾讯的 摩擦 早已是公关圈老生常谈的话题 双方的较量从2017年底至今 已是3年持久战 这次的较量又有些不同 有人大肆渲染飞书在帮助中小企
  • python绘制三维图

    作者 桂 时间 2017 04 27 23 24 55 链接 http www cnblogs com xingshansi p 6777945 html 本文仅仅梳理最基本的绘图方法 一 初始化 假设已经安装了matplotlib工具包
  • Hadoop集群的9870页面,DataNode启动不了的解决办法

    原因 多次格式化hdfs namenode format的操作 配置文件错误或者说修改过master配置没有进行格式化后续操作
  • Android平台GB28181设备接入端如何实时更新经纬度实现国标平台侧电子地图位置标注

    技术背景 我们在做GB28181设备接入端的时候 其中有个功能 不难但非常重要 那就是GB28181实时位置的订阅 mobileposition subscribe 和上报 notify 特别是执法记录仪 智能安全帽 车载终端等场景下 现场
  • mysql show variables sql_mode_MySQL的三种常见sql_mode

    MySQL数据库的中有一个环境变量sql mode 定义了mysql应该支持的sql语法 数据校验等 我们可以通过以下方式查看当前数据库使用的sql mode mysql gt select sql mode sql mode STRICT
  • 投稿指南【NO.12_8】【极易投中】核心期刊投稿(组合机床与自动化加工技术)

    近期有不少同学咨询投稿期刊的问题 大部分院校的研究生都有发学术论文的要求 少部分要求高的甚至需要SCI或者多篇核心期刊论文才可以毕业 但是核心期刊要求论文质量高且审稿周期长 所以本博客梳理一些计算机特别是人工智能相关的期刊 供大家参考投稿
  • 可视化笔记3--matplotlib 常见图形绘制3

    可视化笔记3 matplotlib 常见图形绘制3 接着上一篇博文 继续简单学习了下matplotlib绘图功能 基本包括 图片保存及工具栏使用 区域填充 形状绘制 图形美化 绘制极坐标 绘制积分函数 散点和条形图综合案例 相应学习笔记分享