<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>气象科学 on 静静的安全笔记</title><link>https://ruajingjing.top/categories/%E6%B0%94%E8%B1%A1%E7%A7%91%E5%AD%A6/</link><description>Recent content in 气象科学 on 静静的安全笔记</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Mon, 17 Feb 2020 15:37:26 +0000</lastBuildDate><atom:link href="https://ruajingjing.top/categories/%E6%B0%94%E8%B1%A1%E7%A7%91%E5%AD%A6/index.xml" rel="self" type="application/rss+xml"/><item><title>气象人的JupyterLab</title><link>https://ruajingjing.top/post/%E6%B0%94%E8%B1%A1%E4%BA%BA%E7%9A%84jupyterlab/</link><pubDate>Mon, 17 Feb 2020 15:37:26 +0000</pubDate><guid>https://ruajingjing.top/post/%E6%B0%94%E8%B1%A1%E4%BA%BA%E7%9A%84jupyterlab/</guid><description>&lt;img src="https://ruajingjing.top/" alt="Featured image of post 气象人的JupyterLab" /&gt;&lt;p&gt;上两篇文章&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://blog.bugatii100peagle.cn/2020/02/13/jupyterLab%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B/" target="_blank" rel="noopener"
 &gt;Jupyterlab安装配置教程&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://blog.bugatii100peagle.cn/2020/02/16/jupyterLab%E5%A4%9A%E7%94%A8%E6%88%B7%E9%85%8D%E7%BD%AE/" target="_blank" rel="noopener"
 &gt;Jupyter多用户配置&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;中讲了Jupyter的主要部署方法，老实说，对新手很不友好，我也不想再经历一次这样的过程，尤其是Basemap的安装。所以，咱直接打包个镜像吧。不得不说Docker真是个拯救了无数程序猿秀发的好工具。&lt;/p&gt;
&lt;h2 id="使用截图"&gt;使用截图
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;img alt="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/44d5d10d73152.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/44d5d10d73152.png"&gt;&lt;/th&gt;
 &lt;th&gt;&lt;img alt="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/362d47fcfb311.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/362d47fcfb311.png"&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;img alt="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/36c7dd118359b.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/36c7dd118359b.png"&gt;&lt;/td&gt;
 &lt;td&gt;&lt;img alt="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/ec9bbcf04edf9.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/ec9bbcf04edf9.png"&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;简单来说，这就是一个部署在服务器上的Anaconda，用的的Jupyterlab的界面，您可以随时随地在任意电脑上打开一个浏览器（IE除外），输入服务器的网址，用户密码就能打开，还能下载数据，计算，绘图，整合了常用的Grads，Fortran的内核，安装了Basemap，Metpy，Siphon，Atmos，ecmwf_api，NCL_to_Python等Python常用气象工具包。&lt;/p&gt;
&lt;h2 id="quick-start"&gt;Quick Start
&lt;/h2&gt;&lt;p&gt;如果你想快速部署，而没有时间看完教程的话，看这里就好。或者看&lt;a class="link" href="https://gitee.com/bugatti100Peagle/jupyter-For-Atmospheric-Scientists" target="_blank" rel="noopener"
 &gt;Gitee上本项目的主页&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;首先安装Docker，方法见&lt;a class="link" href="https://blog.bugatii100peagle.cn/2020/02/13/Docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%80%BB%E7%BB%93/" target="_blank" rel="noopener"
 &gt;Docker常用命令总结&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;docker pull registry.cn-shanghai.aliyuncs.com/bugatii100peagle/jupytercgmsabefcn:v1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;mkdir jupyterlab
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;mkdir jupyterlab/workspace
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;docker run --name jupytercgmsabefcn -d -p 8000:8888 -v &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;:/workspace -w /workspace -e &lt;span class="nv"&gt;GRANT_SUDO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes --user root registry.cn-shanghai.aliyuncs.com/bugatii100peagle/jupytercgmsabefcn:v1 jupyter-lab --no-browser --port&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;8888&lt;/span&gt; --ip&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0 --allow-root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;预计安装时间4小时（博主使用家用WiFi，视网络环境时间可能有延长），其中安装Docker用 1~2 小时，拖取&lt;code&gt;jupytercgmsabefcn&lt;/code&gt;镜像用2小时。&lt;code&gt;run&lt;/code&gt;起来之后，浏览器打开&lt;code&gt;http://IP:8080&lt;/code&gt;，密码是空密码，直接回车即可。&lt;/p&gt;
&lt;h3 id="tips"&gt;Tips
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;不要在jupyterlab直接挂在阿里云OSS，OSS擅长存储不擅长访问。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jupyterlab/workspace&lt;/code&gt;是用于暂存的工作空间，在此文件夹下读写数据和作图都比较快速。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jupyterlab&lt;/code&gt;下另建一个新文件夹用于挂载阿里云OSS或FTP，&lt;code&gt;workspace&lt;/code&gt;下文件编写完成再归档至此OSS文件夹。既能保证数据不丢失，又能保证读写速度。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="c-和-grads-的插件"&gt;C 和 Grads 的插件
&lt;/h2&gt;&lt;p&gt;我的镜像是很久以前我就装好了的，拖取的是官方的 jupyter-science 已经预装好了&lt;code&gt;python3&lt;/code&gt; &lt;code&gt;julia&lt;/code&gt; &lt;code&gt;R&lt;/code&gt; 我后来又装了&lt;code&gt;C&lt;/code&gt; &lt;code&gt;Grads&lt;/code&gt;，至于怎么装的我忘了，不过机智的我打包了镜像。直接拖下来用就行。&lt;/p&gt;
&lt;p&gt;【 2020-02-20 14:26:59】我想起来了，好像是在&lt;a class="link" href="https://github.com/jupyter/docker-stacks" target="_blank" rel="noopener"
 &gt;Jupyter-Docker-stacks&lt;/a&gt;上找的&lt;a class="link" href="https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-datascience-notebook" target="_blank" rel="noopener"
 &gt;jupyter-datascience-notebook&lt;/a&gt;，我好像还把Scipy删掉了。&lt;/p&gt;
