{ "info": { "author": "Juergen Hackl", "author_email": "hackl.j@gmx.at", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Multimedia :: Graphics :: Graphics Conversion", "Topic :: Scientific/Engineering :: Visualization" ], "description": "# network2tikz\n\n| Module: | network2tikz |\n|----------|-----------------------------------------|\n| Date: | 07 November 2018 |\n| Authors: | J\u00fcrgen Hackl |\n| Contact: | [hackl.j@gmx.at](mailto:hackl.j@gmx.at) |\n| License: | GNU GPLv3 |\n| Version: | 0.1.8 |\n| | |\n\nThis is `network2tikz`, a Python tool for converting network\nvisualizations into [TikZ](https://www.ctan.org/pkg/pgf)\n([tikz-network](https://github.com/hackl/tikz-network))\nfigures, for native inclusion into your LaTeX documents.\n\n\n`network2tikz` works with Python 3 and supports (currently) the\nfollowing Python network modules:\n\n- [cnet](https://github.com/hackl/cnet)\n- [python-igraph](http://igraph.org/python/)\n- [networkx](https://networkx.github.io/)\n- [pathpy](https://github.com/IngoScholtes/pathpy)\n- default node/edge lists\n\nThe output of `network2tikz` is\nin [tikz-network](https://github.com/hackl/tikz-network), a LaTeX\nlibrary that sits on top of [TikZ](https://www.ctan.org/pkg/pgf),\nwhich allows to visualize and modify the network plot for your\nspecific needs and publications.\n\nBecause you are not only getting an image of your network, but also\nthe LaTeX source file, you can easily post-process the figures\n(e.g. adding drawings, texts, equations,...).\n\nSince *a picture is worth a thousand words* a small example:\n\n```python\nnodes = ['a','b','c','d']\nedges = [('a','b'), ('a','c'), ('c','d'),('d','b')]\ngender = ['f', 'm', 'f', 'm']\ncolors = {'m': 'blue', 'f': 'red'}\n\nstyle = {}\nstyle['node_label'] = ['Alice', 'Bob', 'Claire', 'Dennis']\nstyle['node_color'] = [colors[g] for g in gender]\nstyle['node_opacity'] = .5\nstyle['edge_curved'] = .1\n\nfrom network2tikz import plot\nplot((nodes,edges),'network.tex',**style)\n```\n(see above) gives\n```latex\n\\documentclass{standalone}\n\\usepackage{tikz-network}\n\\begin{document}\n\\begin{tikzpicture}\n\\clip (0,0) rectangle (6,6);\n\\Vertex[x=0.785,y=2.375,color=red,opacity=0.5,label=Alice]{a}\n\\Vertex[x=5.215,y=5.650,color=blue,opacity=0.5,label=Bob]{b}\n\\Vertex[x=3.819,y=0.350,color=red,opacity=0.5,label=Claire]{c}\n\\Vertex[x=4.654,y=2.051,color=blue,opacity=0.5,label=Dennis]{d}\n\\Edge[,bend=-8.531](a)(c)\n\\Edge[,bend=-8.531](c)(d)\n\\Edge[,bend=-8.531](d)(b)\n\\Edge[,bend=-8.531](a)(b)\n\\end{tikzpicture}\n\\end{document}\n```\nand looks like\n\n\"example\"\n\nTweaking the plot is straightforward and can be done as part of your\nLaTeX workflow.\n[The tikz-network manual](https://github.com/hackl/tikz-network/blob/master/manual.pdf)\ncontains multiple examples of how to make your plot look even better.\n\n## Installation\n\n`network2tikz` is [available from the Python Package Index](https://pypi.org/project/network2tikz/), so simply type\n```\npip install -U network2tikz\n```\nto install/update.\n\n## Usage\n\n1. Generate, manipulation, and study of the structure, dynamics, and\n functions of your complex networks as usual, with your preferred\n python module.\n\n2. Instead of the default plot functions (e.g. `igraph.plot()` or\n `networkx.draw()`) invoke `network2tikz` by\n ```python\n plot(G,'mytikz.tex')\n ```\n to store your network visualisation as the TikZ file\n `mytikz.tex`. Load the module with:\n ```python\n from network2tikz import plot\n ```\n **Advanced usage**:\n Of course, you always can improve your plot by manipulating the\n generated LaTeX file, but why not do it directly in Python? To do\n so, all visualization options available\n in [tikz-network](https://github.com/hackl/tikz-network) are also\n implemented in `network2tikz`. The appearance of the plot can be\n modified by keyword arguments (for a detailed explanation, please\n see below).\n ```python\n my_style = {}\n plot(G,'mytikz.tex',**my_style)\n ```\n The arguments follow the options available in\n the [tikz-network](https://github.com/hackl/tikz-network) library\n and are also explained in\n the\n [tikz-network manual](https://github.com/hackl/tikz-network/blob/master/manual.pdf).\n\n Additionally, if you are more interested in the final output and\n not only the `.tex` file, used\n ```python\n plot(G,'mypdf.pdf')\n ```\n to save your plot as a pdf, or\n ```python\n plot(G)\n ```\n to create a temporal plot and directly show the result,\n i.e. similar to the matplotlib function `show()`. Finally, you can\n also create a node and edge list, which can be read and easily\n modified (in a post-processing step)\n with [tikz-network](https://github.com/hackl/tikz-network):\n ```python\n plot(G,'mycsv.csv')\n ```\n3. *Note:*\n > In order to compile the plot, make sure you have\n > installed [tikz-network](https://github.com/hackl/tikz-network)!\n ---\n\n4. Compile the figure or add the contents of `mytikz.tex` into your\n LaTeX source code. With the option `standalone=false` only the TikZ\n figure will be saved, which can then be easily included in your\n LaTeX document via `\\input{/path/to/mytikz.tex}`.\n\n## Simple example\n\nFor illustration purpose, a similar network as in\nthe\n[python-igraph tutorial](http://igraph.org/python/doc/tutorial/tutorial.html) is\nused. If you are using another Python network module, and like to\nfollow this example, please have a look at\nthe\n[provided examples](https://github.com/hackl/network2tikz/tree/master/examples).\n\n\nCreate network object and add some edges.\n\n```python\nimport igraph\nfrom network2tikz import plot\n\nnet = igraph.Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3),\n (5,6), (6,6)],directed=True)\n```\n\nAdding node and edge properties.\n\n```python\nnet.vs[\"name\"] = [\"Alice\", \"Bob\", \"Claire\", \"Dennis\", \"Esther\", \"Frank\", \"George\"]\nnet.vs[\"age\"] = [25, 31, 18, 47, 22, 23, 50]\nnet.vs[\"gender\"] = [\"f\", \"m\", \"f\", \"m\", \"f\", \"m\", \"m\"]\nnet.es[\"is_formal\"] = [False, False, True, True, True, False, True, False,\n False, False]\n```\n\nAlready now the network can be plotted.\n\n```python\nplot(net)\n```\n\"example\"\n\nPer default, the node positions are assigned uniform random. In order\nto create a layout, the layout methods of the network packages can be\nused. Or the position of the nodes can be directly assigned, in form\nof a dictionary, where the key is the node id and the value is a tuple\nof the node position in x and y.\n\n\n```python\nlayout = {0: (4.3191, -3.5352), 1: (0.5292, -0.5292),\n 2: (8.6559, -3.8008), 3: (12.4117, -7.5239),\n 4: (12.7, -1.7069), 5: (6.0022, -9.0323),\n 6: (9.7608, -12.7)}\nplot(net,layout=layout)\n```\n\nThis should open an external pdf viewer showing a visual\nrepresentation of the network, something like the one on the following\nfigure:\n\n\"example\"\n\nWe can simply re-using the previous layout object here, but we also\nspecified that we need a bigger plot (8 x 8 cm) and a larger margin\naround the graph to fit the self loop and potential labels (1 cm).\n\n*Note:*\n> Per default, all size values are based on `cm`, and all line widths\n> are defined in `pt` units. With the general option `units` this can\n> be changed, see below.\n---\n\n```python\nplot(net, layout=layout, canvas=(8,8), margin=1)\n```\n\"example\"\n\n*Note:*\n> Instead of the command `margins` the command `margin` can be\n> used. Also instead of `canvas`, `figure_size` or `bbox` can be\n> used. For more information see table below.\n---\n\nIn to keep the properties of the visual representation of your network\nseparate from the network itself. You can simply set up a Python\ndictionary containing the keyword arguments you would pass to `plot`\nand then use the double asterisk (`**`) operator to pass your specific\nstyling attributes to `plot`:\n\n```python\ncolor_dict = {'m': 'blue', 'f': 'red'}\nvisual_style = {}\n```\n\nNode options\n\n```python\nvisual_style['vertex_size'] = .5\nvisual_style['vertex_color'] = [color_dict[g] for g in net.vs['gender']]\nvisual_style['vertex_opacity'] = .7\nvisual_style['vertex_label'] = net.vs['name']\nvisual_style['vertex_label_position'] = 'below'\n```\n\nEdge options\n\n```python\nvisual_style['edge_width'] = [1 + 2 * int(f) for f in net.es('is_formal')]\nvisual_style['edge_curved'] = 0.1\n```\nGeneral options and plot command.\n\n```python\nvisual_style['layout'] = layout\nvisual_style['canvas'] = (8,8)\nvisual_style['margin'] = 1\n\nplot(net,**visual_style)\n```\n\n\"example\"\n\nBeside showing the network, we can also generate the latex source\nfile, which can be used and modified later on. This is done by adding\nthe output file name with the ending `'.tex'`\n\n```python\nplot(net,'network.tex',**visual_style)\n```\n```latex\n\\documentclass{standalone}\n\\usepackage{tikz-network}\n\\begin{document}\n\\begin{tikzpicture}\n\\clip (0,0) rectangle (8.0,8.0);\n\\Vertex[x=2.868,y=5.518,size=0.5,color=red,opacity=0.7,label=Alice,position=below]{a}\n\\Vertex[x=1.000,y=7.000,size=0.5,color=blue,opacity=0.7,label=Bob,position=below]{b}\n\\Vertex[x=5.006,y=5.387,size=0.5,color=red,opacity=0.7,label=Claire,position=below]{c}\n\\Vertex[x=6.858,y=3.552,size=0.5,color=blue,opacity=0.7,label=Dennis,position=below]{d}\n\\Vertex[x=7.000,y=6.419,size=0.5,color=red,opacity=0.7,label=Esther,position=below]{e}\n\\Vertex[x=3.698,y=2.808,size=0.5,color=blue,opacity=0.7,label=Frank,position=below]{f}\n\\Vertex[x=5.551,y=1.000,size=0.5,color=blue,opacity=0.7,label=George,position=below]{g}\n\\Edge[,lw=1.0,bend=-8.531,Direct](a)(b)\n\\Edge[,lw=1.0,bend=-8.531,Direct](a)(c)\n\\Edge[,lw=3.0,bend=-8.531,Direct](c)(d)\n\\Edge[,lw=3.0,bend=-8.531,Direct](d)(e)\n\\Edge[,lw=3.0,bend=-8.531,Direct](e)(c)\n\\Edge[,lw=1.0,bend=-8.531,Direct](c)(f)\n\\Edge[,lw=3.0,bend=-8.531,Direct](f)(a)\n\\Edge[,lw=1.0,bend=-8.531,Direct](f)(g)\n\\Edge[,lw=1.0,bend=-8.531,Direct](g)(g)\n\\Edge[,lw=1.0,bend=-8.531,Direct](g)(d)\n\\end{tikzpicture}\n\\end{document}\n```\nInstead of the tex file, a node and edge list can be generates, which\ncan also be used with the tikz-network library.\n\n```python\nplot(net,'network.csv',**visual_style)\n```\nThe node list `network_nodes.csv`.\n```text\nid,x,y,size,color,opacity,label,position\na,2.868,5.518,0.5,red,0.7,Alice,below\nb,1.000,7.000,0.5,blue,0.7,Bob,below\nc,5.006,5.387,0.5,red,0.7,Claire,below\nd,6.858,3.552,0.5,blue,0.7,Dennis,below\ne,7.000,6.419,0.5,red,0.7,Esther,below\nf,3.698,2.808,0.5,blue,0.7,Frank,below\ng,5.551,1.000,0.5,blue,0.7,George,below\n```\nThe edge list `network_edges.csv`.\n\n```text\nu,v,lw,bend,Direct\na,b,1.0,-8.531,true\na,c,1.0,-8.531,true\nc,d,3.0,-8.531,true\nd,e,3.0,-8.531,true\ne,c,3.0,-8.531,true\nc,f,1.0,-8.531,true\nf,a,3.0,-8.531,true\nf,g,1.0,-8.531,true\ng,g,1.0,-8.531,true\ng,d,1.0,-8.531,true\n```\n\n## The plot function in detail\n\n```python\nnetwork2tikz.plot(network, filename=None, type=None, **kwds)\n```\n\n### Parameters\n\n- **network** : network object\n\n Network to be drawn. The network can be a 'cnet', 'networkx', 'igraph',\n 'pathpy' object, or a tuple of a node list and edge list.\n\n- **filename** : file, string or None, optional (default = None)\n\n File or filename to save. The file ending specifies the\n output. i.e. is the file ending with '.tex' a tex file will be\n created; if the file ends with '.pdf' a pdf is created; if the file\n ends with '.csv', two csv files are generated (filename_nodes.csv\n and filename_edges.csv). If the filename is a tuple of strings, the\n first entry will be used to name the node list and the second entry\n for the edge list; and if no ending and no type is defined a\n temporary pdf file is compiled and shown.\n\n- **type** : str or None, optional (default = None)\n\n Type of the output file. If no ending is defined trough the filename,\n the type of the output file can be specified by the type\n option. Currently the following output types are supported:\n 'tex', 'pdf', 'csv' and 'dat'.\n\n- **kwds** : keyword arguments, optional (default= no attributes)\n\n Attributes used to modify the appearance of the plot.\n For details see below.\n\n### Keyword arguments for node styles\n\n- ``node_size`` : size of the node. The default is 0.6 cm.\n\n- ``node_color`` : color of the nodes. The default is light blue. Colors can\n be specified either by common color names, or by 3-tuples of floats\n (ranging between 0 and 255 for the R, G and B components).\n\n- ``node_opacity`` : opacity of the nodes. The default is 1. The range of the\n number lies between 0 and 1. Where 0 represents a fully transparent fill\n and 1 a solid fill.\n\n- ``node_label`` : labels drawn next to the nodes.\n\n- ``node_label_position`` : Per default the position of the label is in the\n center of the node. Classical Tikz commands can be used to change the\n position of the label. Instead, using such command, the position can be\n determined via an angle, by entering a number between -360 and 360. The\n origin (0) is the y axis. A positive number change the position counter\n clockwise, while a negative number make changes clockwise.\n\n- ``node_label_distance`` : distance between the node and the label.\n\n- ``node_label_color`` : color of the label.\n\n- ``node_label_size`` : font size of the label.\n\n- ``node_shape`` : shape of the vertices. Possibilities are:\n 'circle', 'rectangle', 'triangle', and any other Tikz shape\n\n- ``node_style`` : Any other Tikz style option or command can be entered via\n the option style. Most of these commands can be found in the \"TikZ and\n PGF Manual\". Contain the commands additional options (e.g. shading =\n ball), then the argument for the style has to be between { } brackets.\n\n- ``node_layer`` : the node can be assigned to a specific layer.\n\n- ``node_label_off`` : is Boolean option which suppress all labels.\n\n- ``node_label_as_id`` : is a Boolean option which assigns the node id as label.\n\n- ``node_math_mode`` : is a Boolean option which transforms the labels into\n mathematical expressions without using the $ $ environment.\n\n- ``node_pseudo`` : is a Boolean option which creates a pseudo node, where only\n the node name and the node coordinate will be provided.\n\n### Keyword arguments for edge styles\n\n- ``edge_width`` : width of the edges. The default unit is point (pt).\n\n- ``edge_color`` : color of the edges. The default is gray. Colors can\n be specified either by common color names, or by 3-tuples of floats\n (ranging between 0 and 255 for the R, G and B components).\n\n- ``edge_opacity`` : opacity of the edges. The default is 1. The range of the\n number lies between 0 and 1. Where 0 represents a fully transparent fill\n and 1 a solid fill.\n\n- ``edge_curved`` : whether the edges should be curved. Positive numbers\n correspond to edges curved in a counter-clockwise direction, negative\n numbers correspond to edges curved in a clockwise direction. Zero\n represents straight edges.\n\n- ``edge_label`` : labels drawn next to the edges.\n\n- ``edge_label_position`` : Per default the label is positioned in between\n both nodes in the center of the line. Classical Tikz commands can be used to\n change the position of the label.\n\n- ``edge_label_distance`` : The label position between the nodes can be\n modified with the distance option. Per default the label is centered\n between both nodes. The position is expressed as the percentage of the\n length between the nodes, e.g. of distance = 0.7, the label is placed at\n 70% of the edge length away of Vertex i.\n\n- ``edge_label_color`` : color of the label.\n\n- ``edge_label_size`` : font size of the label.\n\n- ``edge_style`` : Any other Tikz style option or command can be entered via\n the option style. Most of these commands can be found in the \"TikZ and\n PGF Manual\". Contain the commands additional options (e.g. shading =\n ball), then the argument for the style has to be between { } brackets.\n\n- ``edge_arrow_size`` : arrow size of the edges.\n\n- ``edge_arrow_width`` : width of the arrowhead on the edge.\n\n- ``edge_loop_size`` : modifies the length of the edge. The measure value has\n to be insert together with its units. Per default the loop size is 1 cm.\n\n- ``edge_loop_position`` : The position of the self-loop is defined via the\n rotation angle around the node. The origin (0) is the y axis. A positive\n number change the loop position counter clockwise, while a negative\n number make changes clockwise.\n\n- ``edge_loop_shape`` : The shape of the self-loop is defined by the enclosing\n angle. The shape can be changed by decreasing or increasing the argument\n value of the loop shape option.\n\n- ``edge_directed`` : is a Boolean option which transform edges to directed\n arrows. If the network is already defined as directed network this option\n is not needed, except to turn off the direction for one or more edges.\n\n- ``edge_math_mode`` : is a Boolean option which transforms the labels into\n mathematical expressions without using the $ $ environment.\n\n- ``edge_not_in_bg`` : Per default, the edge is drawn on the background layer\n of the tikz picture. I.e. objects which are created after the edges\n appear also on top of them. To turn this off, the option edge_not_in_bg\n has to be enabled.\n\n### Keyword arguments for layout styles\n\n NOTE: All layout arguments can be entered with or without 'layout_' at the\n beginning, e.g. 'layout_iterations' is equal to 'iterations'\n\n- ``layout`` : dict or string , optional (default = None)\n A dictionary with the node positions on a 2-dimensional plane. The\n key value of the dict represents the node id while the value\n represents a tuple of coordinates (e.g. n = (x,y)). The initial\n layout can be placed anywhere on the 2-dimensional plane.\n\n Instead of a dictionary, the algorithm used for the layout can be defined\n via a string value. Currently, supported are:\n\n * Random layout, where the nodes are uniformly at random placed in the\n unit square. This algorithm can be enabled with the keywords: 'Random',\n 'random', 'rand', or None\n\n * Fruchterman-Reingold force-directed algorithm. In this algorithm, the\n nodes are represented by steel rings and the edges are springs between\n them. The attractive force is analogous to the spring force and the\n repulsive force is analogous to the electrical force. The basic idea is\n to minimize the energy of the system by moving the nodes and changing\n the forces between them. This algorithm can be enabled with the\n keywords: 'Fruchterman-Reingold', 'fruchterman_reingold', 'fr',\n 'spring_layout', 'spring layout', 'FR'\n\n | Algorithms | Keywords |\n |----------------------|------------------------------------------------|\n | Random | Random, random, rand, None |\n | Fruchterman-Reingold | Fruchterman-Reingold, fruchterman_reingold, fr |\n | | spring_layout, spring layout, FR |\n\n- ``force`` : float, optional (default = None)\n Optimal distance between nodes. If None the distance is set to\n 1/sqrt(n) where n is the number of nodes. Increase this value to move\n nodes farther apart.\n\n- ``positions`` : dict or None optional (default = None)\n Initial positions for nodes as a dictionary with node as keys and values\n as a coordinate list or tuple. If None, then use random initial\n positions.\n\n- ``fixed`` : list or None, optional (default = None)\n Nodes to keep fixed at initial position.\n\n- ``iterations`` : int, optional (default = 50)\n Maximum number of iterations taken\n\n- ``threshold``: float, optional (default = 1e-4)\n Threshold for relative error in node position changes. The iteration\n stops if the error is below this threshold.\n\n- ``weight`` : string or None, optional (default = None)\n The edge attribute that holds the numerical value used for the edge\n weight. If None, then all edge weights are 1.\n\n- ``dimension`` : int, optional (default = 2)\n Dimension of layout. Currently, only plots in 2 dimension are supported.\n\n- ``seed`` : int or None, optional (default = None)\n Set the random state for deterministic node layouts. If int, `seed` is\n the seed used by the random number generator, if None, the a random seed\n by created by the numpy random number generator is used.\n\n\n### Keyword arguments for general options\n\n- ``units`` : string or tuple of strings, optional (default = ('cm','pt'))\n Per default, all size values are based on cm, and all line widths are\n defined in pt units. Whit this option the input units can be\n changed. Currently supported are: Pixel 'px', Points 'pt',\n Millimeters 'mm', and Centimeters 'cm'. If a single value is entered as\n unit all inputs have to be defined using this unit. If a tuple of units\n is given, the sizes are defined with the first entry the line widths with\n the second entry.\n\n- ``margins`` : None, int, float or dict, optional (default = None)\n The margins define the 'empty' space from the canvas border. If no\n margins are defined, the margin will be calculated based on the maximum\n node size, to avoid clipping of the nodes. If a single int or float is\n defined all margins using this distances. To define different the margin\n sizes for all size a dictionary with in the form of\n `{'top':2,'left':1,'bottom':2,'right':.5}` has to be used.\n\n- ``canvas`` : None, tuple of int or floats, optional (default = (6,6))\n Canvas or figure_size defines the size of the plot. The values entered as\n a tuple of numbers where the first number is width of the figure and the\n second number is the height of the figure. If the option ``units`` is not\n used the size is specified in cm. Per default the canvas is 6cm x 6cm. \n\n- ``keep_aspect_ratio`` : bool, optional (default = True)\n Defines whether to keep the aspect ratio of the current layout. If\n ``False``, the layout will be rescaled to fit exactly into the\n available area in the canvas (i.e. removed margins). If ``True``, the\n original aspect ratio of the layout will be kept and it will be\n centered within the canvas.\n\n- ``standalone`` : bool, optional (default = True)\n If this option is true, a standalone latex file will be created. i.e. the\n figure can be compiled from this output file. If standalone is false,\n only the tikz environment is stored in the tex file, and can be imported\n in an existing tex file.\n\n- ``clean`` : bool, optional (default = True)\n Whether non-pdf files created that are created during compilation should\n be removed.\n\n- ``clean_tex`` : bool, optional (default = True)\n Also remove the generated tex file.\n\n- ``compiler`` : `str` or `None`, optional (default = None)\n The name of the LaTeX compiler to use. If it is None, cnet will choose a\n fitting one on its own. Starting with ``latexmk`` and then ``pdflatex``.\n\n- ``compiler_args`` : `list` or `None`, optional (default = None)\n Extra arguments that should be passed to the LaTeX compiler. If this is\n None it defaults to an empty list.\n\n- ``silent`` : bool, optional (default = True)\n Whether to hide compiler output or not.\n\n### Keyword naming convention\n\nIn the style dictionary multiple keywords can be used to address\nattributes. These keywords will be converted to an unique key word,\nused in the remaining code. This allows to keep the keywords used in\n`igraph`.\n\n\n| keys | other valid keys |\n|-----------|-----------------------------------|\n| node | vertex, v, n |\n| edge | link, l, e |\n| margins | margin |\n| canvas | bbox, figure_size |\n| units | unit |\n| fixed | fixed_nodes, fixed_vertices, |\n| | fixed_n, fixed_v |\n| positions | initial_positions, node_positions |\n| | vertex_positions, n_positions, |\n| | v_positions |\n\n\n## TODO\n\n- [ ] Add multi-layer handler\n\n## Changelog\n| Version | Date | Changes |\n|---------|------------|-------------------------------------------------|\n| 0.1.0 | 2018-05-21 | initial commit to github |\n| 0.1.1 | 2018-05-22 | initial commit to PyPI |\n| 0.1.2 | 2018-05-27 | fixed Windows compiling problem |\n| 0.1.3 | 2018-07-17 | fixed layout problem when coordinates are zero |\n| 0.1.4 | 2018-07-29 | added some layouts algorithms |\n| 0.1.5 | 2018-07-30 | allow to add multiple networks to the same plot |\n| 0.1.6 | 2018-08-07 | some smaller bug fixes |\n| 0.1.7 | 2018-11-05 | fixed error with pathpy and csv export |\n| 0.1.8 | 2018-11-07 | fixed cnet and pathpy dependencies |\n| | | |\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://pypi.org/project/network2tikz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/hackl/network2tikz", "keywords": "", "license": "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "maintainer": "", "maintainer_email": "", "name": "network2tikz", "package_url": "https://pypi.org/project/network2tikz/", "platform": "", "project_url": "https://pypi.org/project/network2tikz/", "project_urls": { "Download": "https://pypi.org/project/network2tikz", "Homepage": "https://github.com/hackl/network2tikz" }, "release_url": "https://pypi.org/project/network2tikz/0.1.8/", "requires_dist": [ "numpy" ], "requires_python": "", "summary": "A converter that takes a network (cnet, igraph, networkx, pathpy, ...) and creates a tikz-network for smooth integration into LaTeX.", "version": "0.1.8" }, "last_serial": 4460356, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "61be20e81e494bd7cf00560581fa467e", "sha256": "a62f2da3bd357f1e7a53232a0bc1781b3d5d8dc50a4c76fa7b31bef898f7ebb0" }, "downloads": -1, "filename": "network2tikz-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "61be20e81e494bd7cf00560581fa467e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31341, "upload_time": "2018-05-22T14:28:24", "url": "https://files.pythonhosted.org/packages/40/12/7784c8b8744ebf6f0169d5c8b6f510606a7e88fc1f61edd865507451f5f3/network2tikz-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a8b7f302c6c559008c4abd3965475ed", "sha256": "c0e49a81e12a8799ee08abf174e4dca063ea74bae329adf2ce43bd73a7c30497" }, "downloads": -1, "filename": "network2tikz-0.1.1.tar.gz", "has_sig": false, "md5_digest": "5a8b7f302c6c559008c4abd3965475ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31178, "upload_time": "2018-05-22T14:28:25", "url": "https://files.pythonhosted.org/packages/e8/dc/a9f6608384be19690e2eee4be0d8479d0c86a0c331db858077924093a6f5/network2tikz-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "db4a6cd4e80781b313cacf6816a2a6fe", "sha256": "b498facb46d81d97a78b5d7ce70a40d8dc0daa079068c7be8508e5e14a6755a3" }, "downloads": -1, "filename": "network2tikz-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "db4a6cd4e80781b313cacf6816a2a6fe", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31117, "upload_time": "2018-05-29T05:55:47", "url": "https://files.pythonhosted.org/packages/c1/6e/22553c565b5ea7ec846af18633a3dbd160ce2f2565f81632dbf7ec3861a1/network2tikz-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "241d7a7d70bc83e4c4944239c5b99b9d", "sha256": "cd51de984da5ef2ff21eacde062139a7d551c733f0828d2908fb5f6903750c81" }, "downloads": -1, "filename": "network2tikz-0.1.2.tar.gz", "has_sig": false, "md5_digest": "241d7a7d70bc83e4c4944239c5b99b9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30817, "upload_time": "2018-05-29T05:55:49", "url": "https://files.pythonhosted.org/packages/80/85/aade7f2badfcb82fa1fe9bd3a2cfecb96af64ac60080c779913d0572c9bb/network2tikz-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "d5bdca592189fd9b92bc1c133f1dc801", "sha256": "d676e4b5c2cb9cf431a7ce131e9b4350b919e850f1dc38a177c14b78e324aeeb" }, "downloads": -1, "filename": "network2tikz-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d5bdca592189fd9b92bc1c133f1dc801", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31197, "upload_time": "2018-07-17T11:18:25", "url": "https://files.pythonhosted.org/packages/e9/47/4f46a5dbdcb099b3808130e5b7e75492070ee58fb6794c767d642b04fa77/network2tikz-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a6abe08dff51c6334f4de11833a4176", "sha256": "732bfe99d8a7e2dc247739d623ec2b69970e471019ac8d464646a20d671bfbe6" }, "downloads": -1, "filename": "network2tikz-0.1.3.tar.gz", "has_sig": false, "md5_digest": "3a6abe08dff51c6334f4de11833a4176", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30977, "upload_time": "2018-07-17T11:18:27", "url": "https://files.pythonhosted.org/packages/8a/80/62fa422800b70c43199013f18454cee8eb4385884a9c638b4432ede1e306/network2tikz-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "6bd21f6c37d85f310b2f8ed834e47405", "sha256": "00190a0b42779fe0c247453d1ebdf04192e94e5ec8952a97942454f595d05e68" }, "downloads": -1, "filename": "network2tikz-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6bd21f6c37d85f310b2f8ed834e47405", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 208909, "upload_time": "2018-07-29T14:20:49", "url": "https://files.pythonhosted.org/packages/96/4c/3f724a023bc7e2e040488c68fd7d7a0daefa84d3a5aa7bf39bdde426be1a/network2tikz-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a6726151b4fa7847f641643f8729f21a", "sha256": "cd2f4c290ee52ded8a244ace8607fde407fdadd0b9e7208c9c16602d1d5df93a" }, "downloads": -1, "filename": "network2tikz-0.1.4.tar.gz", "has_sig": false, "md5_digest": "a6726151b4fa7847f641643f8729f21a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 161857, "upload_time": "2018-07-29T14:20:51", "url": "https://files.pythonhosted.org/packages/64/b3/41ac10f2e96452b1b45bb71e1000edcc91b810ed2913dba1f53abdd223b1/network2tikz-0.1.4.tar.gz" } ], "0.1.4a0": [ { "comment_text": "", "digests": { "md5": "af529046efb1743dc7da34d031eff80b", "sha256": "2182991330f35db7a382594f3240a37a6a7580d328b03613de3fa1961641010a" }, "downloads": -1, "filename": "network2tikz-0.1.4a0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "af529046efb1743dc7da34d031eff80b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 208938, "upload_time": "2018-07-30T08:43:05", "url": "https://files.pythonhosted.org/packages/f3/21/c411cd7791035024c2aaeeabfa079f90b860cf5ac59e602cfbd7351e9be3/network2tikz-0.1.4a0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc5c46b3561e7bab21345283845cc90b", "sha256": "a19ff73540fbb8db57a700479ca802aba9ab4dab678024db362dc8b9bb88dac4" }, "downloads": -1, "filename": "network2tikz-0.1.4a0.tar.gz", "has_sig": false, "md5_digest": "fc5c46b3561e7bab21345283845cc90b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 161906, "upload_time": "2018-07-30T08:43:06", "url": "https://files.pythonhosted.org/packages/9d/fb/689874e8914a10b7da4482c1434888ce2c4852c9306a799e41fe8fc17361/network2tikz-0.1.4a0.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "8378c67b6378a39b52cccf33796578b8", "sha256": "5073cb28e348270980d0e14733997f91adaa7c7ef34880f5c218a7a748f88ce8" }, "downloads": -1, "filename": "network2tikz-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8378c67b6378a39b52cccf33796578b8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 209371, "upload_time": "2018-07-30T14:16:01", "url": "https://files.pythonhosted.org/packages/94/1f/8122609661b647e8415df9b5ce06d7190976295f16355254a459c4695eef/network2tikz-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "67d11903707aa5305f2c1d4a081e7a67", "sha256": "82415fb778a7ccfe50c1f88597c9620f8a338f7b51323652ab4d272b430c3dc0" }, "downloads": -1, "filename": "network2tikz-0.1.5.tar.gz", "has_sig": false, "md5_digest": "67d11903707aa5305f2c1d4a081e7a67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162534, "upload_time": "2018-07-30T14:16:02", "url": "https://files.pythonhosted.org/packages/a0/c2/dbd6339249bff08b6d09a34f7e1fa8099596f07e858b400eb8bf72679d84/network2tikz-0.1.5.tar.gz" } ], "0.1.5a0": [ { "comment_text": "", "digests": { "md5": "223825660cc5eb5a84913e98de7b00d4", "sha256": "596601d1532e7a8eb33d4b700e57e53f1a8917e7076b0ae636d9620396b147be" }, "downloads": -1, "filename": "network2tikz-0.1.5a0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "223825660cc5eb5a84913e98de7b00d4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 209394, "upload_time": "2018-08-07T10:03:41", "url": "https://files.pythonhosted.org/packages/56/82/ecde0a98947a4f5d888573382d743d672e9266d3fb79d3a497bd203f7789/network2tikz-0.1.5a0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7e05ec209f867504267a959cffde37f3", "sha256": "4516c99dd6de0254458bbfed0b6f2214f263503fc01883f71502cfa70f640cdf" }, "downloads": -1, "filename": "network2tikz-0.1.5a0.tar.gz", "has_sig": false, "md5_digest": "7e05ec209f867504267a959cffde37f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162595, "upload_time": "2018-08-07T10:03:42", "url": "https://files.pythonhosted.org/packages/2a/a9/74a5c5b0217b9a2d9760c5f1bb865ece9d5cb017a6e45b326f82d250f091/network2tikz-0.1.5a0.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "7309dec357c3ba68cc9d8fd0c170a721", "sha256": "93f5d902b0ad8f19d4cb5a89e97d42f0e2bf40b920737a81cb57faeca7c90815" }, "downloads": -1, "filename": "network2tikz-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7309dec357c3ba68cc9d8fd0c170a721", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 209407, "upload_time": "2018-08-07T10:37:25", "url": "https://files.pythonhosted.org/packages/f9/bb/c8fc3972aada0ce69e17c9404bed2196d69454a059768e53a2383e8e723e/network2tikz-0.1.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0bb505e84e980db4328193b92c6477ba", "sha256": "eb7ddf0f2e317e773b79d669f3c010db19b785cf17dc9383b571754d2b0b1fb7" }, "downloads": -1, "filename": "network2tikz-0.1.6.tar.gz", "has_sig": false, "md5_digest": "0bb505e84e980db4328193b92c6477ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162624, "upload_time": "2018-08-07T10:37:27", "url": "https://files.pythonhosted.org/packages/fd/0c/9be40fd3815739c96e0b685fb5c3610f7232194e79c4e67ae9536969f116/network2tikz-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "b4766c4a5f590a5007f8a16f2bb2b938", "sha256": "e93dc2e2b2a719db78b77ce4afb1eab89e9e1b7c2949d715bc7dd49c8f84bdeb" }, "downloads": -1, "filename": "network2tikz-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b4766c4a5f590a5007f8a16f2bb2b938", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 209430, "upload_time": "2018-11-05T09:50:51", "url": "https://files.pythonhosted.org/packages/7e/0c/2ef1c6705e3a429b9b4a78c37e1a28a2f4af758fb39922612d3c6b3a8aa1/network2tikz-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5abb7c23aea7bdddedb518b8d7ab402a", "sha256": "33d4d31780ae28bffff3751a7fb2fc5898ea428ab58f467aa7805a5ac27fde6a" }, "downloads": -1, "filename": "network2tikz-0.1.7.tar.gz", "has_sig": false, "md5_digest": "5abb7c23aea7bdddedb518b8d7ab402a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 162664, "upload_time": "2018-11-05T09:50:54", "url": "https://files.pythonhosted.org/packages/74/ad/e718198b49753f85aa86b1a0f23d12fbf0a9e424278d21c8dc301fae1515/network2tikz-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "828faa6ed337d263e166b2c05c8947e7", "sha256": "eaef9f6b4573d35121da58ed3cf0d18355d89f692bd774fa6b7a05b0eecd375a" }, "downloads": -1, "filename": "network2tikz-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "828faa6ed337d263e166b2c05c8947e7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 41107, "upload_time": "2018-11-07T07:28:52", "url": "https://files.pythonhosted.org/packages/90/e0/f9cb0821acef7b32f2f1474e2efda151d1b04707d9dd29701f9801fc2cfc/network2tikz-0.1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "14748db1073a8c2ccdff78e71f97c472", "sha256": "e2677452362bfaa5f5977c0e708755cd2e908198335f88ccb2d2b4417648705b" }, "downloads": -1, "filename": "network2tikz-0.1.8.tar.gz", "has_sig": false, "md5_digest": "14748db1073a8c2ccdff78e71f97c472", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42196, "upload_time": "2018-11-07T07:28:54", "url": "https://files.pythonhosted.org/packages/c6/db/bad6add91db3cd1ac9bab4a4a337ccf8014a6601d61d5947d9b8bc192617/network2tikz-0.1.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "828faa6ed337d263e166b2c05c8947e7", "sha256": "eaef9f6b4573d35121da58ed3cf0d18355d89f692bd774fa6b7a05b0eecd375a" }, "downloads": -1, "filename": "network2tikz-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "828faa6ed337d263e166b2c05c8947e7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 41107, "upload_time": "2018-11-07T07:28:52", "url": "https://files.pythonhosted.org/packages/90/e0/f9cb0821acef7b32f2f1474e2efda151d1b04707d9dd29701f9801fc2cfc/network2tikz-0.1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "14748db1073a8c2ccdff78e71f97c472", "sha256": "e2677452362bfaa5f5977c0e708755cd2e908198335f88ccb2d2b4417648705b" }, "downloads": -1, "filename": "network2tikz-0.1.8.tar.gz", "has_sig": false, "md5_digest": "14748db1073a8c2ccdff78e71f97c472", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42196, "upload_time": "2018-11-07T07:28:54", "url": "https://files.pythonhosted.org/packages/c6/db/bad6add91db3cd1ac9bab4a4a337ccf8014a6601d61d5947d9b8bc192617/network2tikz-0.1.8.tar.gz" } ] }