{"id":13408087,"url":"https://github.com/joferkington/mplstereonet","last_synced_at":"2025-04-05T08:03:50.809Z","repository":{"id":51411888,"uuid":"4018357","full_name":"joferkington/mplstereonet","owner":"joferkington","description":"Stereonets for matplotlib","archived":false,"fork":false,"pushed_at":"2023-11-25T00:11:02.000Z","size":7201,"stargazers_count":182,"open_issues_count":24,"forks_count":60,"subscribers_count":26,"default_branch":"master","last_synced_at":"2024-05-09T14:36:02.555Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joferkington.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2012-04-13T17:16:28.000Z","updated_at":"2024-04-26T08:24:02.000Z","dependencies_parsed_at":"2024-01-14T17:04:15.914Z","dependency_job_id":"c87a4f52-bcd3-4679-8229-a87af0cfe730","html_url":"https://github.com/joferkington/mplstereonet","commit_stats":{"total_commits":217,"total_committers":7,"mean_commits":31.0,"dds":"0.17972350230414746","last_synced_commit":"b7a5255fefaa45987581fe5a4321b2ab5737820f"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joferkington%2Fmplstereonet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joferkington%2Fmplstereonet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joferkington%2Fmplstereonet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joferkington%2Fmplstereonet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joferkington","download_url":"https://codeload.github.com/joferkington/mplstereonet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247305932,"owners_count":20917208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-30T20:00:50.676Z","updated_at":"2025-04-05T08:03:50.791Z","avatar_url":"https://github.com/joferkington.png","language":"Python","funding_links":[],"categories":["Software","Structural Geology and Tectonics"],"sub_categories":["Geology and Geophysics","Structural geology","Structural Geology","Repositories"],"readme":"mplstereonet\n============\n``mplstereonet`` provides lower-hemisphere equal-area and equal-angle stereonets\nfor matplotlib.\n\n.. image:: http://joferkington.github.io/mplstereonet/images/equal_area_equal_angle_comparison.png\n    :alt: Comparison of equal angle and equal area stereonets.\n    :align: center\n    :target: https://github.com/joferkington/mplstereonet/blob/master/examples/equal_area_equal_angle_comparison.py\n\n\nInstall\n-------\n\n``mplstereonet`` can be installed from PyPi using ``pip`` by::\n\n    pip install mplstereonet\n\nAlternatively, you can download the source and install locally using (from the\nmain directory of the repository)::\n\n    python setup.py install\n\nIf you're planning on developing ``mplstereonet`` or would like to experiment\nwith making local changes, consider setting up a development installation so\nthat your changes are reflected when you import the package::\n\n    python setup.py develop\n\nBasic Usage\n-----------\nIn most cases, you'll want to ``import mplstereonet`` and then make an axes\nwith ``projection=\"stereonet\"`` (By default, this is an equal-area stereonet).\nAlternately, you can use ``mplstereonet.subplots``, which functions identically\nto ``matplotlib.pyplot.subplots``, but creates stereonet axes.\n\nAs an example::\n\n    import matplotlib.pyplot as plt\n    import mplstereonet\n\n    fig = plt.figure()\n    ax = fig.add_subplot(111, projection='stereonet')\n\n    strike, dip = 315, 30\n    ax.plane(strike, dip, 'g-', linewidth=2)\n    ax.pole(strike, dip, 'g^', markersize=18)\n    ax.rake(strike, dip, -25)\n    ax.grid()\n\n    plt.show()\n\n.. image:: http://joferkington.github.io/mplstereonet/images/basic.png\n    :alt: A basic stereonet with a plane, pole to the plane, and rake along the plane\n    :align: center\n    :target: https://github.com/joferkington/mplstereonet/blob/master/examples/basic.py\n    \nPlanes, lines, poles, and rakes can be plotted using axes methods (e.g.\n``ax.line(plunge, bearing)`` or ``ax.rake(strike, dip, rake_angle)``).\n\nAll planar measurements are expected to follow the right-hand-rule to indicate\ndip direction. As an example, 315/30S would be 135/30 following the right-hand\nrule.\n\nDensity Contouring\n------------------\n``mplstereonet`` also provides a few different methods of producing contoured\norientation density diagrams.\n\nThe ``ax.density_contour`` and ``ax.density_contourf`` axes methods provide density\ncontour lines and filled density contours, respectively.  \"Raw\" density grids\ncan be produced with the ``mplstereonet.density_grid`` function.\n\nAs a basic example::\n\n    import matplotlib.pyplot as plt\n    import numpy as np\n    import mplstereonet\n    \n    fig, ax = mplstereonet.subplots()\n    \n    strike, dip = 90, 80\n    num = 10\n    strikes = strike + 10 * np.random.randn(num)\n    dips = dip + 10 * np.random.randn(num)\n    \n    cax = ax.density_contourf(strikes, dips, measurement='poles')\n                              \n    ax.pole(strikes, dips)\n    ax.grid(True)\n    fig.colorbar(cax)\n    \n    plt.show()\n\n.. image:: http://joferkington.github.io/mplstereonet/images/contouring.png\n    :alt: Orientation density contours.\n    :align: center\n    :target: https://github.com/joferkington/mplstereonet/blob/master/examples/contouring.py\n\n\nBy default, a modified Kamb method with exponential smoothing [Vollmer1995]_ is\nused to estimate the orientation density distribution. Other methods (such as\nthe \"traditional\" Kamb [Kamb1956]_ and \"Schmidt\" (a.k.a. 1%) methods) are\navailable as well. The method and expected count (in standard deviations) can\nbe controlled by the ``method`` and ``sigma`` keyword arguments, respectively.\n\n.. image:: http://joferkington.github.io/mplstereonet/images/contour_angelier_data.png\n    :alt: Orientation density contours.\n    :align: center\n    :target: https://github.com/joferkington/mplstereonet/blob/master/examples/contour_angelier_data.py\n\nUtilities\n---------\n``mplstereonet`` also includes a number of utilities to parse structural\nmeasurements in either quadrant or azimuth form such that they follow the\nright-hand-rule. \n\nFor an example, see parsing_example.py_::\n\n    Parse quadrant azimuth measurements\n    \"N30E\" --\u003e 30.0\n    \"E30N\" --\u003e 60.0\n    \"W10S\" --\u003e 260.0\n    \"N 10 W\" --\u003e 350.0\n    \n    Parse quadrant strike/dip measurements.\n    Note that the output follows the right-hand-rule.\n    \"215/10\" --\u003e Strike: 215.0, Dip: 10.0\n    \"215/10E\" --\u003e Strike: 35.0, Dip: 10.0\n    \"215/10NW\" --\u003e Strike: 215.0, Dip: 10.0\n    \"N30E/45NW\" --\u003e Strike: 210.0, Dip: 45.0\n    \"E10N   20 N\" --\u003e Strike: 260.0, Dip: 20.0\n    \"W30N/46.7 S\" --\u003e Strike: 120.0, Dip: 46.7\n    \n    Similarly, you can parse rake measurements that don't follow the RHR.\n    \"N30E/45NW 10NE\" --\u003e Strike: 210.0, Dip: 45.0, Rake: 170.0\n    \"210 45 30N\" --\u003e Strike: 210.0, Dip: 45.0, Rake: 150.0\n    \"N30E/45NW raking 10SW\" --\u003e Strike: 210.0, Dip: 45.0, Rake: 10.0\n\nAdditionally, you can find plane intersections and make other calculations by\ncombining utility functions.  See plane_intersection.py_ and\nparse_anglier_data.py_ for examples.\n\nAnalysis\n--------\n\n``mplstereonet`` contains orientation data analysis methods, as well as\nplotting functionality.  For example, you can `fit planes to girdles\n\u003chttps://mplstereonet.readthedocs.io/en/latest/examples/fit_girdle_example.html\u003e`_\nor `fit a pole to points\n\u003chttps://mplstereonet.readthedocs.io/en/latest/mplstereonet.html#mplstereonet.fit_pole\u003e`_,\nidentify different `modes of conjugate sets of faults\n\u003chttps://mplstereonet.readthedocs.io/en/latest/examples/kmeans_example.html\u003e`_,\nor calculate `flattening values for Flinn plots\n\u003chttps://mplstereonet.readthedocs.io/en/latest/mplstereonet.html#mplstereonet.eigenvectors\u003e`_.\n\nFull Documentation\n------------------\n\nFull documentation is available at https://mplstereonet.readthedocs.io/en/latest/mplstereonet.html\n\nReferences\n----------\n\n.. [Kamb1956] Kamb, 1959. Ice Petrofabric Observations from Blue Glacier,\n       Washington, in Relation to Theory and Experiment. Journal of\n       Geophysical Research, Vol. 64, No. 11, pp. 1891--1909.\n\n.. [Vollmer1995] Vollmer, 1995. C Program for Automatic Contouring of Spherical\n       Orientation Data Using a Modified Kamb Method. Computers \u0026\n       Geosciences, Vol. 21, No. 1, pp. 31--49.\n\n.. _parsing_example.py: https://mplstereonet.readthedocs.io/en/latest/examples/parsing_example.html\n\n.. _plane_intersection.py: https://mplstereonet.readthedocs.io/en/latest/examples/plane_intersection.html\n\n.. _parse_anglier_data.py: https://mplstereonet.readthedocs.io/en/latest/examples/parse_angelier_data.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoferkington%2Fmplstereonet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoferkington%2Fmplstereonet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoferkington%2Fmplstereonet/lists"}