&lt;p&gt;&lt;img alt="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/20/1c6123f723cfb.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/20/1c6123f723cfb.png"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;docker pull registry.cn-shanghai.aliyuncs.com/bugatii100peagle/jupytercgrads
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;docker run --name jupyter -d -p 8000:8888 --restart&lt;span class="o"&gt;=&lt;/span&gt;always -v &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;/jupyterlab/workspace:/workspace -w /workspace -e &lt;span class="nv"&gt;GRANT_SUDO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes --user root 127.0.0.1:5000/jupytercgrads jupyter-lab --no-browser --port&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;8888&lt;/span&gt; --ip&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0 --allow-root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装运行参考我之前写的&lt;a class="link" href="https://blog.bugatii100peagle.cn/2020/02/13/jupyterLab%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B/" target="_blank" rel="noopener"
 &gt;jupyterLab安装配置教程&lt;/a&gt;，运行界面如下&lt;/p&gt;
&lt;p&gt;&lt;img alt="Snipaste_2020-02-17_18-28-10.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/17/2611c9f776515.png"&gt;&lt;/p&gt;
&lt;h2 id="气象绘图工具包-metpy-siphon-atmos"&gt;气象绘图工具包 &lt;a class="link" href="https://www.unidata.ucar.edu/software/metpy/#help" target="_blank" rel="noopener"
 &gt;Metpy&lt;/a&gt; &lt;a class="link" href="https://unidata.github.io/siphon/latest/installguide.html" target="_blank" rel="noopener"
 &gt;Siphon&lt;/a&gt; &lt;a class="link" href="https://pypi.org/project/atmos/0.2.5/#description" target="_blank" rel="noopener"
 &gt;atmos&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;参考&lt;a class="link" href="https://unidata.github.io/MetPy/latest/installguide.html" target="_blank" rel="noopener"
 &gt;Meetpy Installation Guide&lt;/a&gt;和&lt;a class="link" href="https://www.jianshu.com/p/c71325fc4239" target="_blank" rel="noopener"
 &gt;在Jupyter中安装Python包&lt;/a&gt;，&lt;code&gt;docker exec -it jupyter bash&lt;/code&gt;进入镜像后，输入如下代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install metpy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install siphon
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;atoms要手动安装，下载代码后再install&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;wget https://files.pythonhosted.org/packages/65/1b/9e08dbd6979877cb1d24b5b3ee607c91ece212b010b49715ca7443999e24/atmos-0.2.5.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;tar -xvf atmos-0.2.5.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; atmos-0.2.5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;nano setup.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修改片段&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;setuptools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pip..req&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;parse_requirements&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#修改片段，不然会发生报错 ModuleNotFoundError: No module named &amp;#39;pip.req&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;setuptools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pip._internal.req&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;parse_requirements&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;保存退出再执行&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python setup.py install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;a class="link" href="https://blog.csdn.net/weixin_43055882/article/details/100581001" target="_blank" rel="noopener"
 &gt;install quantopian时出现No module named pip.req的解决办法&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="地图支持包basemap"&gt;地图支持包&lt;a class="link" href="https://matplotlib.org/basemap/index.html" target="_blank" rel="noopener"
 &gt;Basemap&lt;/a&gt;
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;conda update -n base conda
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;conda update -n base conda &lt;span class="c1"&gt;# 对，更新两次，直到不会再提示更新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;更新这步都很费时间，保守估计两小时。为什么说是估计呢，因为后面我没熬住，睡着了。然后参考&lt;a class="link" href="https://blog.csdn.net/weixin_43971405/article/details/101714371" target="_blank" rel="noopener"
 &gt;解决conda的“Solving environment: failed”问题&lt;/a&gt;和&lt;a class="link" href="https://blog.csdn.net/wyhjia/article/details/82386948" target="_blank" rel="noopener"
 &gt;anaconda安装basemap&lt;/a&gt;运行如下代码。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;conda config --set channel_priority flexible
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;conda install basemap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;弹出如下信息即表示，已经找到basemap安装包，&lt;code&gt;conda install basemap&lt;/code&gt;反而安装挺快，快到让我怀疑昨晚熬夜的两小时还失败了是不是幻觉。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;The following NEW packages will be INSTALLED:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; basemap conda-forge/linux-64::basemap-1.2.1-py37hd1be537_2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; geos conda-forge/linux-64::geos-3.8.0-he1b5a44_0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt; proj4 conda-forge/linux-64::proj4-5.2.0-he1b5a44_1006
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; pyproj conda-forge/linux-64::pyproj-1.9.6-py37h516909a_1002
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt; pyshp conda-forge/noarch::pyshp-2.1.0-py_0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试运行，会遇到&lt;a class="link" href="https://blog.csdn.net/runtuandme/article/details/103899726" target="_blank" rel="noopener"
 &gt;basemap KeyError &amp;lsquo;PROJ_LIB&amp;rsquo;解决办法&lt;/a&gt;，解决办法就是代码中指定目录运行。终端输入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;whereis proj
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 输出：proj: /usr/share/proj /opt/conda/bin/proj&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;浏览器打开jupyter,新建&lt;code&gt;.ipynb&lt;/code&gt;文件，输入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;matplotlib&lt;/span&gt; &lt;span class="n"&gt;inline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;PROJ_LIB&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/usr/share/proj&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;mpl_toolkits.basemap&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Basemap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Basemap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;projection&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ortho&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lat_0&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lon_0&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bluemarble&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;a class="link" href="https://www.jianshu.com/p/fe431fa6b0a2" target="_blank" rel="noopener"
 &gt;数据科学 IPython 笔记本 8.16 地理数据和 Basemap&lt;/a&gt;无报错，并出现一个地球，即表示安装成功。
