精华内容
下载资源
问答
  • 一个简单易用的编程绘图工具mermaid
    千次阅读
    2019-06-13 07:56:16

           最近在编写文档时,想在图中插入一些示意图,按原来的做法,是想用visio之类的画图软件来完成这样的工作的。不巧新装的电脑,上面没有安装visio软件。而且只是想画一些简单的树状图之类的,想想这样的工作用word自带的画图功能也能胜任吧。

    可是一直以来不太喜欢用word自带的画图功能,说不出来的感觉,说方便吧,又不方便。想想还是在网上查找一下有没有小巧易用的画图工具。

          以前用过Graphviz,这个工具的特点是用脚本语言来描述图形,软件自动生成图片。这是个命令行的工具。

    没想到这次发现有人将Graphviz的思想用javascript实现了。这个工具叫mermaid,它提供了一种类似markdow的语法来创建各种图形。

    这一种思路可能会受到很多程序员的喜欢吧。程序员更习惯写代码,而不是拿画笔。

    对我而言,更愿意从例子入手

    看一下这个官网上的例子吧

    https://unpkg.com/mermaid@8.0.0/dist/index.html

    更多的信息可以查看:

    https://github.com/knsv/mermaid

    更多相关内容
  • plc编程绘图

    2016-01-24 12:19:24
    PLC编程利用此软件进行,画图设计,方便编程时遇到的困难。
  • 本文内容:描述Matplotlib架构概述:Backend(后端)Artist(美工)Scripting(脚本),介绍面向对象编程(object-oriented)绘图和函数型绘图(matplotlib.plot)的区别与关联,介绍Figure、Axes、Text、2Dlines、ticks和...


    前言

    很多人入手Matplot库的时候是从matplotlib.pyplot入手的,因为看起来操作简单,但这实际上只能快速产图,如果想要对图片进行调整,例如,调整画布尺寸、调整横轴或者纵轴刻度,或者隐藏横轴或者纵轴标签等等,就会无从下手,实际上,matplotlib架构共分为三层:Backend(后端)、Artist(美工)、Scripting(脚本),待本文一一介绍。


    一、Matplotlib架构概述

      Matplotlib中包含和管理给定图形中所有元素的顶级对象称为Figure(可以理解为画板),matplotlib 的核心架构任务之一是实现一个用于展现操作 Figure的框架,并与将Figure呈现到用户界面窗口或硬拷贝的行为进行分离。实现这一点的架构在逻辑上分为三层,可以看作是一个堆栈。位于另一层之上的每一层都知道如何与它下面的层对话,但较低的层不知道它上面的层。从下到上三层是:Backend(后端)、Artist(美工)、Scripting(脚本)。


    1.1 Backend(后端)

      实际上,调用Matplotlib的方式可以大不相同:有些人从 Python shell 交互式地使用 Matplotlib,他们键入命令时会弹出绘图窗口,有些人在 Jupyter Notebook用%matplotlib inline或者%matplotlib notebook的magic code绘制内联图或者交互式图表以进行快速数据分析;还有人将 Matplotlib 嵌入到 PyQt 或 PyGObject 等图形用户界面中以构建丰富的应用程序;或者有一些人运行 Web 应用程序服务器来动态提供图形等等。

      为了支持所有这些用例,Matplotlib 可以针对不同的输出,这些不同的输出每一种都称为一种后端;“前端”是面向用户的代码,即绘图代码,而“后端”则在幕后完成所有艰苦的工作来制作图形。有两种类型的后端第一种后端是用户界面后端(user interface backends):用于 PyQt/PySide、PyGObject、Tkinter、wxPython 或 macOS/Cocoa,也称为“交互式后端(interactive backends)”我们在jupyter notebook中用的%matplotlib notebook就属于这一种;另一种后端是硬拷贝后端:用以制作图像文件PNG、SVG、PDF、PS,也称为“非交互式后端(non-interactive backends)”

    后端也分为三块

    • FigureCanvas 封装了要绘制的表面的概念(可以理解为画纸)
    • Renderer 渲染器 (可以理解为用来画画的画笔)
    • Event 处理用户输入,例如键盘的输入和鼠标的移动与悬停。

      本文是在Jupyter Notebook的基础上,用%matplotlib notebook的magic code形成的交互式图像,在这里,我们查看所用的后端:

    %matplotlib notebook
    import matplotlib as mpl
    mpl.get_backend()
    
    --Outputs:
    'nbAgg'
    

      如果需要调整后端,可以参看官方网站:matplotlib.Backends,一般情况下,使用默认的后端即可


    1.2 Artist(美工)

      Artist是Matplotlib的中间层,也是很多繁重的情况发生的地方,后端FigureCanvas是画纸,Artist是知道如何拿起Renderer(画笔)并将墨水涂在画布上的对象,你在Matplotlib的Figure都是Artist的实例包括title, lines, tick labels, images等等,他们都属于基类matplotlib.artist.Artist,而Artistbackend之间的关联发生在draw方法中。由于Renderer有一个指向其画布FigureCanvas的指针,并知道如何在其上绘画,因此draw方法可以将抽象的指令转换Artist为像素缓冲区中的颜色、SVG 文件中的路径或任何具体表示。
      我们用两张图来理解Artist的各个实例与层次,在这张图中,我们给出了主要的实例:Figure(图)、Axes(轴域)、Text(文本)、2Dline(二维线条)、XAxis(X轴)、YAxis(Y轴)、Xlabel(X轴标签)、Xticks(X轴刻度)、Ylabel(Y轴标签)、Yticks(Y轴刻度),注意,Axes中的ax.set_xticklabels()设置的就是plt.xticks()我们接下来将一一介绍他们的具体用法:

    在这里插入图片描述
      他们的关系如下所示:
    在这里插入图片描述
      最大的一类是Figure,其次是Axes,再其次是Axes中的一些实例,轴、文本、线条等等,Text可以包含图的标题、图注、图标等等一切的文本。
      另外需要注意这些美工实例又分为原始型美工(Primitive artists)复合型美工(Composite artists),例如前面提到的Text、以及背景的Rectangle、Circle都是原始型美工,而Axis、Tick、labels、Axes、Figure则是复合型美工,一个复合型美工可以包含多个复合型美工或者原始型美工,例如,Figure可以包含包含一个或多个Axes并且Figure的背景是一个基元Rectangle

      接下来我们对这些实例进行一一介绍:


    1.2.1 Figure、Subplot与Axes

    • Figure

      我们可以将Figure看成是一张大的画板,可以matplotlib.figure中的fig=Figure()来创建一张画板fig,也可以在函数式绘图中用fig=plt.figure()来建立fig

    在这里插入图片描述

      但有个画板还不够,好比你要画油画,你不能画在画板上吧,至少需要一张画纸,这里的画纸就可以理解为以横纵坐标轴为长和宽所建立起来的矩形,2D的图像都在这个矩形内。可以用canvas = FigureCanvas(fig)来产生一张画纸,或者如果你用fig=plt.figure(),那他会默认产生一张画纸。如果你觉得一张画纸不够,要在一张画板上多用几张画纸,也是可以的,可以用fig.add_subplot或plt.subplots(子图),或者fig.add_axes(轴域)来产生多的画纸,他们会将原来大的画纸进行拆分,拆分成若干张小画纸,画纸和画纸间可以嵌套,可以并列放置,我们接下来对这两者进行介绍与区分:

    • Subplot

      首先介绍Subplot,Subplot负责将整个画板分割成几块,用ax = fig.add_subplot(abc) 来创建子图,里面的参数abc代表是产生a行b列一共a*b个子图区域,c表示给这个区域添加子图。
      例如:ax1 = fig.add_subplot(221) , ax2 = fig.add_subplot(222) , ax4 = fig.add_subplot(224)就是在2*2个区域中,在左上,右上和右下建立子图:

    from matplotlib.figure import Figure
    from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
    
    fig = Figure()
    canvas = FigureCanvas(fig)
    
    ax1 = fig.add_subplot(221) 
    ax2 = fig.add_subplot(222) 
    ax4 = fig.add_subplot(224)
    
    canvas.print_png('test1.png')
    

      借用%%html来在网页上查看图片,红色字迹为注释,非做在图上的。

    %%html
    <img src='test1.png' />
    

    在这里插入图片描述

      Subplot建立子图的方式比较基础而且整洁,另一种形式Axes则较为灵活:

    • Axes

      Axes,个人翻译为轴域,可以通过fig.add_axes([left,bottom,width,height])添加子图的左边界、下边界、宽度和高度来在合适的位置上添加子图:

    from matplotlib.figure import Figure
    from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
    
    fig    = Figure()
    canvas = FigureCanvas(fig)
    
    ax1    = fig.add_axes([0.1, 0.1, 0.2, 0.2]) #代表左边空出10%,底部空出10%,宽度为20%,高度为20%
    ax1.set_title("ax1")
    
    ax2    = fig.add_axes([0.3, 0.3, 0.4, 0.4]) #代表左边空出30%,底部空出30%,宽度为40%,高度为40%
    ax2.set_title("ax2")
    
    canvas.print_figure('test3.jpg')
    

    在这里插入图片描述

      Axes还可以嵌套,如果设置

    ax1    = fig.add_axes([0.1, 0.1, 0.8, 0.8])
    ax2    = fig.add_axes([0.3, 0.3, 0.4, 0.4])
    

      我们可以看到以下情况:

    在这里插入图片描述

    • 快速确定用子图还是轴域

      关于Subplot和Axes本质上都是产生多张画纸,所以两者的区别并不大,如果想快速、标准的切割画板,可以用fig.add_subplot(),而如果想自定义画纸,则可以使用fig.add_axes(),这两种创建子图的方法,在脚本层都有对应的实现方式,下文我们会提到。


    1.2.2 Axis、ticks与label

      Axes是轴域,Axis就是轴,对应的有X轴和Y轴,每个轴都有ticks,即轴上的刻度与label,即轴标签,对于调整刻度可以用set_xlim()和set_ylim()来调整,对于设置ticks的名称,则可以使用ax.set_xticklabels()ax.set_yticklabels()来设置。对于设置标签,则用ax.set_xlabel()ax.set_ylabel()来实现,还可以设置title,用set_title()来实现我们可以在脚本层来更方便的控制。

      示范代码如下:

    ax=fig.add_axes([0.1, 0.1, 0.8, 0.8])
    ax.set_xlim(-0.5,1.5)
    ax.set_ylim(-0.5,1.5)
    ax.set_xticklabels(['One','Two','Three'])
    ax.set_xlabel('Date')
    ax.set_ylabel('Units')
    ax.set_title('Exponential vs. Linear performance')
    

    1.2.3 坐标与按指令做图

      在现实生活中如果我们想要画一个多边形,我们会先想好多边形的几个顶点,并画线,在顶点出拐弯,在计算机上画图,我们则可以先固定点,再用连线的办法连起来,这时,在matplotlib中,我们可以直接调用render画笔,教它怎么确定坐标,怎么连接线,让他帮我们在画纸上画画,比如,我们可以用matplotlib中pathpatches,一个用来画线,一个用来建立图形块,path.MOVETO表示指针移动到对应位置,path.LINETO表示从当前指针位置到目标指针位置连线,path.CLOSEPLOT即停止做图,如下所示:

    from matplotlib.figure import Figure
    from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
    
    fig    = Figure()
    canvas = FigureCanvas(fig) #添加画布
    ax     = fig.add_axes([0.1, 0.1, 0.8, 0.8])#设置Axes位置
    
    from matplotlib.path import Path
    import matplotlib.patches as patches
    
    verts = [(0, 1),(0.5, 1.5),(1,1),
            (0.25,0),(0.75,0),(0,1)] #设置顶点位置
    
    codes = [Path.MOVETO,
             Path.LINETO,
             Path.LINETO,
             Path.LINETO,
             Path.LINETO,
             Path.CLOSEPOLY] #设置各个顶点之间的连接方式
    
    path = Path(verts, codes)
    
    patch = patches.PathPatch(path, facecolor='lightblue')
    ax.add_patch(patch)
    ax.set_xlim(-0.5,1.5)
    ax.set_ylim(-0.5,1.5)
    
    canvas.print_figure('test5.jpg')
    

      得到以下鱼形图片:
    在这里插入图片描述


    1.3 Scripting(脚本)

      在这里主要介绍Python上的API,matplotlib.pyplot,通常起别名为plt。在上面的代码中,都是面向对象编程绘图(OO,object-oriented),接下来我们可以用API来简化步骤:


    1.3.1 Figure、Subplot与Axes(从脚本层回到Artist层的办法)

      脚本编程和面向对象编程绘图的顺序是一样的,首先要建立一张空的画板,其次再依据需求对画板进行分割,建立画板可以用fig=plt.figure()来实现,如果不需要对画板进行分割,可以跳过fig.add_subplot()或者fig.add_axes()这一步。

      在这里如果想要从脚本层直接到Artists层操作,可以使用ax=fig.add_axes()进而对ax进行操作,或者ax=plt.gca()也可以得到当前的Axes,gca即get current Axes,而可以用fig=plt.gcf()来得到当前的Figure,gcf即get current Figure

      示范代码:

    import matplotlib.pyplot as plt
    fig=plt.figure()
    ax=fig.add_axes([0.1,0.1,0.8,0.8])
    ax=plt.gca()
    fig=plt.gcf()
    

    1.3.2 ticks、label、title与legend

      不同于直接对Axes进行set操作,API可以使用plt.xticks()来对x的ticks进行命名,作用等价于ax.set_xticklabels(),用plt.xlabel()plt.ylabel()对label进行命名,作用等价于ax.set_xlabel()ax.set_ylabel()plt.title()对title进行命名,等价于ax.set_title()同时,如果需要添加图注,只要用plt.legend()来添加就可以了,参数为list类型,对所做的图依次添加图注。但如果要在图形上添加什么数字,还是建议用ax.text(x,hight,text_value,fontsize)用画笔直接在画纸上“写字”。

      示范代码:

    import numpy as np
    
    linear_data = np.array([1,2,3,4,5,6,7,8])
    exponential_data = linear_data**2
    
    plt.figure()
    plt.plot(linear_data, '-o',exponential_data,'-o')
    plt.xlabel('Some data')
    plt.ylabel('Some other data')
    plt.title('A title')
    plt.xticks(linear_data,eng)
    plt.legend(['Baseline', 'Competition')
    

    在这里插入图片描述


    1.3.3 设置边框与添加文本

    • 设置边框不可见
      可以将对应边框的spines的值设置为不可见,共四种:
      plt.gca().spines['top'].set_visible(False)
      plt.gca().spines['right'].set_visible(False)
      plt.gca().spines['left'].set_visible(False)
      plt.gca().spines['bottom'].set_visible(False)

      可以适当用LC表达式来简化语言,或用迭代器的方式简化语言,例如:

    for spine in plt.gca().spines.values():
        spine.set_visible(False)
    #LC表达式
    [plt.gca().spines[loc].set_visible(False) for loc in ['top','right','bottom','left']]
    

      效果可见下2.2中的实例

    • 在指定位置添加文本
      plt.text(x,y,string,fontsize=,va="",ha="",bbox={‘fc’:’’, ‘ec’:’’})
      只要设置x的值和y的值,设置文本string,设置字体大小fontsizeva代表vertical alignment,即垂直对齐,ha代表horizontal alignment,即水平对齐。这里的bbox是对文本框的配置,其中fc表示filled color,文本框内填充颜色,ec表示edge color,文本框框体颜色,效果可见下2.2中的实例

    二、面向对象编程绘图与函数式绘图对比与实例

    2.1 OO绘图与函数式绘图的对比

      我们发现,面向对象(object-oriented,OO)绘图更加的灵活,而函数式绘图则更加快捷,现实中,在添加文本注释时,我往往会偏向于使用OO,在Axes上找到对应的位置,直接添加文字,在考虑多张表不规则排放在一张图中时,尤其是嵌套等情况,也会用Axes来规定位置;但函数式绘图明显更加方便与快速,两者结合,两种做图方式都掌握才能更好的画出想要的图。


    2.2 实例:绘制各种语言流行性的条形图

      我们现在要画一张各个语言及其占比的条形图(其他具体图形下一章会介绍),首先看数据:

    LanguagePopularity
    Python56%
    SQL39%
    Java34%
    C++34%
    JavaScript29%

      我们可以用面向对象编程绘图,如下代码所示,也可以:

    import matplotlib.pyplot as plt
    import numpy as np
    
    fig=plt.figure()
    ax=fig.add_axes([0.1,0.1,0.8,0.8])
    Language=['Python','SQL','Java','C++','JavaScript']
    pos=np.arange(1,6,1)
    popularity=[56,39,34,34,29]
    
    # 法一:OO编程绘图
    ax.bar(pos,popularity)
    ax.set_xticklabels(languages)
    ax.set_ylabel('% Popularity')
    ax.set_title('Top 5 Languages for Math & Data \nby % popularity on Stack Overflow', alpha=0.8)
    
    #法二:函数式绘图
    # plt.bar(pos,popularity)
    # plt.barlabel()
    # plt.xticks(pos,Language)
    # plt.ylabel('% Popularity')
    # plt.title('Top 5 Languages for Math & Data \nby % popularity on Stack Overflow', alpha=0.8)
    
    
    • 如果我们想要去掉x轴和y轴的所有标签,可以用plt.tick_params(left=False,labelleft=False,right=False,top=False,bottom=False)并把y_label也注释掉。
    • 想要去掉chart的框,可以在spines.values中把他设置为不可见:
    for spine in plt.gca().spines.values():
        spine.set_visible(False)
    
    • 如果需要调整颜色,可以在Axes上用set_color()功能:
    bars = plt.bar(pos, popularity, align='center', linewidth=0, color='lightslategrey')
    bars[0].set_color('#1F77B4')
    
    • 如果要给bar备注数字,可以用Axes在对应的位置上直接添加要写的内容(就像画笔直接在指定位置上写字一样):
    for bar in bars:
        plt.gca().text(bar.get_x() + bar.get_width()/2, bar.get_height() - 5, str(int(bar.get_height())) + '%', 
                     ha='center', color='w', fontsize=11)
    
    • 最后归纳我们的代码:
    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.figure()
    
    languages =['Python', 'SQL', 'Java', 'C++', 'JavaScript']
    pos = np.arange(len(languages))
    popularity = [56, 39, 34, 34, 29]
    
    bars = plt.bar(pos, popularity, align='center', linewidth=0, color='lightslategrey')
    bars[0].set_color('#1F77B4')
    
    plt.xticks(pos, languages, alpha=0.8)
    plt.title('Top 5 Languages for Math & Data \nby % popularity on Stack Overflow', alpha=0.8)
    
    plt.tick_params(top=False, bottom=False, left=False, right=False, labelleft=False, labelbottom=True)
    
    for spine in plt.gca().spines.values():
        spine.set_visible(False)
        
    for bar in bars:
        plt.gca().text(bar.get_x() + bar.get_width()/2, bar.get_height() - 5, str(int(bar.get_height())) + '%', 
                     ha='center', color='w', fontsize=11)
    plt.show()
    

      可以得到以下图片:

    在这里插入图片描述


    总结

    1. 需要分清matplotlib的三层构架:Backend(后端)、Artist(美工)、Scripting(脚本)
    2. 注意Artist层种重要的最复合型实例Figure、Axes。分清subplot与Axes的区别,了解其他各实例之间的关系,例如区分xticks、xticklabel与xlabel
    3. 分清面向对象编程(OO)绘图与函数式绘图(pyplot即plt)对应的语句,面对对象编程中调整多用set,而函数则直接调用class plt的函数即可,明白面对对象编程较函数式编程的灵活性与直观性。
    4. 巧妙运用ax=plt.gca(),从函数式编程中直接获得Axes,进而可以直接从Artist层处理图像。
    展开全文
  • GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便开发工作。? ? ? ?GDI+(Graphics Device Interface plus)是以前...
  • 本代码是一个 Matlab 函数,它提供在给定的 Matlab 图形(例如 2D 和 3D 线、3D 表面等)上以编程方式生成定制数据提示。 该功能非常适合动态(动画)绘图。 用户可以: 1)通过数据索引在绘图上的任何位置设置数据...
  • 关键词: VB VC++ MATLAB DLL 编译 MATLAB Add-inMATLAB是MathWorks公司开发的科学计算环境,具有强大的计算绘图能力,提供大量的函数库、工具箱,几乎涵盖了所有的工程...
  • 【资源内容】:MATLAB特殊绘图图例的设置 【代码特点】:参数化编程、参数可方便更改、代码编程思路清晰、注释明细 【适用对象】:工科生、数学专业、信号处理专业学生等
  • 语法非常简单,编程效率高,易学易懂,方便实用。 没有编程基础的学生也可以很快地编写出程序。 可以直接在Word中被调用,使用相当方便实用。 强大的科学计算能力、卓越的可视化功能、开放式可扩展环境。 不同...
  • pyecharts的绘图原理详解

    千次阅读 多人点赞 2020-06-21 16:35:30
    其实学习任何一门编程语言,最重要的就是学习它的`原理`。在前面我们已经介绍了matplotlib、seaborn、plotly的绘图原理,今天给大家介绍的是,我认为交互效果最好的一个python绘图库,学会了绝对不亏。

    其实学习任何一门编程语言,最重要的就是学习它的原理。在前面我们已经介绍了matplotlib、seaborn、plotly的绘图原理,今天给大家介绍的是,我认为交互效果最好的一个python绘图库,学会了绝对不亏。
    《matplotlib绘图原理详解》
    《seaborn绘图原理详解》
    《plotly绘图原理详解》

    1.pyecharts简介

    Echarts是一个由百度开源的数据可视化工具,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而python是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上了数据可视化时,pyecharts诞生了。

    pyecharts分为v0.5v1两个大版本,v0.5和v1两个版本不兼容,v1是一个全新的版本,因此我们的学习尽量都是基于v1版本进行操作。

    学习任何编程语言,其实官网是最好的老师,下面我们列出了echarts和pyecharts的官网,比较幸运的是,pyecharts是由一个中国人开发的,也存在一个中文网站,这样学习起来就方便多了。
    echarts官网:https://www.echartsjs.com/index.html
    pyecharts官网:https://pyecharts.org/#/zh-cn/intro

    安装:pip install pyecharts

    查看版本:print(pyecharts.version)

    2.pyecharts绘图逻辑

    1)pyecharts绘图逻辑说明

    pyecharts是一个全新的可视化绘图工具,因此它的绘图逻辑完全不同于前面说到的matplotlib、seaborn、plotly。因此你想要学好这个可视化工具,最主要的就是要学会它的绘图逻辑,俗话说:“知己知彼,百战不殆”,你只有了解别人 ,才可以用起来顺手呀。pyecharts的绘图逻辑分为以下几步。

    • ① 选择图表类型;
    • ② 声明图形类并添加数据;
    • ③ 选择全局变量;
    • ④ 显示及保存图表;

    第一步是选择图表类型,基于自己的数据特点,我们看看自己想要绘制那种图形,需要什么图形就导入什么图形;
    “下面我简单列举了几个导入方法”

    from pyecharts.charts import Scatter  # 导入散点图
    from pyecharts.charts import Line     # 导入折线图
    from pyecharts.charts import Pie      # 导入饼图
    from pyecharts.charts import Geo      # 导入地图
    

    第二步是声明图形类并添加数据,什么是图形类呢?其实每一个图形库都是被pyecharts作者封装成为了一个类,这就是所谓的面向对象,我们在使用这个类的时候,需要实例化这个类(观察下面代码)。声明类之后,相当于初始化了一个画布,我们之后的绘图就是在这个画布上进行。接下来要做的就是添加数据,pyecharts中添加数据共有2种方式,一种是普通方式添加数据,一种是链式调用(观察下面代码)来添加数据,后面我会分章节一个个为大家介绍。

    "下面绘制的是:正弦曲线的散点图"
    # 1.选择图表类型:我们使用的是散点图,就直接从charts模块中导入Scatter这个图形。
    from pyecharts.charts import Scatter
    import numpy as np
    
    x = np.linspace(0,2 * np.pi,100)
    y = np.sin(x)
    
    (
     # 注意:使用什么图形,就要实例化该图形的类;
     # 2.我们绘制的是Scatter散点图,就需要实例化散点图类,直接Scatter() 即可;
     Scatter() 
     # 实例化类后,接着就是添加数据,下面这种方式就是使用“链式调用”的方式绘图;
     # 注意:散点图有X、Y轴,因此需要分别给X轴、Y轴添加数据;
     # 3.我们先给X轴添加数据;
     .add_xaxis(xaxis_data=x)
     # 4.我们再给Y轴添加数据;
     .add_yaxis(series_name="这个图是干嘛的",y_axis=y)
    ).render_notebook()
    

    第三步就是设置全局变量,用通俗的话说就是:调节各种各样的参数,把图形变得更好看。常用的有标题配置项、图例配置项、工具配置项、视觉映射配置项、提示框配置项、区域缩放配置项。你也许不知道这几个名词是什么意思,但是不用担心,你首先是学会了如何使用pyecharts绘图后,再慢慢学习这方面的内容。

    • 默认情况下图例配置项和提示框配置项是显示的,其它四个配置项默认情况下是不显示的,需要我们自己设置;

    在这里插入图片描述

    第四步是显示及保存图表,我们这里介绍两种最常用的保存方式,如下所示。

    .render("C:\\Users\\黄伟\\Desktop\\CSDN上传图像\\a.html")
    # 如果不指定路径,就是直接保存在当前工作环境目录下;
    # 如果指定了路径,就是保存到指定的目录下;
    # 注意:最终都是以html格式展示,发给其他任何人都可以直接打开看的;
    
    .render_notebook()
    # 如果我们使用的是jupyter notebook,直接使用这行代码,可以直接显示图片;
    

    3.选择图表类型

    下面列举出现的所有图形都在charts字模块下,我们利用如下代码就可以导入各自对应的图形,在上面的叙述中,我已经列举了部分图形的导入方式。

    • from pyecharts.charts import 函数名

    在这里插入图片描述
    注意:这里我们只列出了部分图形,包括我们后面绘制地图,也都是在pyecharts的子模块charts模块下,我们要记住这句导入相关图形库的代码。

    4.数据添加

    1)如何添加数据呢?

    像散点图、折线图等二维数据图形,它既有X轴,又有Y轴,所以我们不仅要为X轴添加数据,还要为Y轴添加数据。

    • .add_xaxis(xaxis_data=x)为X轴添加数据;
    • .add_yaxis(series_name=’’, y_axis=y)为Y轴添加数据;

    像饼图、地图这样没有X轴、Y轴区分的图形,我们直接使用add()方法添加即可。

    • .add(series_name=’’, data_pair=[(i,j)for i,j in zip(lab,num)]);

    2)pyecharts绘图的两种方式

    上面我们已经说过,pyecharts中绘图有2种方式。第一种方式:普通方式;第二种方式:链式调用。仔细观察下面的演示代码,看看区别在哪里。

    ① 链式调用的方式绘图
    from pyecharts.charts import Line
    import pyecharts.options as opts
    import numpy as np
    
    x = np.linspace(0,2 * np.pi,100)
    y = np.sin(x)
    
    (Line(init_opts=opts.InitOpts(width="700px",height="300px"))
     .add_xaxis(xaxis_data=x)
     .add_yaxis(series_name="绘制线图",y_axis=y,label_opts=opts.LabelOpts(is_show=False))
     .set_global_opts(title_opts=opts.TitleOpts(title="我是标题",subtitle="我是副标题",title_link="https://www.baidu.com/"),
                      tooltip_opts=opts.TooltipOpts(axis_pointer_type="cross"))
    ).render_notebook()
    
    """
    关于全局配置项的代码部分,你可能不懂,现在不懂没什么关系!
    """
    

    结果如下:
    在这里插入图片描述

    ② 普通方式绘图
    from pyecharts.charts import Pie
    import pyecharts.options as opts
    
    num = [110, 136, 108, 48, 111, 112, 103]
    lab = ['哈士奇', '萨摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
    x = [(i, j)for i, j in zip(lab, num)]
    print(x)
    
    pie = Pie(init_opts=opts.InitOpts(width="700px",height="300px"))
    pie.add(series_name='',data_pair=[(i, j)for i, j in zip(lab, num)])
    pie.render_notebook()
    

    结果如下:
    在这里插入图片描述

    3)关于series_name=""的说明

    在添加数据时候,我们可以注意到series_name参数的存在,它是一个字符串。你也看到了,我们可以传递一个空字符串,也可以传递指定字符串,最终的作用有点类似于图例的效果,但这里并不是设置图例。你不需要过多的注意这个参数,只需要牢记一点:这个参数必须有,必须写,哪怕你传递一个空字符串,也要写,因为不写这个参数,会报错。

    5.设置全局配置项

    当我们学会了如何使用pyecharts绘图,并且已经绘制出来了某个图形,此时这个图形并不一定好看。这就需要我们学会使用全局配置项,进行图形参数的调节与设置。

    所有的全局配置项的使用,都是在options这个子模块下,我们在设置全局配置项的时候,记得导入这个模块。这部分涉及到的参数太多太杂,当你觉得某个图形需要怎么改的时候,一般肯定是有对应的参数进行处理的,你要相信你能想到的,别人大神肯定是都想到了,这个时候你就需要学会使用官网,官网很重要!官网很重要!官网很重要!

    • import pyecharts.options as opts
    • 使用options配置项,在 pyecharts中,一切皆Options。
    • 全局配置项可通过调用set_global_options()方法进行设置。

    在这里插入图片描述
    注意:默认情况下图例配置项和提示框配置项是显示的,其他四个配置项默认情况下是不显示的,需要我们自己设置。

    6、显示及保存图表

    • .render()默认将会在当前工作目录下生成一个 render.html 的文件,支持path参数,自定义文件保存位置,如 render(r"F:\my_first_chart.html"),文件直接用浏览器打开。
    • Jupyter Notebook中直接调用.render_notebook()随时随地渲染图表。

    在这里插入图片描述
      

       

    关注微信公众号『数据分析与统计学之美』,后台回复“入群”拉你入群交流哦,气氛杠杠的!看到这里,麻烦您点个再看,让更多朋友看到哦!

    展开全文
  • 译者注:作者以视频通话、屏幕共享与远程控制、共享代码片段、在线IDE与代码托管环境为例介绍远程软件开发和结对编程工具的优劣。有时我希望可以方便的与同事交流一个严重的错误或着讨论技术方案。但异步通信并不...

    原文:Tools for Remote Software Development and Pair Programming
    作者:Brian Cooksey
    翻译:Vincent

    译者注:作者以视频通话、屏幕共享与远程控制、共享代码片段、在线IDE与代码托管环境为例介绍远程软件开发和结对编程工具的优劣。

    有时我希望可以方便的与同事交流一个严重的错误或着讨论技术方案。但异步通信并不总是适用于这些棘手的问题。值得庆幸的是,过去几年来,开发人员纷纷带来了大量的在线协作工具。从屏幕共享到结对编程,总有一个工具可以满足你的协作需求。

    视频通话

    电话沟通虽然很常见,有效性也是众所周知的。在Zapier,通常一个快速的视频电话能帮助你与同事解决复杂的问题。在一个分散的团队中工作,每个人都可以独立应对他们所面临的大多数挑战。如果你使用视频通话工具,在协作的问题上,两名工程师可能只需要花费10分钟,然后由一位工程师来实施完成。

    图片描述

    就目前的选择而言,视频会议软件并不缺乏。我们倾向于使用最方便的Zoom.usSlack的内置呼叫功能。关键是要找到一个可靠的高质量的工具。

    虽然只有音频的通话是可以的,但是高质量的视频可以让你了解同事的肢体语言,这方便他们更有效地了解你们正在讨论的话题。

    屏幕共享+远程控制

    有时候言语并不能表达清楚问题。这时候可以提供一个可靠的屏幕共享工具,将会帮你更加清晰的表达解决方案。我们发现屏幕分享这种通信方式有助于提高用户体验,它可以迭代地诊断错误(尝试输入,查看结果,尝试另一个输入,查看下一个结果),或者一起探索日志数据。该工具也允许屏幕共享的人与远程机器交互,这对解决问题是非常有帮助的。尽管点击可能会延迟,但对于它的价值来说却是不值得一提的。

    图片描述

    我们在Zapier的goto是Zoom.us,它具有内置的屏幕共享,或者Screenhero,同时另一个人也能操控。

    共享代码片段

    你曾经写过一个脚本,并且帮你解决问题?或者你写的脚本帮助你自动完成一个乏味的任务。你的劳动有多大意义?代码并不是真正的添加到源代码控制中,这是一种痛苦的编程手段,但你又不想失去它。

    图片描述

    这时GitHub GistsJSFiddle的代码段共享工具派上用场。您可以保留代码,却不会影响你的程序。在远程开发团队中,这些平台可以作为共享网络驱动器的有效替代品。在Zapier,我们使用Gists来转储代码和设置开发环境。这个空间可以存放从API一个版本的数据格式转移到另一个版本的数据格式的转换文件,许多其他奇怪的代码段,在线摘录,项目链接。

    在线IDE和托管开发环境

    代码编辑器和虚拟化开发环境这两类工具是最令开发人员满意的。近年来,一些公司面临着从本地开发转移到云端的挑战。像Cloud9Codenvy这样的服务提供了一个在线编辑器IDE和一个完全托管的虚拟机或docker容器。 这使得开发人员在有网络的情况下可以在任何地方任何设备上编程。 这也意味着远程结对编程与共享在线工作区一样简单。 你可以编辑相同的文件,单击相同的开发服务器,共享虚拟终端shell,运行测试命令。 这种空间中的一些工具,如Koding,提供了一种将远程卷和ssh安装到云环境中的方法,并允许本地编辑文件,同时仍然在云端托管开发服务器。

    图片描述

    尽管Zapier并没有广泛使用这套工具,但团队中的一些成员将其用于边缘项目和一次性任务。 我们的平台工程师之一本·彼得在Cloud9上开发一个项目,当他需要一个开发环境的时候,他可以通过Chromebook进行编码,这通常不能在本地处理应用程序。 他还发现,将开发环境托管在可寻址域中有助于构建涉及入站请求的功能(例如测试OAuth2流或webhooks)的情况。

    Tunneling

    如果一个完整的托管开发环境比你想的复杂,另一个选择是在本地运行你的堆栈,打开必要的端口,以便其他人实时查看你的工作。有一些付费的解决方案,比如ngrok,你可以用它来完成。他们很快就安装好了,而且不需要你在网络上做任何防火墙设置。

    图片描述

    如果你可以转发网络上的端口,你还可以使用SSH进行访问。 其实设置通道与在ssh命令中包含-L选项是一样简单。您甚至可以通过运行Screen或tmux,将通道转换成一个完整的结对编程会话。 主机启动会话,远程人员加入(屏幕的详细说明)。 通过共享终端来启动编辑器,运行shell命令,然后点击共享的本地服务器。 有时网络延迟可能是一个问题,但它是一个稳定的手段来进行结对编程(结合视频通话)。

    我们在Zapier使用隧道的另一个很巧妙的方法是测试需要从第三方服务获得回调的功能。 当测试类似OAuth2流或入站Webhook的回调URL时,指定本地主机:8000作为回调URL不会始终有效。因此你可以建立一个公共托管的URL,然后在你的机器上进行隧道。

    疯狂的科学家

    让我先说一下,这不是我们在Zapier经常做的事,我也不会推荐它。然而,这个解决方案太有趣了,以致于不得不在这里提出来。

    在Zapier的一次演讲中,一位同事和我在一个项目上遇到问题,我们想要建立一个配对的编程工作站。问题是我们有两台笔记本电脑,没有外接鼠标或键盘,也没有额外的监视器。这一对开发者要做什么?

    我们的解决方案是使用rsync。我们在一个笔记本上安装了一个cron作业,每秒钟运行一个bash脚本:

    1. 从远程笔记本电脑中提取文件,跳过最近在本地系统上修改过的文件。
    2. 将文件从本地笔记本电脑中推送到远程笔记本电脑,保存修改的时间,这样系统就可以同步了。

    只要小心保存,我们可以一起处理文件,并保持对方最新的变化。有两个独立的机器有一个额外的好处,我们中的一个可以更改后端,而另一个更新前端代码,给出真正的并行输出。

    虽然我已经尝试使用触控板进行绘图,但我讨厌它。我无法与同事进行典型的白板会议,但 远程工作的好处是大于坏处的。这些工具背后的技术总是在改善,不断减少了虚拟办公的不足。谁知道“如何合作”的新概念,将来会如何。在几年后,也许我可以戴上虚拟现实头盔,在虚拟白板上用手上的记号笔画画。

    展开全文
  • MATLAB是MathWorks公司开发的科学计算环境,具有强大的计算绘图能力,提供大量的函数库、工具箱,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。但是MATLAB语言是一种解释...
  • Python Gui编程-PyQt5开发与实战 多年软件开发工作经验,丰富的...
  • KotlinLab 用户既可以使用类似 MATLAB 的命令控制台,也可以使用基于 rsyntaxarea 组件的灵活编辑器,从而提供更方便的代码开发。 KotlinLab 支持广泛的绘图工具,可以有效地利用许多强大的 Java 科学库,如 ...
  • Linux下的图形界面编程

    千次阅读 2021-05-11 15:41:34
    Linux下的图形界面编程一、Qt和GTK+虽然Linux下的大多数开发是基于字符界面的,但在Linux环境下也可以开发出美观大方的图形界面。经过多年的发展,目前已经存在多种用于在Linux下开发图形界面程序的开发包,其中...
  • 程序员绘图工具推荐

    2021-05-09 00:18:41
    偶尔讲讲工具,放松一下。现在写技术文章不但要写技术细节,图还得画的好看。对于表达思路和架构来说,图确实挺直观的,这篇文章介绍一下常见的绘图工具。大家可以看自己的喜好自行选择。在早期写 go...
  • 原标题:无所不能的python编程是怎么快速画图的呢?5分钟学会!Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,...
  • KotlinLab用户可以与类似MATLAB的命令控制台一起使用,也可以与基于rsyntaxarea组件的灵活编辑器一起使用,从而提供了更方便的代码开发。 KotlinLab支持广泛的绘图功能,并且可以有效利用许多强大的Java科学库,...
  • visio二次开发——事件编程

    千次阅读 2017-10-18 11:59:04
    visio二次开发——事件编程 首先,创建一个Visio事件侦听类“` /// /// Visio事件侦听类 /// [ComVisible(true)] public sealed class EventSink : IVisEventProc { private Application eventApplication; ...
  • 十七、在画布上绘图 原文:Drawing on Canvas ... 部分参考了《JavaScript 编程精解(第 2 版)》 绘图就是欺骗。 M.C. Escher,由 Bruno Ernst 在《The Magic Mirror of M.C. Escher》中引...
  • 长长见识,编程语言大赏

    千次阅读 2021-11-07 17:29:37
    编程语言会根据编程范式、应用的平台、应用的场景三个维度进行分类,方便大家理解的记忆。 编程范式 依据编程范式编程语言分过程式、面向对象、多范式、函数式、逻辑式。 过程式编程语言 Fortran FORTRAN语言...
  • 一. R语言绘图系统在 R 里,主要有两大底层图形系统,一是 base 图形系统,二是 grid 图形系统。lattice 包与 ggplot2包正是基于 grid 图形系统构建的,它们...
  • Web前端开发师必备的8个工具

    千次阅读 2021-08-26 17:26:36
    Web前端开发需要掌握的几个必备技术是: HTML +_CSS核心、JavaScript、VUE框架 前端的应用非常广泛,基本网站、APP、HTML5小程序等都需要前端开发,所以只要是互联网产品基本都需要前端。 前端程序猿切页面写页面,...
  • GIS应用领域的日趋广泛,让空间数据更新成为了GIS领域的热点问题,图式符号库是空间数据采集系统...克服了传统符号库设计的缺陷,有利于方便快捷地调用符号库,提高了绘图的速度、质量和效率,同时也便于及时更新地物符号。
  • 科研绘图必备软件简介

    千次阅读 2020-03-01 14:01:25
    在科研绘图工作中, 可以利用的软件主要有Al、 Photoshop、 3ds Max等, 一张优秀图像的制作离不开这些软件的综合运用。下面将具体介绍每款软件在科研绘图过程中扮演的角色和发挥的 主要作用。 Al在科研绘图中的...
  • 干货:学编程适合用什么配置的电脑?

    万次阅读 多人点赞 2020-08-31 18:52:26
    下图是由快科技制作的2020年6月笔记本显卡性能排行天梯图,该天梯图中主要有英伟达和amd以及intel的显卡产品,我们可以查看一款笔记本显卡的跑分和发布时间,非常的方便。 从天梯图中可以看到排名前三的显卡是: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,343
精华内容 7,737
关键字:

方便编程开发绘图

友情链接: wodeluntan.rar