{"id":17477701,"url":"https://github.com/abdur-rahmaanj/hooman","last_synced_at":"2025-04-13T02:23:54.914Z","repository":{"id":40357627,"uuid":"266988350","full_name":"Abdur-rahmaanJ/hooman","owner":"Abdur-rahmaanJ","description":"~ pygame for humans (pip install hooman) (p5js api) (68k+ downloads)","archived":false,"fork":false,"pushed_at":"2024-10-27T21:09:10.000Z","size":41410,"stargazers_count":53,"open_issues_count":11,"forks_count":44,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-06T04:41:41.322Z","etag":null,"topics":["clock","game","hacktoberfest","pygame","python","simulation","ui","wrapper"],"latest_commit_sha":null,"homepage":"https://abdur-rahmaanj.github.io/hooman/gallery","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/Abdur-rahmaanJ.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-26T08:34:37.000Z","updated_at":"2025-03-24T21:20:40.000Z","dependencies_parsed_at":"2022-07-08T17:47:58.205Z","dependency_job_id":"93511ec6-a8ce-48ae-b95e-f95da17d8514","html_url":"https://github.com/Abdur-rahmaanJ/hooman","commit_stats":{"total_commits":270,"total_committers":46,"mean_commits":5.869565217391305,"dds":0.6222222222222222,"last_synced_commit":"e6625810af377f7bcdda8b55cf1d6fc597352d48"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abdur-rahmaanJ%2Fhooman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abdur-rahmaanJ%2Fhooman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abdur-rahmaanJ%2Fhooman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Abdur-rahmaanJ%2Fhooman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Abdur-rahmaanJ","download_url":"https://codeload.github.com/Abdur-rahmaanJ/hooman/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248655030,"owners_count":21140416,"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":["clock","game","hacktoberfest","pygame","python","simulation","ui","wrapper"],"created_at":"2024-10-18T20:09:03.166Z","updated_at":"2025-04-13T02:23:54.878Z","avatar_url":"https://github.com/Abdur-rahmaanJ.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n\u003cp align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://github.com/Abdur-rahmaanJ/hooman\"\u003e\u003cimg src=\"https://github.com/Abdur-rahmaanJ/hooman/raw/master/assets/hooman.png\" alt=\"Hooman\"\u003e\u003c/a\u003e\n  \u003cbr\u003e\n\u003c/p\u003e\n\n\n# hooman [![Downloads](https://static.pepy.tech/badge/hooman)](https://pepy.tech/project/hooman) ![PyPI](https://img.shields.io/pypi/v/hooman)\n\n~ pygame for humans [ [docs](https://github.com/Abdur-rahmaanJ/hooman#docs) | [gallery](https://abdur-rahmaanj.github.io/hooman/gallery) ]\n\nSupports pygame / pygame-ce\n\n```\npip install hooman\n```\n\ndemos\n\n```\npython -m hooman.demos # see all demos\npython -m hooman.demos.sliders # select one\n```\n\njoin discord: https://discord.gg/Q23ATve\n\nThe package for clearer, shorter and cleaner PyGame codebases!\n\nFeatured by [r/Pygame](https://www.reddit.com/r/pygame/)\n\nFun fact: Codementor.io [tweeted about Hooman](https://twitter.com/CodementorIO/status/1306295790441246725?s=20) tagged #LearnPython #100DaysOfCode\n\n# Tutorials\n\n- [Building A Color Picker](https://dev.to/abdurrahmaanj/building-a-color-picker-in-pygame-using-hooman-307m)\n- [Display most frequent words using PyGame](https://www.pythonkitchen.com/display-most-frequent-words-python-pygame/)\n- [Realtime CPU monitor using PyGame](https://www.pythonkitchen.com/realtime-cpu-monitor-using-pygame/)\n- [Android's Lock Screen in Pygame](https://www.codementor.io/@abdurrahmaanj/android-s-lock-screen-pattern-in-pygame-1y12ejsg3s)\n\n\n# Getting Started\n\nhooman makes developing with pygame easy by having everything in 1 object!\n\n```python\nfrom hooman import Hooman\n\nhapi = Hooman(width, height)\n\nwhile hapi.is_running:\n\n    hapi.flip_display()\n    hapi.event_loop()\n```\n\n# Playground\n\nYou can use the *[jurigged](https://github.com/breuleux/jurigged)* package to reload your code while you update your file. The latter will give you a quick visual feedback while coding.\n\n## Example\n\n```\njurigged hooman/hooman/demos/sketch_pad.py\n```\n# Contributing Notes\n\n-   **Demos**: Include your name and Github URL in a docstring at the top of the demo file\n\n# [features](new_features.md)\n\n- record video\n- screenshot\n- integrate with other pygame codes\n- save to svg\n- keyword argument same as dictionary\n\n# Docs\n\n## Attributes\n\n## .WIDTH\n\n-   `hapi.WIDTH` is gives the width of the screen\n\n## .HEIGHT\n\n-   `hapi.HEIGHT` is gives the height of the screen\n\n## .is_running\n\n-   if loop is running\n\n## .screen\n\nstill exposes a screen to draw with any pygame shape\n\n`pygame.draw.arc(hapi.screen, (255, 0, 0), [80,10,200,200], hapi.PI, hapi.PI/2, 2)`\n\n## Constants\n\n## .PI\n\nThe value of pi as provided by the maths module\n\n`pygame.draw.arc(hapi.screen, (255, 0, 0), [80,10,200,200], hapi.PI, hapi.PI/2, 2)`\n\n## Colors, strokes \u0026 Fill\n\n## .fill\n\n-   used for colouring next shapes\n-   `hapi.fill((100, 100, 100))` for r g b\n-   `hapi.fill(100)` same as `hapi.fill((100, 100, 100))`\n\n## .stroke\n\n-   used to set color of next shapes' outlines\n-   `hapi.stroke((100, 100, 100))` for r g b\n-   `hapi.stroke(100)` same as `hapi.stroke((100, 100, 100))`\n\n## .background\n\n-   used to set background color of screen\n-   `hapi.background((100, 100, 100))` for r g b\n-   `hapi.background(100)` same as `hapi.background((100, 100, 100))`\n\n## .set_background\n\n-   used to have the background drawn every frame automatically\n-   `hapi.set_background((100, 100, 100))`\n-   same as `hapi.background((100, 100, 100))`\n\n## .color\n\nsame as\n\n```\n{\n    'red': (255, 0, 0),\n    'green': (0, 255, 0),\n    'blue': (0, 0, 255),\n    'black': (0, 0, 0),\n    'white': (255, 0, 0),\n    'yellow': (255, 255, 0),\n    'grey': (100, 100, 100)\n}\n```\n\nalso `.colors`, `.colours`, `.colour` same\n\n## Size\n\n## .stroke_size\n\n-   used to control thickness of lines and outlines\n-   `hapi.stroke_size(size)` where size is an int\n\n## .no_stroke\n\n-   set lines and outlines thickness to 0\n-   `hapi.no_stroke()`\n-   same as `hapi.stroke_size(0)`\n\n## .font_size\n\n-   sets font size of text\n-   `hapi.font_size(12)`\n\n## Basic elements\n\n## .rect\n\n`hapi.rect(x, y, width, height)`\n\n-   x - x coordinate\n-   y - y coordinate\n\n## .ellipse\n\n`hapi.ellipse(x, y, width, height)`\n\n-   x - x coordinate\n-   y - y coordinate\n\n## .line\n\n`hapi.line(x1, y1, x2, y2)`\n\n-   x1 - x coordinate of first point\n-   y1 - y coordinate of first point\n-   x2 - x coordinate of second point\n-   y2 - y coordinate of second point\n\n## .text\n\n`.text(letters, x, y)`\n\n-   letters - string of chars eg. 'abcd'\n-   x - x coordinate\n-   y - y coordinate\n-   will convert any type passed to string\n-   `hapi.text(5, 10, 10)` is valid\n-   `hapi.text(hapi.mouseX(), 10, 10)` is valid out of the box\n\n## .polygon\n\n`.polygon(coords, fill=True)`\n\n-   coords is a 2d array [(0,0), (10, 10), (10, 100)]\n-   if fill is `False`, only the outline will be drawn\n-   adjust outline with `.stroke_size`\n\n## .begin_shape\n\n`hapi.begin_shape()` starts drawing a polygon\n\n## .vertex\n\n`.vertex((100, 200))`\n\n## .end_shape\n\n`hapi.end_shape(fill=True)` draws polygon on closing\n\nMinimal demo of `.begin_shape`, `.vertex` and `.end_shape`\n\n```python\nfrom hooman import Hooman\n\nimport pygame\n\nhapi = Hooman(500, 500)\n\ndef handle_events(event):\n    if event.type == pygame.QUIT:\n        hapi.is_running = False\n\nhapi.handle_events = handle_events\n\nwhile hapi.is_running:\n    hapi.background(hapi.color['white'])\n\n    hapi.fill(hapi.color['blue'])\n    hapi.stroke_size(4)\n\n    hapi.begin_shape()\n    hapi.vertex((0, 0))\n    hapi.vertex((100, 0))\n    hapi.vertex((hapi.mouseX(), hapi.mouseY()))\n    hapi.end_shape()\n\n    # same as hapi.polygon([(0, 0), (100, 0), (hapi.mouseX(), hapi.mouseY())])\n\n    hapi.flip_display()\n    hapi.event_loop()\n\npygame.quit()\n\n```\n\n## .heart\n\n`.heart(x, y, w, h)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   w - width\n-   h - height\n\n## .star\n\n`.star(x, y, r1, r2, npoints)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   r1 - radius on the x axis, same as half width\n-   r2 - radius on the y axis, same as half height\n-   npoints - the number of points of the star, this is a minimum of 2\n\n## .curve_rect\n\n`.curve_rect(x, y, w, h, curve)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   w - width\n-   h - height\n-   curve - the percentage of curve with 0 being no curve and 100 being full curve\n\n## .arrow\n\n`.arrow(x, y, w, h)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   w - width\n-   h - height\n\n## .alpha_ellipse\n\n`.alpha_ellipse(x, y, w, h)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   w - width\n-   h - height\n\n## .regular_polygon\n\n`.regular_polygon(x, y, w, h, npoints, angle_offset)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   w - width\n-   h - height\n-   npoints - the number of points/corners of the polygon eg. 4 is a square\n-   angle_offset - the first point will be drawn from the top, this moves it to θ degrees anti-clockwise\n\n## .supershape\n\n-   note see paulbourke.net/geometry/supershape/ on how to use supershape\n-   there is also presets for this below\n\n`.supershape(x, y, w, h, options)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   w - width\n-   h - height\n-   options - optional options for the shape\n\n#### optional options\n\n-   n1\n-   n2\n-   n3\n-   m\n-   a\n-   b\n-   phi\n\n## .smooth_star\n\nnote this is a preset for supershape\n\n`.smooth_star(x, y, w, h, n1=0.20, fill=False)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   w - width\n-   h - height\n-   n1 - controls the smoothness of the star, this is between 0 and 1\n-   fill - when set to False, only the outline will be drawn\n\n## .oil_drop\n\nnote this is a preset for supershape\n\n`.oil_drop(x, y, w, h, n1=0.3, fill=False)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   w - width\n-   h - height\n-   n1 - controls the size of the drop, must be between 0 and 1\n-   fill - when set to False, only the outline will be drawn\n\n## .flowing_star\n\nnote this is a preset for supershape\n\n`.flowing_star(x, y, w, h, n1=0.3, fill=False)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   w - width\n-   h - height\n-   n1 - controls the inflation of the shape, must be between 0 and 1\n-   fill - when set to False, only the outline will be drawn\n\n## .gradient_rect\n\n`.gradient_rect(x, y, w, h, start_col, end_col, direction=0)`\n\n-   x - x coordinate\n-   y - y coordinate\n-   w - width\n-   h - height\n-   start_col - this is the color it starts with\n-   end_col - this is the color it ends with\n-   direction - the direction of the gradient, 0 is horizontal where it starts on the left and 1 is vertical where is starts on the top\n\n## .cross_hair\n\n`.cross_hair(coord)`\n\n-   coord - the x and y position of the center of the cross_hairs\n\n## Interactivity\n\n## .mouseX\n\n-   `hapi.mouseX()` gives the current x coordinate of the mouse\n\n## .mouseY\n\n-   `hapi.mouseY()` gives the current y coordinate of the mouse\n\n## Pygame specifics\n\n## .flip_display\n\n-   is just `pygame.display.flip()` behind the scene\n\n## .event_loop\n\nrequires\n\n```python\ndef handle_events(event):\n    if event.type == pygame.QUIT:\n        hapi.is_running = False\n\nhapi.handle_events = handle_events\n```\n\n-   is put inside `hapi.is_running` loop\n\n## .set_caption\n\nsame as `pygame.display.set_caption`\n\n# Ui\n\n## .update_ui\n\n-   no need to update each element if you call this\n-   called inside `hapi.is_running` loop\n-   here is when **NOT** to use it:\n\n```python\nwhile hapi.is_running:\n    for i in range(5):\n            x = hapi.button(10+i*80, hapi.mouseY(), \"Click Me\",\n                grey_style\n            )\n        hapi.update_ui()\n```\n\n\n## .button\n\nCreate a button with `hapi.button(x, y, w, h, text, [optional paramters])`\n\n-   `x` - x location of the button\n-   `y` - y location of the button\n-   `w` - width of the button\n-   `h` - height of the button\n-   `text` - the text on the button\n-   `[optional parameters]` - a dictionary of any extra options you want for the button listed below\n\n#### Optional Parameters\n```python\n    \"hover_background_color\": None\n    \"outline\": False\n    \"outline_thickness\": 0\n    \"hover_outline_thickness\": None\n    \"outline_color\": (0, 0, 0)\n    \"outline_half\": False\n    \"hover_image\": None\n    \"enlarge\": False\n    \"enlarge_amount\": 1.1\n    \"calculate_size\": False\n    \"dont_generate\": False\n    \"padding_x\": 0\n    \"padding_y\": 0\n    all options from Base Ui Widget\n```\nplus all parameters from [Base Widget](#Base-Widget)\n\n\n```python\ndef on_hover_enter(btn):\n    btn.background_color = hapi.color['blue']\n\nbutton = hapi.button(150, 250, \"Click Me\",\n        {'on_hover_enter':on_hover_enter}\n    )\n```\n\n#### Methods\n\n-   `update()` -\u003e bool - this updates the button and draws it on screen, this should be called every frame, return whether the button was clicked\n-   `Update_text(text)` - this changes the text and recreates the button\n-   `create_button()` - this applies any changes to the button\n\n## .slider\n\n`.slider(x, y, w, h, [optional parameters])`\n\n-   `x` - x coordinate\n-   `y` - y coordinate\n-   `w` - width\n-   `h` - height\n-   optional parameters - a dictionary of optional options\n\n#### optional parameters\n```python\n    \"slider_width\": None\n    \"slider_color\": (200, 200, 200)\n    \"starting_value\": None\n    \"range\": [0, 1]\n    \"slider_height\": None\n    \"step\": 0\n    \"direction\": \"horizontal\"\n    \"slider_image\": None\n    \"slider_curve\": 0\n```\nplus all parameters from [Base Widget](#Base-Widget)\n#### Methods\n\n-   `update()` -\u003e float - this updates the slider and draws it on screen, this should be called every frame, return the value\n-   `value()` - this returns the current value of the slider\n-   `set_value(value)` - given a integer or float, this sets the value and moves the slider\n\n## .slider_with_text\n\n`.slider_with_text(slider, [optianl parameters])`\n\n- `slider` - a `.slider` widget\n- optional parameters - a dictionary of optional options\n\n#### optional parameters\n```python\n    \"font\": \"calibri\"\n    \"font_size\": 20\n    \"font_color\": (0, 0, 0)\n    \"padding_y\": 2\n    \"padding_x\": 0\n    \"pivot\": \"top_left\"\n    \"accuracy\": 0\n```\nplus all parameters from [Base Widget](#Base-Widget)\n#### Methods\n\n- `update()` - this updates the text and the given slider\n- `value()` - this returns the value of the given slider\n\n## .scroll\n\n`.scroll([optional parameters])`\n\n-   optional parameters - a dictionary of optional options\n\n#### optional parameters\n```python\n    \"starting_x\": 0\n    \"starting_y\": 0\n    \"range_x\": 0\n    \"range_y\": 0\n    \"bar_color\": (200, 200, 200)\n    \"slider_color\": (150, 150, 150)\n```\n#### Methods\n\n-`update()` - this updates the scroll widget\n\n#### how to use the scroll\n\n- use `scroll_widget[0]` to get the amount of horizontal scroll and\n`scroll_widget[1]` to get the amount of vertical scroll\n\neg.\n```python\nscroll_obj = hapi.scroll(params)\n\nwhile hapi.running:\n    hapi.rect(100 + scroll_obj[0], 100 + scroll_obj[1], 50, 50)\n    scroll_obj.update()\n```\n\n\n## .textbox\n\n`.textbox(x, y, w, h=0, [optional parameters])`\n\n-   `x` - x coordinate\n-   `y` - y coordinate\n-   `w` - width\n-   `h` - height of each line\n-   optional parameters - a dictionary of optional options\n\n#### optional parameters\n\n```python\n   \"max_lines\": 1\n    \"text\": \"\" # this can be a list containg a string of each line or a single string containing '\\n's\n    \"padding_x\": 2\n    \"padding_y\": 2\n    \"cursor\": True\n    \"on_return\": None\n    \"calculate_size\": False\n    \"typing\": True\n```\n#### Methods\n\n-   `update()` - this updates the textbox and draws it on screen, this should be called every frame\n-   `get_lines(lines=1, return_as_string=False)` - this returns the text in the textbox, lines can be the line number (starting from 1) or a range of lines eg. `(1,4)` gets lines 1 to 4, when return_as_string is False, it will return each line in a list\n-   `key_down(event)` - when a KEYDOWN event happens, giving it to this method updates the textbox\n\n```python\ndef handle_events(event):\n    if event.type == pygame.KEYDOWN:\n        my_textbox.keydown(event)\n```\n\n## Base Widget\nthese are all optianl parameters and methods that all widgests have\n\n#### optional parameters\n\n```python\n    \"background_color\": (255, 255, 255)\n    \"surface\": None\n    \"on_click\": None\n    \"on_hover\": None\n    \"on_hold\": None\n    \"on_release\": None\n    \"on_enter\": None\n    \"on_exit\": None\n    \"image\": None\n    \"curve\": 0\n    \"font_colour\": (0, 0, 0)\n    \"font\": \"Calibri\"\n    \"font_size\": 30\n    \"center\": False\n```\n#### methods\n\n- `get_rect()` -\u003e pygame.Rect\n\n## Charts\n\n### .barchart\n\n```python\nparams = {\n        \"ticks_y\": 10,\n        \"tick_size\": 5,\n        \"range_y\": [0, 100],\n        \"data\": {\"a\": 10, \"b\": 20},\n        \"bin_color\": (255, 99, 97),\n        \"line_color\": (200, 200, 200),\n        \"text_color\": (100, 100, 100),\n        \"mouse_line\": False,\n    }\nhapi.barchart(x, y, w, h, params)\n```\n\n\n### .linechart\n\n```python\nparams = {\n        \"ticks_y\": 10,\n        \"ticks_x\": 10,\n        \"tick_size\": 5,\n        \"range_y\": [0, 100],\n        \"range_x\": [0, 100],\n        \"lines\":[{\n                \"label\": \"---\",\n                \"color\": (255, 0, 0),\n                \"data\": [[1,1]],\n                \"values_window\": 200\n            }],\n        \"labels\": [\"apple\", \"\", \"\", \"tree\"],\n        \"line_color\": (200, 200, 200),\n        \"text_color\": (100, 100, 100),\n        \"mouse_line\": False,\n        \"mouse_line_color\": (255, 0, 0),\n        \"graph_color\": (0, 0, 0),\n        \"show_axes\": True,\n        \"show_ticks_x\": True,\n        \"show_ticks_y\": True,\n        \"x_axis_label\": \"x_axis_label\",\n        \"y_axis_label\": \"y_axis_label\",\n        \"plot_background\": True,\n        \"plot_grid\": True,\n        \"plot_background_color\": (234,234,242),\n        \"plot_grid_color\": 255\n    }\nhapi.linechart(x, y, w, h, params)\n```\n\n\n### .scatterchart\n\n```python\nparams = {\n        \"ticks_y\": 10,\n        \"ticks_x\": 10,\n        \"tick_size\": 5,\n        \"range_y\": [0, 100],\n        \"range_x\": [0, 100],\n        \"data\": {\n            \"carat\": [0.23, 0.21, 0.23, 0.29, 0.31, 0.24, 0.24, 0.26, 0.22, 0.23], \n            \"cut\": [\"Ideal\", \"Premium\", \"Good\", \"Premium\", \"Good\", \"Very Good\", \"Very Good\", \"Very Good\", \"Fair\"],\n            \"color\": [\"E\", \"E\", \"E\", \"I\", \"J\", \"J\", \"I\", \"H\", \"E\", \"H\"],\n            \"clarity\": [\"SI2\", \"SI1\", \"VS1\", \"VS2\", \"SI2\", \"VVS2\", \"VVS1\", \"SI1\", \"VS2\", \"VS1\"],\n            \"depth\": [61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, 59.4],\n            \"table\": [55, 61, 65, 58, 58, 57, 57, 55, 61, 61],\n            \"price\": [326, 326, 327, 334, 335, 336, 336, 337, 337, 338],\n            \"x\": [3.95, 3.89, 4.05, 4.2, 4.34, 3.94, 3.95, 4.07, 3.87, 4],\n            \"y\": [3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, 4.05],\n            \"z\": [2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, 2.39]\n        },\n        \"hue\": None,\n        \"hue_order\": [],\n        \"size\": None,\n        \"text_color\": (100, 100, 100),\n        \"mouse_line\": False,\n        \"mouse_line_color\": (255, 0, 0),\n        \"graph_color\": (0, 0, 0),\n        \"show_axes\": True,\n        \"show_ticks_x\": True,\n        \"show_ticks_y\": True,\n        \"x\": \"price\",\n        \"y\": \"carat\",\n        \"plot_background\": True,\n        \"plot_grid\": True,\n        \"plot_background_color\": (234,234,242),\n        \"plot_grid_color\": 255,\n        \"line_color\": 200,\n        \"strong_color\": (107, 107, 255),\n        \"light_color\": (235, 235, 255),\n        \"type\": \"normal\",\n        \"kind\": \"rect\",\n        \"hist_color\": \"b\",\n        \"hist_color_invert\": False\n    }\n\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabdur-rahmaanj%2Fhooman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabdur-rahmaanj%2Fhooman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabdur-rahmaanj%2Fhooman/lists"}