&lt;img alt="Snipaste_2020-02-18_08-10-53.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/362d47fcfb311.png"&gt;&lt;/p&gt;
&lt;p&gt;basemap还挺大，装了2G左右吧。
&lt;img alt="Snipaste_2020-02-18_08-21-46.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/bc4d088e96993.png"&gt;&lt;/p&gt;
&lt;h2 id="basemap-的继承者-cartopy"&gt;Basemap 的继承者 Cartopy
&lt;/h2&gt;&lt;p&gt;Basemap 自2020年开始停止维护，所以，新的项目还是用新工具吧。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;wget https://files.pythonhosted.org/packages/e5/92/fe8838fa8158931906dfc4f16c5c1436b3dd2daf83592645b179581403ad/Cartopy-0.17.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;tar zxvf Cartopy-0.17.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; Cartopy-0.17.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;python setup.py install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;网不好的也可以尝试从百度网盘下载&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;链接：https://pan.baidu.com/s/1EOofzd9VcFgYTbpRhDf5pg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;提取码：c60e
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试，浏览器打开jupyter输入以下代码,能出土没报错即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;import cartopy.crs as ccrs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;import matplotlib.pyplot as plt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; plt.axes&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;projection&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ccrs.PlateCarree&lt;span class="o"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;ax.coastlines&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Save the plot by calling plt.savefig() BEFORE plt.show()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# plt.savefig(&amp;#39;coastlines.pdf&amp;#39;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# plt.savefig(&amp;#39;coastlines.png&amp;#39;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;plt.show&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="https://scitools.org.uk/cartopy/docs/latest/_images/intro-1.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://scitools.org.uk/cartopy/docs/latest/_images/intro-1.png"&gt;&lt;/p&gt;
&lt;h2 id="ncar的ncl_to_python"&gt;Ncar的NCL_to_Python
&lt;/h2&gt;&lt;p&gt;参考&lt;a class="link" href="http://www.ncl.ucar.edu/open_letter_to_ncl_users.shtml" target="_blank" rel="noopener"
 &gt;Important letter regarding the future of NCL&lt;/a&gt;和&lt;a class="link" href="http://www.pyngl.ucar.edu/Download/" target="_blank" rel="noopener"
 &gt;PyNIO和PyNGL&lt;/a&gt;。但是PyNIO和PyNGL与basemap冲突，&lt;a class="link" href="http://mail-archives.apache.org/mod_mbox/climate-dev/201306.mbox/%3C20130611165725.3611.60259@reviews.apache.org%3E" target="_blank" rel="noopener"
 &gt;climate-dev mailing list archives&lt;/a&gt;，也提到对代码做了修改，反正这两货不能在一起，那就打包两个，幸好之前docker了镜像。
&lt;img alt="Snipaste_2020-02-18_09-31-00.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/70f1855f07960.png"&gt;&lt;/p&gt;
&lt;p&gt;从刚安装号&lt;code&gt;atmos&lt;/code&gt;的那个镜像开始，运行并进入镜像。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;conda config --set channel_priority flexible
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;conda install xarray netcdf4 scipy pyngl pynio ncl
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试，浏览器打开jupyterlab，上传下面这个包，解压，打开,运行其中的文件，没报错，出图即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;链接：https://pan.baidu.com/s/1lpBJTJHp466zbru9cKtoTg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;提取码：8q3y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="Snipaste_2020-02-18_10-33-24.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/ec9bbcf04edf9.png"&gt;&lt;/p&gt;
&lt;h2 id="欧洲中心数据下载ecmwf-api"&gt;欧洲中心数据下载ecmwf-api
&lt;/h2&gt;&lt;p&gt;参考&lt;a class="link" href="https://blog.csdn.net/zhanglinqi_007/article/details/79056682" target="_blank" rel="noopener"
 &gt;利用Python调用ECMWF欧洲中心API批量下载数据&lt;/a&gt;，&lt;a class="link" href="https://blog.csdn.net/ginynu/article/details/54990330" target="_blank" rel="noopener"
 &gt;python调用ECMWF欧洲中心api下载数据&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install ecmwf-api-client
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试，打开ipython，输入下方代码，没报错即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;ecmwfapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ECMWFDataServer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="fortran支持jupyter-fortran-kernel"&gt;Fortran支持&lt;a class="link" href="https://devhub.io/repos/ZedThree-jupyter-fortran-kernel" target="_blank" rel="noopener"
 &gt;jupyter-fortran-kernel&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;下载插件包上传之服务器解压安装。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;链接：https://pan.baidu.com/s/1EAkEEVtmuOyB_VtzEAMqrQ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;提取码：d4l6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;复制这段内容后打开百度网盘手机App，操作更方便哦
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;apt install gfortran
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;unzip jupyter-fortran-kernel-master.zip
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; jupyter-fortran-kernel-master
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;python setup.py install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;jupyter-kernelspec install fortran_spec/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;打开浏览器，就可以看到Fortran的选项
&lt;img alt="Snipaste_2020-02-18_11-07-39.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/44d5d10d73152.png"&gt;&lt;/p&gt;
&lt;p&gt;点击打开，输入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fortran" data-lang="fortran"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;program&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aa&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;implicit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;none&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Hello World&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="Snipaste_2020-02-18_11-07-29.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://newblogimg.oss-cn-beijing.aliyuncs.com/2020/02/18/36c7dd118359b.png"&gt;&lt;/p&gt;
&lt;h2 id="镜像包信息"&gt;镜像包信息
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://gitee.com/bugatti100Peagle/jupyter-For-Atmospheric-Scientists/blob/master/jupytercgrads_metpy_siphon_atmos_basemap_ecmwf_fortran_cartopy.md" target="_blank" rel="noopener"
 &gt;jupytercgrads_metpy_siphon_atmos_basemap_ecmwf_fortran_cartopy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://gitee.com/bugatti100Peagle/jupyter-For-Atmospheric-Scientists/blob/master/jupytercgrads_metpy_siphon_atmos_ncl_ecmwf_fortran.md" target="_blank" rel="noopener"
 &gt;jupytercgrads_metpy_siphon_atmos_ncl_ecmwf_fortran&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="失败的方法安装地图支持包basemap"&gt;失败的方法安装地图支持包&lt;a class="link" href="https://matplotlib.org/basemap/index.html" target="_blank" rel="noopener"
 &gt;BaseMap&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;首先安装依赖包&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install geos
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install pip
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;python -m pip install Pillow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;a class="link" href="https://blog.csdn.net/Yshihui/article/details/83280534" target="_blank" rel="noopener"
 &gt;basemap安装教程&lt;/a&gt;，&lt;a class="link" href="https://blog.csdn.net/yanlisuo/article/details/79820550" target="_blank" rel="noopener"
 &gt;linux python 安装basemap&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;pip install pyproj
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试，&lt;code&gt;bash&lt;/code&gt;输入以下命令没报错即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python -c &lt;span class="s1"&gt;&amp;#39;import pyproj&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;basemap的包真的好难下，我这里存了个百度网盘，需要的自行下载。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;链接：https://pan.baidu.com/s/1hMhdVfVb1n709bxnSJCECg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;提取码：a1cw
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;a class="link" href="https://blog.csdn.net/u010456562/article/details/52192586" target="_blank" rel="noopener"
 &gt;python番外（2）——Basemap安装&lt;/a&gt;
