• 【Python学习】安装Python和绘图示例


    从前猫王国里有一只白猫,名叫索菲亚,她学习用Python编程。

    Vamei[1]细述Python的起源。Python是一种编程语言,作者Guido von Rossum,一位荷兰计算机工程师。Guido创造Python的初衷是:「希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程。」

    Vamei书写了Python教程系列文章,他是索菲亚的引路人。当时索菲亚写论文,发现用Python所simulation很简洁精美功能强大。

    Python是一种解释性编程语言,也就是说不需要生成可执行程序,直接执行脚本(.py文件)。所以Python程序执行时,解释器必须运行。Python3即解释器。这和C不同,C语言是用编辑器(compiler)[2]生成可执行程序的(机器代码文件,01码)。所以C程序比Python脚本运行快些。陈皓先生(微博左耳朵耗子,Github haoel)说网站开发需要用Java。 Python在学术研究和中小型项目很适用。

    本文索菲亚介绍Python的绘图功能。内容尽可能地self-contained。所以从安装Python开始写起,并推荐一个神一般存在的Python3教程。

    1. 安装Python

    索菲亚用MacBook Pro电脑,操作系统是macOS Mojave,Version10.14.5。

    由于索菲亚安装Python已经很久了,不是实录,仅仅是介绍官方网站文字[3]

    程序安装次第是Xcode、Homebrew、Python、Pip、Jupyter。

    1. 安装Xcode(可选)

    Xcode是Mac的计算器功能调用环境,即Mac编程环境,通常Mac自带Xcode,便不需要再安装了。

    1. 安装Homebrew

    Homebrew是Xcode的package manager,即文件下载和安装工具。是不是Mac也自带了?
    如果需要安装,安装操作是输入命令:

    $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
    1. 安装Python 3

    安装操作是输入命令:

    $ brew install python
    
    1. 安装pip3(可选)

    Python 3的package manager工具是pip3(Python 2的package manager工具是pip)。
    Python 3自带pip3。请试试以下命令。

    pip3 install numpy
    

    通常学术仿真常用的python package还有数据处理scipy,绘图的matplotlib。下文会介绍matplotlib.pyplot。

    5.安装Jupyter

    脚本editor。用TextEdit就可以编辑Python脚本,但Python对缩进很苛刻,需要专业的editor。

    索菲亚查找过、尝试过很多best editors,vi、emacs、IDLE,还有专业程序员常用编辑器,体积巨大。索菲亚最喜欢Jupyter,支持中文注释,事实上,Jupyter有两种输入框(Cell),1)Python代码或2)Markdown。所以对文字的支持强大。

    索菲亚认为Mac Terminal中执行Python,确实既可以直接编程,又可以执行脚本文件。而Jupyter也有这两个功能。

    安装操作[4]是输入命令:

    $ pip3 install "ipython[notebook]"
    

    运行Jupyter,需要switch到目标文件夹,输入命令:

    $ python3 -m IPython notebook
    

    可以发现Jupyter在浏览器中执行。该文件夹及其子文件夹是Jupyter的工作文件夹。

    上文提到Python对文字的支持强大。推荐一个例子:NetworkX Tutorial这个网页在文末可以下载.ipynb Jupyter文档。下载后,拷贝至Jupyter的工作文件夹,可以双击打开。

    现在来尝试新建自己的Python程序。

    2. Python 3教程

    W3Cschool有一个Python 3教程,very basic,beautiful。而且有一个“赞赏支持”功能,“您的支持将鼓励我们做得更好”。

    索菲亚很遗憾自己没有早一点看到这个系列,因为这需要搜索非常基本的关键词才能看到,比如索菲亚恰巧搜索了 "python 数据结构"。(这篇博文从几天前首次写完,每天索菲亚有新发现,然后不停地打补丁,已经看不出来学习路线了。也许该另开一个博文。)

    3. 绘图程序

    绘图可以用PIL(Python image library)package逐个pixel基础绘图,也可以调用绘图package。

    下面的示例参考的是Jackson Gabbard的open source[5]
    关于PIL,nkmk.me有一个优雅、全面的介绍,有大量举例[6]

    2.1 基础绘图

    在Jupyter 选择合适的文件夹,new python 3,可以看到另一个浏览器窗口untitled,请在左上角rename,比如PillowExamples并在文件夹下产生PillowExamples.ipynd文件,这个文件即源码数据,不再有.py文件。

    在命令行(cell)输入Python 代码:

    from PIL import Image
    
    #Image坐标原点在左上角,X轴向右,Y轴向下。
    #RGB颜色的取值示例0x123456,R是0x56,G是0x34,B是0x12。
    #image.putpixel((x, y), 0xff0000)
    #image.putpixel((x, y), (r, g, b))
    #image.putpixel((x, y), (r, g, b, a)) 如果使用RGBA颜色的话,A是alpha,opacity,100%表示不透明。
    
    img_size = 300
    bg_color = 0xFFFFFF #white
    
    im = Image.new('RGB', (img_size, img_size), bg_color)
    
    for y in range(img_size):
        for x in range(int(img_size/3)):
            im.putpixel((x, y), (0xff, 0, 0xff)) #magenta
        for x in range(int(img_size/3),int(img_size*2/3)):
            im.putpixel((x, y), (0xff, 0xff, 0))# yellow
        for x in range(int(img_size*2/3),img_size):
            im.putpixel((x, y), (0, 0xff, 0xff))#cyan
           
    im.show()
    

    另一个示例是在背景图片上写文字,制作一张生日卡片[7]

    2.2 调用绘图功能包matplotlib.pyplot

    matplotlib.pyplot[8]是使得matplotlib运作起来像是MATLAB的绘图function package。
    例如,新绘一个图,在图中作文字说明等。

    plot函数用于画点和线,同时有autoscale功能,即坐标会自动适配展示所绘的图。

    import matplotlib.pyplot as plt
    plt.plot([1, 2, 3], [1, 4, 9], 'o--')
    plt.xlabel('time (s)')
    plt.show()
    

    plot还有第三个参数用于规定点和线的风格,还可以用数组表示点,数组需要numpy package。例如,

    import numpy as np
    import matplotlib.pyplot as plt
    # evenly sampled time at 200ms intervals
    t = np.arange(0., 5., 0.2)
    #t是一维数组, 可以用print(t)观察
    
    
    # red dashes, blue squares and green triangles
    plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
    plt.title('Dots show')
    plt.xlabel('time (s)')
    plt.ylabel('Functions')
    plt.show()
    

    组合型参数'r--'表示red,虚线。其他参数请用英文单词直觉理解。Python 函数的介绍有时不严谨,我想是作者认为脚本语言本身即英文文本说明。

    如果画圆[9],原理是先准备一个圆的对象,再显示到坐标系。

    import matplotlib.pyplot as plt
    
    ax = plt.gca()#Get Current Axes
    c1=plt.Circle((0, 0), 0.2, color='r', alpha=0.5)
    c2=plt.Circle((1, 1), 0.5, color='cyan', alpha=0.5, clip_on=False)
    ax.add_patch(c1)
    ax.add_patch(c2)
    ax.add_artist(plt.Circle((1, 0), 0.5, color='grey', alpha=0.5, clip_on=True))
    #The difference between ax.add_patch(..) and ax.add_artist(..)
    #of the two, only the former makes autoscaling machinery take the circle into account.
    
    #Use adjustable='box-forced' to make the plot area square-shaped as well.
    ax.set_aspect('equal', adjustable='datalim')
    ax.plot()   #Causes an autoscale update.
    plt.show()
    

    如何读一张图片,即如何load一个图片文档。

    #参考:
    #[1]StackOverFlow, Reading images in python, Asked: Gerges, Answered: Shai Léger, https://stackoverflow.com/questions/48729915/reading-images-in-python
    
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    
    img=mpimg.imread('/path/colorwheel2.eps') #请用正确的图片文件路径
    imgplot = plt.imshow(img)
    

    参考:


    1. Vamei,「Python简史」,2013-02-06,https://www.cnblogs.com/vamei/archive/2013/02/06/2892628.html ↩︎

    2. Compiler vs Interpreter: Complete Difference Between Compiler and Interpreter, guru99, https://www.guru99.com/difference-compiler-vs-interpreter.html ↩︎

    3. Installing Python 3 on Mac OS X, https://docs.python-guide.org/starting/install3/osx/ ↩︎

    4. 大数软体有限公司,「如何安装 Jupyter (Ipython Notebook)」,2017-10-31,https://v.youku.com/v_show/id_XMzEyMzQ1MzEwOA==.html?refer=seo_operation.liuxiao.liux_00003310_3000_nUF3ai_19042900 ↩︎

    5. Jackson Gabbard, Python-Color-Gamut-Generator, Github, https://github.com/jacksongabbard/Python-Color-Gamut-Generator/blob/master/color-wheel-generator.py ↩︎

    6. note.nkmk.me, Pillow, https://note.nkmk.me/en/pillow/ ↩︎

    7. VINAY JAIN, PUTTING TEXT ON IMAGE USING PYTHON – PART I, https://haptik.ai/tech/putting-text-on-image-using-python/ ↩︎

    8. Pyplot tutorial, https://matplotlib.org/3.1.1/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py ↩︎

    9. Evgeni Sergeev, plot a circle with pyplot, 2018-01-03, https://stackoverflow.com/questions/9215658/plot-a-circle-with-pyplot/29184075#29184075 ↩︎

  • 相关阅读:
    委托、事件入门(转)
    ArcToolBox——Clip 批量处理
    Geometry 对象浅析 ( 作者:Flyingis)
    AE数据加载
    ADO.NET 的最佳实践技巧(转)
    android调用.net wcf 服的方法
    winform调用dos命令
    变位词实现 编程珠玑一处错误
    元素翻转
    80X86学习笔记转移指令
  • 原文地址:https://www.cnblogs.com/dersu/p/12940453.html
Copyright © 2020-2023  润新知