上传服务器到Docker环境，这里可以用&lt;code&gt;workspace&lt;/code&gt;目录，反正装完删掉就可以。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;tar zxvf basemap-1.1.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; basemap-1.0.7/geos-3.3.3/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;GEOS_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;./configure --prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$GEOS_DIR&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;能解压个二十分钟左右吧，慢慢等着，然后make报错。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;ISNAN&lt;span class="o"&gt;(&lt;/span&gt;x&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;y&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;z&lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; ^~~~~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;../../../include/geos/geom/Coordinate.inl:39:10: note: suggested alternative: ‘SN AN’
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;ISNAN&lt;span class="o"&gt;(&lt;/span&gt;x&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;y&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;z&lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; ^~~~~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; SNAN
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;../../../include/geos/geom/Coordinate.inl: In member &lt;span class="k"&gt;function&lt;/span&gt; ‘bool geos::geom::C oordinate::equals3D&lt;span class="o"&gt;(&lt;/span&gt;const geos::geom::Coordinate&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; const’:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;../../../include/geos/geom/Coordinate.inl:83:21: error: ‘ISNAN’ was not declared in this scope
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;z&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; other.z&lt;span class="o"&gt;)||(&lt;/span&gt;ISNAN&lt;span class="o"&gt;(&lt;/span&gt;z&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;other.z&lt;span class="o"&gt;)))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; ^~~~~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;../../../include/geos/geom/Coordinate.inl:83:21: note: suggested alternative: ‘SN AN’
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;z&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; other.z&lt;span class="o"&gt;)||(&lt;/span&gt;ISNAN&lt;span class="o"&gt;(&lt;/span&gt;z&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ISNAN&lt;span class="o"&gt;(&lt;/span&gt;other.z&lt;span class="o"&gt;)))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; ^~~~~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; SNAN
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;4&lt;span class="o"&gt;]&lt;/span&gt;: *** &lt;span class="o"&gt;[&lt;/span&gt;Makefile:373: IndexedPointInAreaLocator.lo&lt;span class="o"&gt;]&lt;/span&gt; Error &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;4&lt;span class="o"&gt;]&lt;/span&gt;: Leaving directory &lt;span class="s1"&gt;&amp;#39;/workspace/basemap-1.1.0/geos-3.3.3/src/algorithm/loc ate&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;3&lt;span class="o"&gt;]&lt;/span&gt;: *** &lt;span class="o"&gt;[&lt;/span&gt;Makefile:392: all-recursive&lt;span class="o"&gt;]&lt;/span&gt; Error &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;3&lt;span class="o"&gt;]&lt;/span&gt;: Leaving directory &lt;span class="s1"&gt;&amp;#39;/workspace/basemap-1.1.0/geos-3.3.3/src/algorithm/loc ate&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;2&lt;span class="o"&gt;]&lt;/span&gt;: *** &lt;span class="o"&gt;[&lt;/span&gt;Makefile:444: all-recursive&lt;span class="o"&gt;]&lt;/span&gt; Error &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;2&lt;span class="o"&gt;]&lt;/span&gt;: Leaving directory &lt;span class="s1"&gt;&amp;#39;/workspace/basemap-1.1.0/geos-3.3.3/src/algorithm&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;: *** &lt;span class="o"&gt;[&lt;/span&gt;Makefile:476: all-recursive&lt;span class="o"&gt;]&lt;/span&gt; Error &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;make&lt;span class="o"&gt;[&lt;/span&gt;1&lt;span class="o"&gt;]&lt;/span&gt;: Leaving directory &lt;span class="s1"&gt;&amp;#39;/workspace/basemap-1.1.0/geos-3.3.3/src&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;make: *** &lt;span class="o"&gt;[&lt;/span&gt;Makefile:368: all-recursive&lt;span class="o"&gt;]&lt;/span&gt; Error
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;解决办法参考&lt;a class="link" href="https://blog.csdn.net/pyml_kdl/article/details/103289683" target="_blank" rel="noopener"
 &gt;GEOS安装出错&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; include/geos/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;nano platform.h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修改24行&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* Has isnan */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* #undef HAVE_ISNAN */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;改为&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* Has isnan */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define HAVE_ISNAN 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后 不要&lt;code&gt;configure&lt;/code&gt; 直接 &lt;code&gt;make&lt;/code&gt; 然后 &lt;code&gt;make install&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;make 也要个40多分钟吧&lt;/p&gt;
&lt;p&gt;【 2020-02-18 0:23:56】 一个小时，反正也就只有等着。&lt;/p&gt;
&lt;p&gt;【 2020-02-18 1:08:34】 又一个小时，我好想睡觉，但是不看他装完我睡不着。&lt;/p&gt;
&lt;p&gt;【 2020-02-18 1:28:23】我好像想起来我折腾这玩意这么慢了，这是在OSS下，为了方便管理代码，我挂载了OSS盘做储存，OSS擅长存而不擅长高频访问，而编译&lt;code&gt;make&lt;/code&gt;就是个高频的活动。&lt;/p&gt;
&lt;p&gt;【 2020-02-18 1:39:44】脱离OSS目录重新&lt;code&gt;configure&lt;/code&gt; &lt;code&gt;nano platform.h&lt;/code&gt; &lt;code&gt;make&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;【2020-02-18 1:44:01 】make 完毕，make install 不到30秒完毕。2/100*60=1.2，也就是说我花了两小时等一个1分20秒就能出的东西，还傻等了两小时。&lt;/p&gt;
&lt;p&gt;但是我回到&lt;code&gt;basemap&lt;/code&gt;文件夹下&lt;code&gt;python setup.py install&lt;/code&gt; 时报错&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;In file included from src/_geoslib.c:248:0:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;/usr/local/include/geos_c.h:149:22: note: expected ‘GEOSMessageHandler &lt;span class="o"&gt;{&lt;/span&gt;aka void &lt;span class="o"&gt;(&lt;/span&gt;*&lt;span class="o"&gt;)(&lt;/span&gt;const char *&lt;span class="o"&gt;)}&lt;/span&gt;’ but argument is of &lt;span class="nb"&gt;type&lt;/span&gt; ‘void &lt;span class="o"&gt;(&lt;/span&gt;*&lt;span class="o"&gt;)(&lt;/span&gt;char *, char *&lt;span class="o"&gt;)&lt;/span&gt;’
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; extern void GEOS_DLL initGEOS&lt;span class="o"&gt;(&lt;/span&gt;GEOSMessageHandler notice_function,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;···
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;src/_geoslib.c:5619:13: error: ‘PyThreadState &lt;span class="o"&gt;{&lt;/span&gt;aka struct _ts&lt;span class="o"&gt;}&lt;/span&gt;’ has no member named ‘exc_traceback’&lt;span class="p"&gt;;&lt;/span&gt; did you mean ‘curexc_traceback’?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; tstate-&amp;gt;exc_traceback &lt;span class="o"&gt;=&lt;/span&gt; local_tb&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt; ^~~~~~~~~~~~~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt; curexc_traceback
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;error: Command &lt;span class="s2"&gt;&amp;#34;gcc -pthread -B /opt/conda/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include -I[&amp;#39;/opt/conda/lib/python3.7/site-packages/numpy/core/include&amp;#39;] -I/opt/conda/lib/python3.7/site-packages/numpy/core/include -I/opt/conda/include/python3.7m -c src/_geoslib.c -o build/temp.linux-x86_64-3.7/src/_geoslib.o -MMD -MF build/temp.linux-x86_64-3.7/src/_geoslib.o.d&amp;#34;&lt;/span&gt; failed with &lt;span class="nb"&gt;exit&lt;/span&gt; status &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考 &lt;a class="link" href="https://www.cnblogs.com/gerrydeng/p/7159021.html" target="_blank" rel="noopener"
 &gt;Python踩坑之路&lt;/a&gt;，
&lt;a class="link" href="https://github.com/mcfletch/pyopengl/issues/11" target="_blank" rel="noopener"
 &gt;Python 3.7 Build failure: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’? #11&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;pip install PyOpenGL PyOpenGL_accelerate
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;apt-get install python3-dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;apt-get install libevent-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当然都没有解决。&lt;/p&gt;</description></item><item><title>Siphon使用IGRA2为数据源画探空图</title><link>https://ruajingjing.top/post/siphon%E4%BD%BF%E7%94%A8igra2%E4%B8%BA%E6%95%B0%E6%8D%AE%E6%BA%90%E7%94%BB%E6%8E%A2%E7%A9%BA%E5%9B%BE/</link><pubDate>Sat, 12 Oct 2019 00:05:29 +0000</pubDate><guid>https://ruajingjing.top/post/siphon%E4%BD%BF%E7%94%A8igra2%E4%B8%BA%E6%95%B0%E6%8D%AE%E6%BA%90%E7%94%BB%E6%8E%A2%E7%A9%BA%E5%9B%BE/</guid><description>&lt;img src="https://ruajingjing.top/" alt="Featured image of post Siphon使用IGRA2为数据源画探空图" /&gt;&lt;p&gt;Siphon 还提供了 Integrated Global Radiosonde Archive （IGRA2）为数据源的数据管道。在修改完uwyo的代码后，顺便来看看另一个数据集的。使用的话我感觉还是怀俄明哪个比较好，它更新快，基本上国际时间00,12时一过半小时就可以访问最新的数据；而且国内访问也快（不翻墙也能使用）；绘图代码简单易懂，也便于气象工作者根据自己的需要再次修改。IGRA2的更新比较慢，反正是3月份这回的中国区基本都是提示无数据；访问也很慢，不清楚是墙的原因还是网站本身技术的原因，和Matlab启动速度有的一拼；代码比怀俄明的那个稍微复杂些，因为他提供的数据参量更多，像位温，假位温这样的都有，怀俄明的只有一个露点。需要精细化比对探空数据的可能需要IGRA2的数据，需要快速分析天气的更喜欢怀俄明。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://unidata.github.io/siphon/latest/examples/upperair/IGRA2_Request.html#sphx-glr-examples-upperair-igra2-request-py" target="_blank" rel="noopener"
 &gt;IGRA2 Upper Air Data Request&lt;/a&gt; 官网文档给出了具体用法，和怀俄明的那个模块很相似&lt;/p&gt;
&lt;h2 id="带入模块"&gt;带入模块
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;from datetime import datetime
from siphon.simplewebservice.igra2 import IGRAUpperAir
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="设置站好和时间"&gt;设置站好和时间
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;date = datetime(2014, 9, 10, 0)
station = &amp;#39;USM00070026&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="发送请求获取数据"&gt;发送请求，获取数据
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;df, header = IGRAUpperAir.request_data(date, station)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这里有两点需要注意&lt;/p&gt;
&lt;p&gt;&lt;img alt="sites" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.ncdc.noaa.gov/sites/default/files/styles/full_page_width/public/igra_stationmap.jpg?itok=j0biEjcy"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;站点编号。IGRA2目前收录了2700多个站点的数据（如上图密密麻麻的红点），为了便于管理，给各个站点都做了统一编号，这个编号的组成大约是’国家代码‘+’000‘+’原站点编号‘。这里的原站点编号就是怀俄明网站上各个站点的5位数编号，像青岛原本用ZSQD表示的就是54857，四位字母编号一般是省市级的站点才有。而IGRA2官方也提供了一份详细的&lt;a class="link" href="https://www1.ncdc.noaa.gov/pub/data/igra/igra2-station-list.txt" target="_blank" rel="noopener"
 &gt;全球站点统一编号列表&lt;/a&gt;,包含每个站点的编号，位置（经纬度），网络关联，站点名称和记录周期。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;获取格式中的header。header表示的相当于nc文件的头文件，用于描述这段数据的一些特征。而df才是爬到的数据。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;而IGRA2的数据也与怀俄明的不一样&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;dfIGRA2.keys()
---
Out[26]:
Index([&amp;#39;pressure&amp;#39;, &amp;#39;reported_height&amp;#39;, &amp;#39;calculated_height&amp;#39;, &amp;#39;temperature&amp;#39;,
 &amp;#39;temperature_gradient&amp;#39;, &amp;#39;potential_temperature&amp;#39;,
 &amp;#39;potential_temperature_gradient&amp;#39;, &amp;#39;virtual_temperature&amp;#39;,
 &amp;#39;virtual_potential_temperature&amp;#39;, &amp;#39;vapor_pressure&amp;#39;,
 &amp;#39;saturation_vapor_pressure&amp;#39;, &amp;#39;reported_relative_humidity&amp;#39;,
 &amp;#39;calculated_relative_humidity&amp;#39;, &amp;#39;u_wind&amp;#39;, &amp;#39;u_wind_gradient&amp;#39;, &amp;#39;v_wind&amp;#39;,
 &amp;#39;v_wind_gradient&amp;#39;, &amp;#39;refractive_index&amp;#39;, &amp;#39;date&amp;#39;],
 dtype=&amp;#39;object&amp;#39;)
==========================
dfuwyo.keys()
---
Out[27]:
Index([&amp;#39;pressure&amp;#39;, &amp;#39;height&amp;#39;, &amp;#39;temperature&amp;#39;, &amp;#39;dewpoint&amp;#39;, &amp;#39;direction&amp;#39;, &amp;#39;speed&amp;#39;,
 &amp;#39;u_wind&amp;#39;, &amp;#39;v_wind&amp;#39;, &amp;#39;station&amp;#39;, &amp;#39;station_number&amp;#39;, &amp;#39;time&amp;#39;, &amp;#39;latitude&amp;#39;,
 &amp;#39;longitude&amp;#39;, &amp;#39;elevation&amp;#39;],
 dtype=&amp;#39;object&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;比较麻烦的是IGRA2的数据没有露点的数据，而这个数据有是绘图必须的。好在Metpy库提供了calc的计算模块，专门处理大气科学上的这些乱七八糟的计算。这里用&lt;a class="link" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.dewpoint.html#metpy.calc.dewpoint" target="_blank" rel="noopener"
 &gt;metpy.calc.dewpoint&lt;/a&gt;这个功能实现从水汽分压计算露点。官方也给出了一个&lt;a class="link" href="https://unidata.github.io/MetPy/latest/examples/calculations/Dewpoint_and_Mixing_Ratio.html#sphx-glr-examples-calculations-dewpoint-and-mixing-ratio-py" target="_blank" rel="noopener"
 &gt;示例&lt;/a&gt;，可以直接用。虽然功能上说是用水汽分压计算，但是只要有表面压强就可以计算了。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mixing = 10 * units(&amp;#39;g/kg&amp;#39;)
e = mpcalc.vapor_pressure(list(df[&amp;#39;pressure&amp;#39;])* units.mbar, mixing)
df[&amp;#39;dewpoint&amp;#39;] = mpcalc.dewpoint(e)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最后还有风速和风向这两个参数没有解决，calc也提供了模块搞定这个问题。怀俄明的代码是用风速和风向算u,v分矢量，而IGRA2恰好反过来。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;df[&amp;#39;u_wind&amp;#39;], df[&amp;#39;v_wind&amp;#39;] = mpcalc.wind_components(df[&amp;#39;speed&amp;#39;],np.deg2rad(df[&amp;#39;direction&amp;#39;]))
---
df[&amp;#39;speed&amp;#39;]=mpcalc.wind_speed(df[&amp;#39;u_wind&amp;#39;], df[&amp;#39;v_wind&amp;#39;])
df[&amp;#39;direction&amp;#39;]=mpcalc.wind_direction(df[&amp;#39;u_wind&amp;#39;], df[&amp;#39;v_wind&amp;#39;])
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;calc还有其他功能，可以查阅&lt;a class="link" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.html" target="_blank" rel="noopener"
 &gt;官方文档&lt;/a&gt;了解。&lt;/p&gt;
&lt;p&gt;添加如下代码：可以使程序运行，但是风向的转换似乎有问题，而官方的calc的包也总是报错，暂时不管了，先这么滴吧，还是用怀俄明的数据吧。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;f, header= IGRAUpperAir.request_data(date, station, derived=True)
df[&amp;#39;speed&amp;#39;]=mpcalc.wind_speed(df[&amp;#39;u_wind&amp;#39;], df[&amp;#39;v_wind&amp;#39;])

def mydirection(u,v):
 theta=np.arctan2(u, v)
 mydirection=np.rad2deg(theta)+180
 return mydirection

df[&amp;#39;direction&amp;#39;]=mydirection(df[&amp;#39;u_wind&amp;#39;], df[&amp;#39;v_wind&amp;#39;])

mixing = 10 * units(&amp;#39;g/kg&amp;#39;)
e = mpcalc.vapor_pressure(list(df[&amp;#39;pressure&amp;#39;])* units.mbar, mixing)
df[&amp;#39;dewpoint&amp;#39;] = mpcalc.dewpoint(e)
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Metpy新版功能下载TLnP图设置</title><link>https://ruajingjing.top/post/metpy%E6%96%B0%E7%89%88%E5%8A%9F%E8%83%BD%E4%B8%8B%E8%BD%BDtlnp%E5%9B%BE%E8%AE%BE%E7%BD%AE/</link><pubDate>Fri, 11 Oct 2019 23:53:28 +0000</pubDate><guid>https://ruajingjing.top/post/metpy%E6%96%B0%E7%89%88%E5%8A%9F%E8%83%BD%E4%B8%8B%E8%BD%BDtlnp%E5%9B%BE%E8%AE%BE%E7%BD%AE/</guid><description>&lt;img src="https://ruajingjing.top/" alt="Featured image of post Metpy新版功能下载TLnP图设置" /&gt;&lt;p&gt;文章很长，可以直接看末尾的用法总结。&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://unidata.github.io/MetPy/latest/index.html" target="_blank" rel="noopener"
 &gt;Metpy官方文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://unidata.github.io/MetPy/latest/tutorials/upperair_soundings.html#sphx-glr-tutorials-upperair-soundings-py" target="_blank" rel="noopener"
 &gt;Metpy Skew-T Tutorials&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://unidata.github.io/MetPy/latest/examples/plots/Skew-T_Layout.html" target="_blank" rel="noopener"
 &gt;Metpy Skew-T Complex Layout&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://unidata.github.io/siphon/latest/examples/upperair/Wyoming_Request.html#sphx-glr-examples-upperair-wyoming-request-py" target="_blank" rel="noopener"
 &gt;Siphon Wyoming Upper Air Data Request&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;用于天气绘图的Metpy包更新（0.8版本）了，他们要逐渐抛弃Python2.X，转到Python&amp;gt;=3.6的版本上。所以，之前（越2018年6月以前，0.7版本）的一些脚本就无法使用了。在大气科学专业，我们主要使用 Metpy 绘制以怀俄明大学高空探测数据为基础的斜-T图(Skew-T)。受更新影响，原本的 upperair_sounding.py脚本也有改动。&lt;/p&gt;
&lt;h2 id="新旧metoy的改动"&gt;新旧MEtoy的改动
&lt;/h2&gt;&lt;p&gt;老版本的第17~41行为：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;from datetime import datetime

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
import numpy as np

import metpy.calc as mpcalc
from metpy.io import get_upper_air_data
from metpy.plots import Hodograph, SkewT

#########################################################################
# Getting Data
# ------------
#
# We will download data from the
# `University of Wyoming sounding data page &amp;lt;http://weather.uwyo.edu/upperair/sounding.html&amp;gt;`_
# , which has an extensive archive of data available, as well as current data.
#
# In this case, we will download the sounding data from the Veterans Day
# tornado outbreak in 2002 by passing a ``datetime`` object and station name to the
# ``get_upper_air_data`` function.

dataset = get_upper_air_data(datetime(2018, 5, 7, 0), &amp;#39;ZSQD&amp;#39;)

##########################################################################
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;而新版本的第18～47行为：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
import numpy as np
import pandas as pd

import metpy.calc as mpcalc
from metpy.cbook import get_test_data
from metpy.plots import Hodograph, SkewT
from metpy.units import units

#########################################################################
# Getting Data
# ------------
#
# Upper air data can be obtained using the siphon package, but for this tutorial we will use
# some of MetPy&amp;#39;s sample data. This event is the Veterans Day tornado outbreak in 2002.

col_names = [&amp;#39;pressure&amp;#39;, &amp;#39;height&amp;#39;, &amp;#39;temperature&amp;#39;, &amp;#39;dewpoint&amp;#39;, &amp;#39;direction&amp;#39;, &amp;#39;speed&amp;#39;]

df = pd.read_fwf(get_test_data(&amp;#39;nov11_sounding.txt&amp;#39;, as_file_obj=False),
 skiprows=5, usecols=[0, 1, 2, 3, 6, 7], names=col_names)

df[&amp;#39;u_wind&amp;#39;], df[&amp;#39;v_wind&amp;#39;] = mpcalc.wind_components(df[&amp;#39;speed&amp;#39;],
 np.deg2rad(df[&amp;#39;direction&amp;#39;]))

# Drop any rows with all NaN values for T, Td, winds
df = df.dropna(subset=(&amp;#39;temperature&amp;#39;, &amp;#39;dewpoint&amp;#39;, &amp;#39;direction&amp;#39;, &amp;#39;speed&amp;#39;,
 &amp;#39;u_wind&amp;#39;, &amp;#39;v_wind&amp;#39;), how=&amp;#39;all&amp;#39;).reset_index(drop=True)

##########################################################################
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;对比可以发现，用于绘图的模块基本没变，而是用于读取数据的模块变了，无论是库还是代码调用方法。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;from metpy.io import get_upper_air_data
---
from metpy.cbook import get_test_data

dataset = get_upper_air_data(datetime(2018, 5, 7, 0), &amp;#39;ZSQD&amp;#39;)
---
df = pd.read_fwf(get_test_data(&amp;#39;nov11_sounding.txt&amp;#39;, as_file_obj=False),
 skiprows=5, usecols=[0, 1, 2, 3, 6, 7], names=col_names)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img alt="Metpy DOC Siphoon" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bugatii100peaglepics.oss-cn-qingdao.aliyuncs.com/2019-3/MetpyNotes/MetpyDocToSiphoon.png"&gt;&lt;/p&gt;
&lt;p&gt;而从官方说明文档中得知，获取数据这个功能被独立出来，用Siphon这个库实现。让我们来看看Siphon时何方神圣？搜索Siphon文档得知，这货就是个专门爬气象数据的包。他提供&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;netCDF 格式的NCSS的数据&lt;/li&gt;
&lt;li&gt;NDBC 的浮标数据(海洋人的最爱)&lt;/li&gt;
&lt;li&gt;高空探测数据，怀俄明大学数据源(Wyoming data)和IGRA2数据源（Integrated Global Radiosonde Archive）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;之前我喜欢用怀俄明大学的数据，所以这次就来看看要怎么用怀俄明大学的数据画Skew-T图。&lt;/p&gt;
&lt;p&gt;分析新版本的数据读取的语句&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;df = pd.read_fwf(get_test_data(&amp;#39;nov11_sounding.txt&amp;#39;, as_file_obj=False),
 skiprows=5, usecols=[0, 1, 2, 3, 6, 7], names=col_names)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;得知，nov11_sounding.txt 是官方内置的一个示例数据文件，这行代码主要是用pandos的功能读取一个列表数据。&lt;/p&gt;
&lt;p&gt;如果能用Siphon下载同格式的数据的话，那么只要改改读取的文件名就可以了。
我们看一下这个神奇的txt文件在哪里
运行一下脚本&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;python3 upperair_soundings.py 
---
/home/bugatti/anaconda3/lib/python3.6/site-packages/pooch/core.py:260: UserWarning: Downloading data file &amp;#39;nov11_sounding.txt&amp;#39; from remote data store &amp;#39;https://github.com/Unidata/MetPy/raw/v0.10.0/staticdata/&amp;#39; to &amp;#39;/home/bugatti/.cache/metpy/v0.10.0&amp;#39;.
 action, fname, self.base_url, str(self.path)
923.0963220202037 hectopascal 15.595422727825456 degC
/home/bugatti/anaconda3/lib/python3.6/site-packages/pint/quantity.py:1377: UnitStrippedWarning: The unit of the quantity is stripped.
 warnings.warn(&amp;#34;The unit of the quantity is stripped.&amp;#34;, UnitStrippedWarning)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;能够成功出图，然后看到命令行窗口的第二行显示这个文件在&amp;rsquo;/home/bugatti/.cache/metpy/v0.10.0&amp;rsquo; 这个目录里，bugatti是我的用户名，换在你的电脑中应该也是类似的路径。
打开这个文件格式如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;-----------------------------------------------------------------------------
 PRES HGHT TEMP DWPT RELH MIXR DRCT SKNT THTA THTE THTV
 hPa m C C % g/kg deg knot K K K
-----------------------------------------------------------------------------
 1000.0 -12
 978.0 180 20.4 16.5 78 12.22 180 16 295.4 330.7 297.6
 964.1 305 22.2 17.1 73 12.92 185 29 298.5 336.3 300.8
 954.0 397 23.6 17.6 69 13.45 188 35 300.8 340.5 303.2
 931.0 610 22.5 16.5 69 12.84 195 49 301.7 339.8 304.1
 925.0 667 22.2 16.2 69 12.68 200 48 302.0 339.7 304.3
 898.9 914 20.2 14.5 70 11.68 205 49 302.4 337.2 304.5
 867.6 1219 17.7 12.4 71 10.54 215 52 302.9 334.4 304.8
 850.0 1396 16.2 11.2 72 9.92 220 55 303.1 332.9 304.9
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个和在&lt;a class="link" href="http://weather.uwyo.edu/upperair/sounding.html" target="_blank" rel="noopener"
 &gt;怀俄明无线电探空数据网站&lt;/a&gt; 的数据格式一模一样（毕竟就是从这爬取的数据嘛）&lt;/p&gt;
&lt;p&gt;&lt;img alt="UWYO DATA" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bugatii100peaglepics.oss-cn-qingdao.aliyuncs.com/2019-3/MetpyNotes/WoymData.png"&gt;&lt;/p&gt;
&lt;h2 id="siphon的文档的说明"&gt;Siphon的文档的说明
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;导入读取怀俄明大学数据读取模块&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;from datetime import datetime

from metpy.units import units

from siphon.simplewebservice.wyoming import WyomingUpperAir
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;设置要获取的地点和时间&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;date = datetime(2017, 9, 10, 6)
station = &amp;#39;MFL&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="3"&gt;
&lt;li&gt;发送请求，拉取数据&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;df = WyomingUpperAir.request_data(date, station)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;就是这么简单粗暴！&lt;/p&gt;
&lt;h2 id="唯一需要注意的是时间格式的设置"&gt;唯一需要注意的是时间格式的设置
&lt;/h2&gt;&lt;p&gt;在Spyder中运行上述代码，获取数据，在变量窗口查看数据值&lt;/p&gt;
&lt;p&gt;&lt;img alt="Spydervalue" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bugatii100peaglepics.oss-cn-qingdao.aliyuncs.com/2019-3/MetpyNotes/SpyderValue.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="SpderValue2" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bugatii100peaglepics.oss-cn-qingdao.aliyuncs.com/2019-3/MetpyNotes/SpyderValue2.png"&gt;&lt;/p&gt;
&lt;p&gt;与怀俄明大学网站的数据列表作对比
&lt;img alt="uwyodata" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bugatii100peaglepics.oss-cn-qingdao.aliyuncs.com/2019-3/MetpyNotes/WoymData.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="dadtaheml" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bugatii100peaglepics.oss-cn-qingdao.aliyuncs.com/2019-3/MetpyNotes/uwyoDatahtml.png"&gt;&lt;/p&gt;
&lt;p&gt;发现 (2017, 9, 10, 6)表示的就是2017年9月10日6时。6所在位置的参数只有(0, 6, 12)三个数字可选。这里使用的是世界时，0和12也就是中国地区早八晚八时放气球，美国迈阿密(站号MFL，时区西五区)大概是晚七早七，6属于补测的时间，一般是由于天气过程复杂，或者早上的数据没测好才会有补测的6时。&lt;/p&gt;
&lt;p&gt;回到数据读取问题上来，示例文件中的语句是把一个写好的txt文件读取为类似nc文件那样带变量描述的值的一个东西。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;df = pd.read_fwf(get_test_data(&amp;#39;nov11_sounding.txt&amp;#39;, as_file_obj=False),
 skiprows=5, usecols=[0, 1, 2, 3, 6, 7], names=col_names)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;而siphon爬去网络数据就直接是这样的格式，所以如果要改为自己想要的某天日期也十分简单。就是把示例文件中的语句注释掉，然后添加如下代码：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#df = pd.read_fwf(get_test_data(&amp;#39;nov11_sounding.txt&amp;#39;, as_file_obj=False),
# skiprows=5, usecols=[0, 1, 2, 3, 6, 7], names=col_names)

from datetime import datetime
from siphon.simplewebservice.wyoming import WyomingUpperAir

date = datetime(2019, 3, 25, 0)
station = &amp;#39;MFL&amp;#39;
df = WyomingUpperAir.request_data(date, station)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;运行得到本文写作当天早八点的探空图。嗯，看样子多云天还得持续几天。&lt;/p&gt;
&lt;p&gt;&lt;img alt="SkewT2019032500" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bugatii100peaglepics.oss-cn-qingdao.aliyuncs.com/2019-3/MetpyNotes/SkewT2019032500.png"&gt;&lt;/p&gt;
&lt;h2 id="最后添加一些使代码更容易使用的语句"&gt;最后添加一些使代码更容易使用的语句：
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;print(&amp;#39;欢迎使用 Metpy 和 Siphon 获取怀俄明大学无线电探空数据，使用方法如下：&amp;#39;)
print(&amp;#39;1.输入’年月日时‘和站号，如‘2019032500ZSQD’，中间无间隔。&amp;#39;)
print(&amp;#39;2.输入图片保存路径，回车默认脚本所在文件夹。&amp;#39;)
print(&amp;#39;提示：探空时段采用世界时，一般为00或12,06为补测数据，请自行换算时区。&amp;#39;)
print(&amp;#39; 中国区常用站号：北京-ZBAA，青岛-ZSQD，昆明-ZPPP，南京-ZSNJ&amp;#39;)
dateNum=input(&amp;#39;请输入日期和站号&amp;#39;)
figpath=input(&amp;#39;请输入保存路径&amp;#39;)
print(&amp;#39;正在获取探空图&amp;#39;,dateNum[:4], dateNum[4:6], dateNum[6:8], dateNum[8:10],dateNum[10:])
print(&amp;#39;保存路径为&amp;#39;,figpath)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="使用截图"&gt;使用截图
&lt;/h2&gt;&lt;p&gt;：
&lt;img alt="How To use" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bugatii100peaglepics.oss-cn-qingdao.aliyuncs.com/2019-3/MetpyNotes/HowtouseMeypySiphon.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://bugatii100peaglepics.oss-cn-qingdao.aliyuncs.com/2019-3/MetpyNotes/upperair_soundings_wiithSinphon.py" target="_blank" rel="noopener"
 &gt;点击下载代码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(PS:Siphon的意思是‘虹吸管’，很适合它，吸数据的虹吸管)&lt;/p&gt;</description></item></channel></rss>