seolpyo-mplchart


Nameseolpyo-mplchart JSON
Version 2.0.0.3 PyPI version JSON
download
home_pageNone
SummaryFast candlestick chart using Python. Includes navigator, slider, navigation, and text information display functions
upload_time2025-11-06 08:05:20
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT License
keywords chart 차트 stock 주식 invest 투자 finance 파이낸스 candle 캔들 candlestick 캔들스틱 matplotlib mplfinance pyqtgraph finplot virtual currency 가상화폐 coin 코인 bitcoin 비트코인 ethereum 이더리움
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Donation
Bitcoin: 1MKCHW8smDZv5DFMiVkA5G3DeXcMn871ZX

Ethereum: 0x1c5fb8a5e0b1153cd4116c91736bd16fabf83520


# Document
[English Document](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/README.md)

[한글 설명서](https://white.seolpyo.com/entry/147/?from=pypi)


# This document was originally written in Korean and translated using a machine translation tool.


reference version
----

2.0.0

Package Introduction
------

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/candle.png?raw=true)![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/40000.gif?raw=true)

Sample Charts with Over 40,000 Stock Price Data Points

seolpyo-mplchart is a Python package built on top of matplotlib.

While libraries like finplot and plotly are commonly used to draw candlestick charts in Python, I created this package because none of the existing tools fully met my needs.



**Key Features**

* Provides three types of Chart classes for flexible charting.
* Includes an overview slider (SliderChart) that highlights the visible range, allowing users to select or move the viewing window interactively.
* Integrates smoothly with various GUI frameworks, including tkinter, ensuring responsive performance.
* Displays stock price information as text (CursorChart, SliderChart). Simply hover your mouse over a candlestick or volume bar to view the corresponding data.
- Built-in support for toggling moving average lines on and off.

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/ma%20on%20off.gif?raw=true)

You can check out a sample of drawing candlestick charts integrated with tkinter at the following link:

[View tkinter sample code](https://white.seolpyo.com/entry/214/)

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/with%20tkinter.gif?raw=true)

✅ Verified to work with 32-bit Python 3.11, pandas 2.0.0, and matplotlib 3.7.0.

Installation
-----

    > pip install seolpyo-mplchart

Quick Start
-----

### OnlyChart

It is a chart that simply renders without any interaction.

    import seolpyo_mplchart as mc
    
    chart = mc.OnlyChart()
    df: pandas.DataFrame = {stock price data frame}
    chart.set_data(df)
    mc.show()
    

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/chart%20only.png?raw=true)

### CursorChart

This chart is an enhanced version of OnlyChart with mouse interaction capabilities.
It displays the date information corresponding to the mouse cursor position at the bottom of the chart, and price or volume data on the right side.
When the mouse cursor hovers over a candlestick or volume bar, the relevant information is shown as text.


    import seolpyo_mplchart as mc
    
    chart = mc.CursorChart()
    df: pandas.DataFrame = {stock price data frame}
    chart.set_data(df)
    mc.show()
    

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/chart%20cursor.png?raw=true)

### SliderChart

This chart is an extended version of CursorChart with an added overview slider.
The slider allows users to select or move the viewing range, and users can also click and drag within the chart area to shift the visible region.


    import seolpyo_mplchart as mc
    
    chart = mc.SliderChart()
    df: pandas.DataFrame = {stock price data frame}
    chart.set_data(df)
    mc.show()
    

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/sample.gif?raw=true)

Chart Description
--------

### Chart Class Variables

#### CONFIG

Chart Configuration File
If not provided, the predefined CONFIG\* settings will be used.

\* CONFIG: mc.DEFAULTCONFIG(OnlyChart, CursorChart) 또는 mc.SLIDERCONFIG(SliderChart)


#### wartermark

Watermark text displayed at the center of the chart.
If if not self.wartermark evaluates to true, the watermark will not be rendered.


#### candle\_on\_ma

If true, candlesticks are drawn above the moving average line.
If false, candlesticks are drawn below the moving average line, as shown in the following image.


![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/ma%20above%20candle.png?raw=true)

#### limit\_candle

If the number of candlesticks to be drawn on the screen is less than or equal to this value, full candlesticks are rendered.
If it exceeds the value, only wicks are drawn.


![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/wick.png?raw=true)

#### limit\_wick

If the number of candlesticks to be drawn on the screen is less than or equal to this value, only wicks are rendered.
If it exceeds the value, a line chart is drawn instead.


![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/line.png?raw=true)

#### limit\_volume

If the number of candlesticks drawn on the screen is less than or equal to self.limit_wick, the entire volume data is rendered.
If it exceeds that value, only a subset of volume data is drawn — specifically, the top limit_volume entries sorted in descending order of volume.
If you experience buffering when moving across a wide range, lowering this value may help improve performance.
This only applies while the chart is being moved in the Slider chart.

#### limit\_ma

If the number of candlesticks drawn on the screen is less than or equal to this value, the moving average line is rendered.
If you experience buffering when navigating across a wide range, lowering this value may help improve performance.
This only applies while the chart is being moved in the Slider chart.

#### key\_date, key\_open, key\_high, key\_low, key\_close, key\_volume

Keys for each column used in the provided data
If if not self.key_volume evaluates to true at the time of executing Chart.set_data(df), the volume chart will not be rendered.


    import seolpyo_mplchart as mc
    
    df: pandas.DataFrame = {stock price data frame}
    
    c = mc.SliderChart()
    c.key_date= '시간'
    c.key_open = '시가'
    c.key_high = '고가'
    c.key_low = '저가'
    c.key_close = '종가'
    # c.key_volume = '거래량'
    c.key_volume = None
    c.set_data(df)
    
    mc.show() # same as matplotlib.pyplot.show()
    
    
    ### OR ###
    
    
    import json
    
    import seolpyo_mplchart as mc
    import pandas as pd
    
    file = {stock price data path}
    with open(file, 'r', encoding='utf-8') as txt:
        data = json.load(txt)
    df = pd.DataFrame(data)
    
    class Chart(mc.SliderChart):
      key_date = '시간'
      key_open, key_high, key_low, key_close = ('시가', '고가', '저가', '종가')
      # key_volume = '거래량'
      key_volume = None
    
    c = Chart()'
    c.set_data(df)
    
    mc.show() # same as matplotlib.pyplot.show()
    
    

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/en%20no%20vol%20(2).png?raw=true)

#### fraction

If true, decimal values are displayed as fractions.

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/fraction.png?raw=true)

#### slider\_top

If true, the slider is positioned above the chart.

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/slider%20bottom.png?raw=true)

#### min\_distance

Minimum number of candlesticks required when selecting a slider range
If the selected range contains fewer candlesticks than this value, the previous range will be retained.


![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/min%20distance.gif?raw=true)

#### in\_chart

Determines whether the mouse cursor is located within the price chart or volume chart area.


#### in\_slider

Determines whether the mouse cursor is located within the slider area.


#### in\_price\_chart

Determines whether the mouse cursor is located within the price chart area.


#### in\_volume\_chart

Determines whether the mouse cursor is located within the volume chart area.


### Chart class method
#### Chart.\_\_init\_\_(config=DEFAULTCONFIG or SLIDERCONFIG)

Creates a chart object.

#### Chart.set\_data(df)

Passes stock price data to the chart object.
The chart object generates chart data based on the received input.
When retrieving data from a DataFrame, the predefined keys — Chart.key\_date, Chart.key\_open, Chart.key\_high, Chart.key\_low, Chart.key\_close, and Chart.key\_volume — are used.
Therefore, these keys should be properly set before calling set\_data.


#### Chart.refresh()

Refreshes the chart.
During the refresh, any changes made to self.CONFIG are applied.


#### Chart.add\_artists()

Function that adds the Artists used in the chart. Called during initialization (init).


#### Chart.draw\_artists()

Function that renders the Artists on the chart.
Called when the on_draw event is triggered.


#### Chart.set\_artists()

Function that applies the settings of chart Artists.
Called during refresh.


#### Chart.set\_collections()

Function that applies the settings of candlestick and volume chart Artists.
Called during refresh or when the display area changes.


#### Chart.add\_candle\_color\_column(), Chart.add\_volume\_color\_column()

This method determines the colors of candlesticks and volume bars drawn on the chart.
It adds the following columns to self.df:
- ['facecolor', 'edgecolor'] for candlesticks
- ['facecolor_volume', 'edgecolor_volume'] for volume bars
By modifying the values in these columns, you can customize the colors as desired.


##### Candlestick Colors
- Open < Close, Previous Close < Close
→ self.CONFIG.CANDLE.FACECOLOR.bull_rise, self.CONFIG.CANDLE.EDGECOLOR.bull_rise
- Open < Close, Previous Close > Close
→ self.CONFIG.CANDLE.FACECOLOR.bull_fall, self.CONFIG.CANDLE.EDGECOLOR.bull_fall
- Close < Open, Close < Previous Close
→ self.CONFIG.CANDLE.FACECOLOR.bear_fall, self.CONFIG.CANDLE.EDGECOLOR.bear_fall
- Close < Open, Close > Previous Close
→ self.CONFIG.CANDLE.FACECOLOR.bear_rise, self.CONFIG.CANDLE.EDGECOLOR.bear_rise
- Open == Close
→ self.CONFIG.CANDLE.EDGECOLOR.doji




##### Volume Bar Colors
- Previous Close < Current Close
→ self.CONFIG.VOLUME.FACECOLOR.rise, self.CONFIG.VOLUME.EDGECOLOR.rise
- Previous Close > Current Close
→ self.CONFIG.VOLUME.FACECOLOR.fall, self.CONFIG.VOLUME.EDGECOLOR.fall
- Previous Close == Current Close
→ self.CONFIG.VOLUME.FACECOLOR.doji, self.CONFIG.VOLUME.EDGECOLOR.doji




#### Chart.get\_cnadle\_segment(x, left, right, top, bottom, is\_up, high, low)

This method is provided to modify the appearance of candlesticks drawn on the chart.


    import pandas as pd
    import seolpyo_mplchart as mc
    
    class Chart(mc.SliderChart):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.collection_candle.set_linewidth(1.5)
            return
    
        def get_candle_segment(self, *, x, left, right, top, bottom, is_up, high, low):
            if is_up:
                return (
                    (x, high),
                    (x, top), (right, top), (x, top),
                    (x, bottom), (left, bottom),
                    (x, bottom), (x, low), (x, high)
                )
            else:
                return (
                    (x, high),
                    (x, bottom), (right, bottom), (x, bottom),
                    (x, top), (left, top), (x, top),
                    (x, low), (x, high)
                )
    
    
    C = Chart()
    
    data = {stock price data}
    df = pd.DataFrame(data)
    
    C.set_data(df)
    
    mc.show()

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/en%20bar%20chart.png?raw=true)

### Chart.get\_info\_kwargs(is\_price, \*\*kwargs)

You can modify or add the data displayed in the text box using the get_info_kwargs method.
The **kwargs parameter receives predefined keyword arguments.

If you'd like, I can help format this as a docstring or comment for your code. For example:
Allows customization of the data shown in the text box.
Predefined keyword arguments are passed via **kwargs.


    import pandas as pd
    import seolpyo_mplchart as mc
    
    
    class Chart(mc.SliderChart):
        format_candleinfo = mc.format_candleinfo_ko + '\nCustom info: {ci}'
    
        def get_info_kwargs(self, is_price, **kwargs):
            if is_price:
                kwargs['ci'] = 'You can add Custom text Info or Change text info.'
                kwargs['close'] = 'You can Change close price info.'
            return kwargs
    
    C = Chart()
    data = {stock price data}
    df = pd.DataFrame(data)
    
    C.set_data(df)
    
    mc.show()

#### Chart.on\_draw(e)

Method called when the draw event is triggered.
Only invoked in CursorChart and SliderChart.


#### Chart.on\_resize(e)

Method called when the resize event is triggered.
Only invoked in SliderChart.


#### Chart.on\_pick(e)

Method called when the pick event is triggered.


#### Chart.on\_move(e)

Method called when a mouse movement event occurs.
Only invoked in CursorChart and SliderChart.


#### Chart.on\_click(e)

Method called when a mouse click event occurs.

Only invoked in SliderChart.

#### Chart.on\_release(e)

Method called when a mouse release event occurs.

Only invoked in SliderChart.

### CONFIG

A configuration that includes setting class objects such as FIGURE, AX, FORMAT, UNIT, CURSOR, CANDLE, VOLUME, MA, and SLIDER.


### DEFAULTCONFIG

CONFIG applied to OnlyChart and CursorChart.


### DEFAULTCONFIG\_EN

CONFIG applied to OnlyChart and CursorChart, with the price unit set to $, the volume unit set to Vol, and the formatting based on English conventions.


### SLIDERCONFIG

CONFIG applied to SliderChart.


### SLIDERCONFIG\_EN

CONFIG applied to SliderChart, with the price unit set to $, the volume unit set to Vol, and the formatting based on English conventions.


    # seolpyo_mplchart/_config/slider/config.py
    
    from .. import config
    from .figure import FIGURE, SliderFigureData
    from .nav import NAVIGATOR
    
    
    class SliderData:
        def __init__(self):
            self.NAVIGATOR = NAVIGATOR
    
    SLIDER = SliderData()
    
    class SliderConfigData(config.ConfigData):
        FIGURE: SliderFigureData
        SLIDER: SliderData
    
    
    SLIDERCONFIG: SliderConfigData = config.DEFAULTCONFIG
    SLIDERCONFIG.FIGURE = FIGURE
    SLIDERCONFIG.SLIDER = SLIDER
    
    SLIDERCONFIG_EN: SliderConfigData = config.DEFAULTCONFIG_EN
    SLIDERCONFIG_EN.FIGURE = FIGURE
    SLIDERCONFIG_EN.SLIDER = SLIDER
    
    

    # seolpyo_mplchart/_config/config.py
    
    from . import figure, ax, candle, volume, ma, unit, cursor, format
    
    
    class ConfigData:
        def __init__(self):
            self.FIGURE = figure.FIGURE
            self.UNIT = unit.UNIT
            self.AX = ax.AX
            self.CANDLE = candle.CANDLE
            self.VOLUME = volume.VOLUME
            self.MA = ma.MA
            self.CURSOR = cursor.CURSOR
            self.FORMAT = format.FORMAT
    
    DEFAULTCONFIG = ConfigData()
    
    DEFAULTCONFIG_EN = ConfigData()
    DEFAULTCONFIG_EN.UNIT = unit.UNIT_EN
    DEFAULTCONFIG_EN.MA = ma.MA_EN
    DEFAULTCONFIG_EN.FORMAT = format.FORMAT_EN
    
    

# Others

---

# Required data
-------

A chart object must be provided with a DataFrame that contains the following columns:
[timestamp, open, high, low, close, volume]


## How to Change Language and Text Format
The default language is Korean.
If needed, you can change the units for price and volume, and customize the text format to match your preferred style.


### How to Change Display Units

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/en%20no%20vol%20(2).png?raw=true)

The price and volume units, as well as the number of decimal places for price and volume, are managed in CONFIG.UNIT.

    from .utils import convert_unit, convert_unit_en
    # seolpyo_mplchart._config.unit.py
    
    class UnitData:
        def __init__(self):
            self.price = '원'
            self.volume = '주'
            self.digit = 0
            self.digit_volume = 0
            self.func = convert_unit
    
    UNIT = UnitData()
    
    UNIT_EN = UnitData()
    UNIT_EN.price = ' $'
    UNIT_EN.volume = ' Vol'
    UNIT_EN.digit = 2
    UNIT_EN.func = convert_unit_en
    
    

### How to Change the Information Text Format

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/en%20no%20vol%20(2).png?raw=true)![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/kor%20vol.png?raw=true)

You can customize the name of the price moving average line and the text displayed in the information box.
Text formatting is managed through CONFIG.FORMAT.
Additional kwargs for customizing the text can be passed via the chart’s get_info_kwargs method.


    # seolpyo_mplchart/_config/format.py
    
    format_candleinfo_ko = """\
    {dt}
    
    종가:  {close}
    등락률: {rate}
    대비:  {compare}
    시가:  {open}({rate_open})
    고가:  {high}({rate_high})
    저가:  {low}({rate_low})
    거래량: {volume}({rate_volume})\
    """
    format_volumeinfo_ko = """\
    {dt}
    
    거래량:    {volume}
    거래량증가율: {rate_volume}
    대비:     {compare}\
    """
    
    class FormatData:
        def __init__(self):
            self.candle = format_candleinfo_ko
            self.volume = format_volumeinfo_ko
    
    FORMAT = FormatData()
    
    format_candleinfo_en = """\
    {dt}
    
    close:      {close}
    rate:        {rate}
    compare: {compare}
    open:      {open}({rate_open})
    high:       {high}({rate_high})
    low:        {low}({rate_low})
    volume:  {volume}({rate_volume})\
    """
    format_volumeinfo_en = """\
    {dt}
    
    volume:      {volume}
    volume rate: {rate_volume}
    compare:     {compare}\
    """
    
    FORMAT_EN = FormatData()
    FORMAT_EN.candle = format_candleinfo_en
    FORMAT_EN.volume = format_volumeinfo_en
    
    

How to Change Chart Style
-----------

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/theme%20light.png?raw=true)![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/theme%20dark.png?raw=true)

Since I prefer a white background, the default chart style is set to light mode.
If you want to change the chart style, simply modify the color values defined in CONFIG.
A function named set_theme has been created to switch between light and dark themes.
You can either use this function directly, or check which values it modifies and adjust them to suit your preferences.


    import json
    
    import seolpyo_mplchart as mc
    import pandas as pd
    
    
    class Chart(mc.SliderChart):
        def __init__(self, config, *args, **kwargs):
            config = mc.set_theme(config, theme='dark')
    
    
    file = {stock price data path}
    with open(file, 'r', encoding='utf-8') as txt:
        data = json.load(txt)
    df = pd.DataFrame(data)
    
    c = Chart()
    c.set_data(df)
    
    mc.show()
    

How to Change Chart Aspect Ratio
--------

![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/ratio.png?raw=true)

You can adjust the proportions of each chart area using the values of
ratio_ax_slider, ratio_ax_legend, ratio_ax_price, ratio_ax_volume, and ratio_ax_none.
Note: ratio_ax_none is only used when the value of slider_top is set to False.


    # seolpyo_mplchart/_config/slider/figure.py
    
    
    class RatioData:
        def __init__(self):
            self.legend = 2
            self.price = 18
            self.volume = 5
            self.slider = 3
            self.none = 2
    
    RATIO = RatioData()
    
    class SliderFigureData(figure.FigureData):
        def __init__(self):
            super().__init__()
            self.RATIO: RatioData = RATIO
    
    FIGURE = SliderFigureData()

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "seolpyo-mplchart",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "chart, \ucc28\ud2b8, stock, \uc8fc\uc2dd, invest, \ud22c\uc790, finance, \ud30c\uc774\ub0b8\uc2a4, candle, \uce94\ub4e4, candlestick, \uce94\ub4e4\uc2a4\ud2f1, matplotlib, mplfinance, pyqtgraph, finplot, virtual currency, \uac00\uc0c1\ud654\ud3d0, coin, \ucf54\uc778, bitcoin, \ube44\ud2b8\ucf54\uc778, ethereum, \uc774\ub354\ub9ac\uc6c0",
    "author": null,
    "author_email": "white-seolpyo <white-seolpyo@naver.com>",
    "download_url": "https://files.pythonhosted.org/packages/ad/2e/d5aa880e79213dae96048cd8319f1b174a22ff7461ccba44775b527db722/seolpyo_mplchart-2.0.0.3.tar.gz",
    "platform": null,
    "description": "# Donation\r\nBitcoin: 1MKCHW8smDZv5DFMiVkA5G3DeXcMn871ZX\r\n\r\nEthereum: 0x1c5fb8a5e0b1153cd4116c91736bd16fabf83520\r\n\r\n\r\n# Document\r\n[English Document](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/README.md)\r\n\r\n[\ud55c\uae00 \uc124\uba85\uc11c](https://white.seolpyo.com/entry/147/?from=pypi)\r\n\r\n\r\n# This document was originally written in Korean and translated using a machine translation tool.\r\n\r\n\r\nreference version\r\n----\r\n\r\n2.0.0\r\n\r\nPackage Introduction\r\n------\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/candle.png?raw=true)![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/40000.gif?raw=true)\r\n\r\nSample Charts with Over 40,000 Stock Price Data Points\r\n\r\nseolpyo-mplchart is a Python package built on top of matplotlib.\r\n\r\nWhile libraries like finplot and plotly are commonly used to draw candlestick charts in Python, I created this package because none of the existing tools fully met my needs.\r\n\r\n\r\n\r\n**Key Features**\r\n\r\n* Provides three types of Chart classes for flexible charting.\r\n* Includes an overview slider (SliderChart) that highlights the visible range, allowing users to select or move the viewing window interactively.\r\n* Integrates smoothly with various GUI frameworks, including tkinter, ensuring responsive performance.\r\n* Displays stock price information as text (CursorChart, SliderChart). Simply hover your mouse over a candlestick or volume bar to view the corresponding data.\r\n- Built-in support for toggling moving average lines on and off.\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/ma%20on%20off.gif?raw=true)\r\n\r\nYou can check out a sample of drawing candlestick charts integrated with tkinter at the following link:\r\n\r\n[View tkinter sample code](https://white.seolpyo.com/entry/214/)\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/with%20tkinter.gif?raw=true)\r\n\r\n\u2705 Verified to work with 32-bit Python 3.11, pandas 2.0.0, and matplotlib 3.7.0.\r\n\r\nInstallation\r\n-----\r\n\r\n    > pip install seolpyo-mplchart\r\n\r\nQuick Start\r\n-----\r\n\r\n### OnlyChart\r\n\r\nIt is a chart that simply renders without any interaction.\r\n\r\n    import seolpyo_mplchart as mc\r\n    \r\n    chart = mc.OnlyChart()\r\n    df: pandas.DataFrame = {stock price data frame}\r\n    chart.set_data(df)\r\n    mc.show()\r\n    \r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/chart%20only.png?raw=true)\r\n\r\n### CursorChart\r\n\r\nThis chart is an enhanced version of OnlyChart with mouse interaction capabilities.\r\nIt displays the date information corresponding to the mouse cursor position at the bottom of the chart, and price or volume data on the right side.\r\nWhen the mouse cursor hovers over a candlestick or volume bar, the relevant information is shown as text.\r\n\r\n\r\n    import seolpyo_mplchart as mc\r\n    \r\n    chart = mc.CursorChart()\r\n    df: pandas.DataFrame = {stock price data frame}\r\n    chart.set_data(df)\r\n    mc.show()\r\n    \r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/chart%20cursor.png?raw=true)\r\n\r\n### SliderChart\r\n\r\nThis chart is an extended version of CursorChart with an added overview slider.\r\nThe slider allows users to select or move the viewing range, and users can also click and drag within the chart area to shift the visible region.\r\n\r\n\r\n    import seolpyo_mplchart as mc\r\n    \r\n    chart = mc.SliderChart()\r\n    df: pandas.DataFrame = {stock price data frame}\r\n    chart.set_data(df)\r\n    mc.show()\r\n    \r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/sample.gif?raw=true)\r\n\r\nChart Description\r\n--------\r\n\r\n### Chart Class Variables\r\n\r\n#### CONFIG\r\n\r\nChart Configuration File\r\nIf not provided, the predefined CONFIG\\* settings will be used.\r\n\r\n\\* CONFIG: mc.DEFAULTCONFIG(OnlyChart, CursorChart) \ub610\ub294 mc.SLIDERCONFIG(SliderChart)\r\n\r\n\r\n#### wartermark\r\n\r\nWatermark text displayed at the center of the chart.\r\nIf if not self.wartermark evaluates to true, the watermark will not be rendered.\r\n\r\n\r\n#### candle\\_on\\_ma\r\n\r\nIf true, candlesticks are drawn above the moving average line.\r\nIf false, candlesticks are drawn below the moving average line, as shown in the following image.\r\n\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/ma%20above%20candle.png?raw=true)\r\n\r\n#### limit\\_candle\r\n\r\nIf the number of candlesticks to be drawn on the screen is less than or equal to this value, full candlesticks are rendered.\r\nIf it exceeds the value, only wicks are drawn.\r\n\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/wick.png?raw=true)\r\n\r\n#### limit\\_wick\r\n\r\nIf the number of candlesticks to be drawn on the screen is less than or equal to this value, only wicks are rendered.\r\nIf it exceeds the value, a line chart is drawn instead.\r\n\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/line.png?raw=true)\r\n\r\n#### limit\\_volume\r\n\r\nIf the number of candlesticks drawn on the screen is less than or equal to self.limit_wick, the entire volume data is rendered.\r\nIf it exceeds that value, only a subset of volume data is drawn \u2014 specifically, the top limit_volume entries sorted in descending order of volume.\r\nIf you experience buffering when moving across a wide range, lowering this value may help improve performance.\r\nThis only applies while the chart is being moved in the Slider chart.\r\n\r\n#### limit\\_ma\r\n\r\nIf the number of candlesticks drawn on the screen is less than or equal to this value, the moving average line is rendered.\r\nIf you experience buffering when navigating across a wide range, lowering this value may help improve performance.\r\nThis only applies while the chart is being moved in the Slider chart.\r\n\r\n#### key\\_date, key\\_open, key\\_high, key\\_low, key\\_close, key\\_volume\r\n\r\nKeys for each column used in the provided data\r\nIf if not self.key_volume evaluates to true at the time of executing Chart.set_data(df), the volume chart will not be rendered.\r\n\r\n\r\n    import seolpyo_mplchart as mc\r\n    \r\n    df: pandas.DataFrame = {stock price data frame}\r\n    \r\n    c = mc.SliderChart()\r\n    c.key_date= '\uc2dc\uac04'\r\n    c.key_open = '\uc2dc\uac00'\r\n    c.key_high = '\uace0\uac00'\r\n    c.key_low = '\uc800\uac00'\r\n    c.key_close = '\uc885\uac00'\r\n    # c.key_volume = '\uac70\ub798\ub7c9'\r\n    c.key_volume = None\r\n    c.set_data(df)\r\n    \r\n    mc.show() # same as matplotlib.pyplot.show()\r\n    \r\n    \r\n    ### OR ###\r\n    \r\n    \r\n    import json\r\n    \r\n    import seolpyo_mplchart as mc\r\n    import pandas as pd\r\n    \r\n    file = {stock price data path}\r\n    with open(file, 'r', encoding='utf-8') as txt:\r\n        data = json.load(txt)\r\n    df = pd.DataFrame(data)\r\n    \r\n    class Chart(mc.SliderChart):\r\n      key_date = '\uc2dc\uac04'\r\n      key_open, key_high, key_low, key_close = ('\uc2dc\uac00', '\uace0\uac00', '\uc800\uac00', '\uc885\uac00')\r\n      # key_volume = '\uac70\ub798\ub7c9'\r\n      key_volume = None\r\n    \r\n    c = Chart()'\r\n    c.set_data(df)\r\n    \r\n    mc.show() # same as matplotlib.pyplot.show()\r\n    \r\n    \r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/en%20no%20vol%20(2).png?raw=true)\r\n\r\n#### fraction\r\n\r\nIf true, decimal values are displayed as fractions.\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/fraction.png?raw=true)\r\n\r\n#### slider\\_top\r\n\r\nIf true, the slider is positioned above the chart.\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/slider%20bottom.png?raw=true)\r\n\r\n#### min\\_distance\r\n\r\nMinimum number of candlesticks required when selecting a slider range\r\nIf the selected range contains fewer candlesticks than this value, the previous range will be retained.\r\n\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/min%20distance.gif?raw=true)\r\n\r\n#### in\\_chart\r\n\r\nDetermines whether the mouse cursor is located within the price chart or volume chart area.\r\n\r\n\r\n#### in\\_slider\r\n\r\nDetermines whether the mouse cursor is located within the slider area.\r\n\r\n\r\n#### in\\_price\\_chart\r\n\r\nDetermines whether the mouse cursor is located within the price chart area.\r\n\r\n\r\n#### in\\_volume\\_chart\r\n\r\nDetermines whether the mouse cursor is located within the volume chart area.\r\n\r\n\r\n### Chart class method\r\n#### Chart.\\_\\_init\\_\\_(config=DEFAULTCONFIG or SLIDERCONFIG)\r\n\r\nCreates a chart object.\r\n\r\n#### Chart.set\\_data(df)\r\n\r\nPasses stock price data to the chart object.\r\nThe chart object generates chart data based on the received input.\r\nWhen retrieving data from a DataFrame, the predefined keys \u2014 Chart.key\\_date, Chart.key\\_open, Chart.key\\_high, Chart.key\\_low, Chart.key\\_close, and Chart.key\\_volume \u2014 are used.\r\nTherefore, these keys should be properly set before calling set\\_data.\r\n\r\n\r\n#### Chart.refresh()\r\n\r\nRefreshes the chart.\r\nDuring the refresh, any changes made to self.CONFIG are applied.\r\n\r\n\r\n#### Chart.add\\_artists()\r\n\r\nFunction that adds the Artists used in the chart. Called during initialization (init).\r\n\r\n\r\n#### Chart.draw\\_artists()\r\n\r\nFunction that renders the Artists on the chart.\r\nCalled when the on_draw event is triggered.\r\n\r\n\r\n#### Chart.set\\_artists()\r\n\r\nFunction that applies the settings of chart Artists.\r\nCalled during refresh.\r\n\r\n\r\n#### Chart.set\\_collections()\r\n\r\nFunction that applies the settings of candlestick and volume chart Artists.\r\nCalled during refresh or when the display area changes.\r\n\r\n\r\n#### Chart.add\\_candle\\_color\\_column(), Chart.add\\_volume\\_color\\_column()\r\n\r\nThis method determines the colors of candlesticks and volume bars drawn on the chart.\r\nIt adds the following columns to self.df:\r\n- ['facecolor', 'edgecolor'] for candlesticks\r\n- ['facecolor_volume', 'edgecolor_volume'] for volume bars\r\nBy modifying the values in these columns, you can customize the colors as desired.\r\n\r\n\r\n##### Candlestick Colors\r\n- Open < Close, Previous Close < Close\r\n\u2192 self.CONFIG.CANDLE.FACECOLOR.bull_rise, self.CONFIG.CANDLE.EDGECOLOR.bull_rise\r\n- Open < Close, Previous Close > Close\r\n\u2192 self.CONFIG.CANDLE.FACECOLOR.bull_fall, self.CONFIG.CANDLE.EDGECOLOR.bull_fall\r\n- Close < Open, Close < Previous Close\r\n\u2192 self.CONFIG.CANDLE.FACECOLOR.bear_fall, self.CONFIG.CANDLE.EDGECOLOR.bear_fall\r\n- Close < Open, Close > Previous Close\r\n\u2192 self.CONFIG.CANDLE.FACECOLOR.bear_rise, self.CONFIG.CANDLE.EDGECOLOR.bear_rise\r\n- Open == Close\r\n\u2192 self.CONFIG.CANDLE.EDGECOLOR.doji\r\n\r\n\r\n\r\n\r\n##### Volume Bar Colors\r\n- Previous Close < Current Close\r\n\u2192 self.CONFIG.VOLUME.FACECOLOR.rise, self.CONFIG.VOLUME.EDGECOLOR.rise\r\n- Previous Close > Current Close\r\n\u2192 self.CONFIG.VOLUME.FACECOLOR.fall, self.CONFIG.VOLUME.EDGECOLOR.fall\r\n- Previous Close == Current Close\r\n\u2192 self.CONFIG.VOLUME.FACECOLOR.doji, self.CONFIG.VOLUME.EDGECOLOR.doji\r\n\r\n\r\n\r\n\r\n#### Chart.get\\_cnadle\\_segment(x, left, right, top, bottom, is\\_up, high, low)\r\n\r\nThis method is provided to modify the appearance of candlesticks drawn on the chart.\r\n\r\n\r\n    import pandas as pd\r\n    import seolpyo_mplchart as mc\r\n    \r\n    class Chart(mc.SliderChart):\r\n        def __init__(self, *args, **kwargs):\r\n            super().__init__(*args, **kwargs)\r\n            self.collection_candle.set_linewidth(1.5)\r\n            return\r\n    \r\n        def get_candle_segment(self, *, x, left, right, top, bottom, is_up, high, low):\r\n            if is_up:\r\n                return (\r\n                    (x, high),\r\n                    (x, top), (right, top), (x, top),\r\n                    (x, bottom), (left, bottom),\r\n                    (x, bottom), (x, low), (x, high)\r\n                )\r\n            else:\r\n                return (\r\n                    (x, high),\r\n                    (x, bottom), (right, bottom), (x, bottom),\r\n                    (x, top), (left, top), (x, top),\r\n                    (x, low), (x, high)\r\n                )\r\n    \r\n    \r\n    C = Chart()\r\n    \r\n    data = {stock price data}\r\n    df = pd.DataFrame(data)\r\n    \r\n    C.set_data(df)\r\n    \r\n    mc.show()\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/en%20bar%20chart.png?raw=true)\r\n\r\n### Chart.get\\_info\\_kwargs(is\\_price, \\*\\*kwargs)\r\n\r\nYou can modify or add the data displayed in the text box using the get_info_kwargs method.\r\nThe **kwargs parameter receives predefined keyword arguments.\r\n\r\nIf you'd like, I can help format this as a docstring or comment for your code. For example:\r\nAllows customization of the data shown in the text box.\r\nPredefined keyword arguments are passed via **kwargs.\r\n\r\n\r\n    import pandas as pd\r\n    import seolpyo_mplchart as mc\r\n    \r\n    \r\n    class Chart(mc.SliderChart):\r\n        format_candleinfo = mc.format_candleinfo_ko + '\\nCustom info: {ci}'\r\n    \r\n        def get_info_kwargs(self, is_price, **kwargs):\r\n            if is_price:\r\n                kwargs['ci'] = 'You can add Custom text Info or Change text info.'\r\n                kwargs['close'] = 'You can Change close price info.'\r\n            return kwargs\r\n    \r\n    C = Chart()\r\n    data = {stock price data}\r\n    df = pd.DataFrame(data)\r\n    \r\n    C.set_data(df)\r\n    \r\n    mc.show()\r\n\r\n#### Chart.on\\_draw(e)\r\n\r\nMethod called when the draw event is triggered.\r\nOnly invoked in CursorChart and SliderChart.\r\n\r\n\r\n#### Chart.on\\_resize(e)\r\n\r\nMethod called when the resize event is triggered.\r\nOnly invoked in SliderChart.\r\n\r\n\r\n#### Chart.on\\_pick(e)\r\n\r\nMethod called when the pick event is triggered.\r\n\r\n\r\n#### Chart.on\\_move(e)\r\n\r\nMethod called when a mouse movement event occurs.\r\nOnly invoked in CursorChart and SliderChart.\r\n\r\n\r\n#### Chart.on\\_click(e)\r\n\r\nMethod called when a mouse click event occurs.\r\n\r\nOnly invoked in SliderChart.\r\n\r\n#### Chart.on\\_release(e)\r\n\r\nMethod called when a mouse release event occurs.\r\n\r\nOnly invoked in SliderChart.\r\n\r\n### CONFIG\r\n\r\nA configuration that includes setting class objects such as FIGURE, AX, FORMAT, UNIT, CURSOR, CANDLE, VOLUME, MA, and SLIDER.\r\n\r\n\r\n### DEFAULTCONFIG\r\n\r\nCONFIG applied to OnlyChart and CursorChart.\r\n\r\n\r\n### DEFAULTCONFIG\\_EN\r\n\r\nCONFIG applied to OnlyChart and CursorChart, with the price unit set to $, the volume unit set to Vol, and the formatting based on English conventions.\r\n\r\n\r\n### SLIDERCONFIG\r\n\r\nCONFIG applied to SliderChart.\r\n\r\n\r\n### SLIDERCONFIG\\_EN\r\n\r\nCONFIG applied to SliderChart, with the price unit set to $, the volume unit set to Vol, and the formatting based on English conventions.\r\n\r\n\r\n    # seolpyo_mplchart/_config/slider/config.py\r\n    \r\n    from .. import config\r\n    from .figure import FIGURE, SliderFigureData\r\n    from .nav import NAVIGATOR\r\n    \r\n    \r\n    class SliderData:\r\n        def __init__(self):\r\n            self.NAVIGATOR = NAVIGATOR\r\n    \r\n    SLIDER = SliderData()\r\n    \r\n    class SliderConfigData(config.ConfigData):\r\n        FIGURE: SliderFigureData\r\n        SLIDER: SliderData\r\n    \r\n    \r\n    SLIDERCONFIG: SliderConfigData = config.DEFAULTCONFIG\r\n    SLIDERCONFIG.FIGURE = FIGURE\r\n    SLIDERCONFIG.SLIDER = SLIDER\r\n    \r\n    SLIDERCONFIG_EN: SliderConfigData = config.DEFAULTCONFIG_EN\r\n    SLIDERCONFIG_EN.FIGURE = FIGURE\r\n    SLIDERCONFIG_EN.SLIDER = SLIDER\r\n    \r\n    \r\n\r\n    # seolpyo_mplchart/_config/config.py\r\n    \r\n    from . import figure, ax, candle, volume, ma, unit, cursor, format\r\n    \r\n    \r\n    class ConfigData:\r\n        def __init__(self):\r\n            self.FIGURE = figure.FIGURE\r\n            self.UNIT = unit.UNIT\r\n            self.AX = ax.AX\r\n            self.CANDLE = candle.CANDLE\r\n            self.VOLUME = volume.VOLUME\r\n            self.MA = ma.MA\r\n            self.CURSOR = cursor.CURSOR\r\n            self.FORMAT = format.FORMAT\r\n    \r\n    DEFAULTCONFIG = ConfigData()\r\n    \r\n    DEFAULTCONFIG_EN = ConfigData()\r\n    DEFAULTCONFIG_EN.UNIT = unit.UNIT_EN\r\n    DEFAULTCONFIG_EN.MA = ma.MA_EN\r\n    DEFAULTCONFIG_EN.FORMAT = format.FORMAT_EN\r\n    \r\n    \r\n\r\n# Others\r\n\r\n---\r\n\r\n# Required data\r\n-------\r\n\r\nA chart object must be provided with a DataFrame that contains the following columns:\r\n[timestamp, open, high, low, close, volume]\r\n\r\n\r\n## How to Change Language and Text Format\r\nThe default language is Korean.\r\nIf needed, you can change the units for price and volume, and customize the text format to match your preferred style.\r\n\r\n\r\n### How to Change Display Units\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/en%20no%20vol%20(2).png?raw=true)\r\n\r\nThe price and volume units, as well as the number of decimal places for price and volume, are managed in CONFIG.UNIT.\r\n\r\n    from .utils import convert_unit, convert_unit_en\r\n    # seolpyo_mplchart._config.unit.py\r\n    \r\n    class UnitData:\r\n        def __init__(self):\r\n            self.price = '\uc6d0'\r\n            self.volume = '\uc8fc'\r\n            self.digit = 0\r\n            self.digit_volume = 0\r\n            self.func = convert_unit\r\n    \r\n    UNIT = UnitData()\r\n    \r\n    UNIT_EN = UnitData()\r\n    UNIT_EN.price = ' $'\r\n    UNIT_EN.volume = ' Vol'\r\n    UNIT_EN.digit = 2\r\n    UNIT_EN.func = convert_unit_en\r\n    \r\n    \r\n\r\n### How to Change the Information Text Format\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/en%20no%20vol%20(2).png?raw=true)![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/kor%20vol.png?raw=true)\r\n\r\nYou can customize the name of the price moving average line and the text displayed in the information box.\r\nText formatting is managed through CONFIG.FORMAT.\r\nAdditional kwargs for customizing the text can be passed via the chart\u2019s get_info_kwargs method.\r\n\r\n\r\n    # seolpyo_mplchart/_config/format.py\r\n    \r\n    format_candleinfo_ko = \"\"\"\\\r\n    {dt}\r\n    \r\n    \uc885\uac00:\u3000 {close}\r\n    \ub4f1\ub77d\ub960: {rate}\r\n    \ub300\ube44:\u3000 {compare}\r\n    \uc2dc\uac00:\u3000 {open}({rate_open})\r\n    \uace0\uac00:\u3000 {high}({rate_high})\r\n    \uc800\uac00:\u3000 {low}({rate_low})\r\n    \uac70\ub798\ub7c9: {volume}({rate_volume})\\\r\n    \"\"\"\r\n    format_volumeinfo_ko = \"\"\"\\\r\n    {dt}\r\n    \r\n    \uac70\ub798\ub7c9:\u3000\u3000\u3000 {volume}\r\n    \uac70\ub798\ub7c9\uc99d\uac00\uc728: {rate_volume}\r\n    \ub300\ube44:\u3000\u3000\u3000\u3000 {compare}\\\r\n    \"\"\"\r\n    \r\n    class FormatData:\r\n        def __init__(self):\r\n            self.candle = format_candleinfo_ko\r\n            self.volume = format_volumeinfo_ko\r\n    \r\n    FORMAT = FormatData()\r\n    \r\n    format_candleinfo_en = \"\"\"\\\r\n    {dt}\r\n    \r\n    close:      {close}\r\n    rate:        {rate}\r\n    compare: {compare}\r\n    open:      {open}({rate_open})\r\n    high:       {high}({rate_high})\r\n    low:        {low}({rate_low})\r\n    volume:  {volume}({rate_volume})\\\r\n    \"\"\"\r\n    format_volumeinfo_en = \"\"\"\\\r\n    {dt}\r\n    \r\n    volume:      {volume}\r\n    volume rate: {rate_volume}\r\n    compare:     {compare}\\\r\n    \"\"\"\r\n    \r\n    FORMAT_EN = FormatData()\r\n    FORMAT_EN.candle = format_candleinfo_en\r\n    FORMAT_EN.volume = format_volumeinfo_en\r\n    \r\n    \r\n\r\nHow to Change Chart Style\r\n-----------\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/theme%20light.png?raw=true)![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/theme%20dark.png?raw=true)\r\n\r\nSince I prefer a white background, the default chart style is set to light mode.\r\nIf you want to change the chart style, simply modify the color values defined in CONFIG.\r\nA function named set_theme has been created to switch between light and dark themes.\r\nYou can either use this function directly, or check which values it modifies and adjust them to suit your preferences.\r\n\r\n\r\n    import json\r\n    \r\n    import seolpyo_mplchart as mc\r\n    import pandas as pd\r\n    \r\n    \r\n    class Chart(mc.SliderChart):\r\n        def __init__(self, config, *args, **kwargs):\r\n            config = mc.set_theme(config, theme='dark')\r\n    \r\n    \r\n    file = {stock price data path}\r\n    with open(file, 'r', encoding='utf-8') as txt:\r\n        data = json.load(txt)\r\n    df = pd.DataFrame(data)\r\n    \r\n    c = Chart()\r\n    c.set_data(df)\r\n    \r\n    mc.show()\r\n    \r\n\r\nHow to Change Chart Aspect Ratio\r\n--------\r\n\r\n![](https://github.com/white-seolpyo/seolpyo-mplchart/blob/main/images/ratio.png?raw=true)\r\n\r\nYou can adjust the proportions of each chart area using the values of\r\nratio_ax_slider, ratio_ax_legend, ratio_ax_price, ratio_ax_volume, and ratio_ax_none.\r\nNote: ratio_ax_none is only used when the value of slider_top is set to False.\r\n\r\n\r\n    # seolpyo_mplchart/_config/slider/figure.py\r\n    \r\n    \r\n    class RatioData:\r\n        def __init__(self):\r\n            self.legend = 2\r\n            self.price = 18\r\n            self.volume = 5\r\n            self.slider = 3\r\n            self.none = 2\r\n    \r\n    RATIO = RatioData()\r\n    \r\n    class SliderFigureData(figure.FigureData):\r\n        def __init__(self):\r\n            super().__init__()\r\n            self.RATIO: RatioData = RATIO\r\n    \r\n    FIGURE = SliderFigureData()\r\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Fast candlestick chart using Python. Includes navigator, slider, navigation, and text information display functions",
    "version": "2.0.0.3",
    "project_urls": {
        "Documentation(English)": "https://white.seolpyo.com/entry/148/",
        "Documentation(\ud55c\uae00)": "https://white.seolpyo.com/entry/147/",
        "Homepage": "https://white.seolpyo.com/",
        "Issues": "https://github.com/white-seolpyo/seolpyo-mplchart/issues",
        "repository": "https://github.com/white-seolpyo/seolpyo-mplchart"
    },
    "split_keywords": [
        "chart",
        " \ucc28\ud2b8",
        " stock",
        " \uc8fc\uc2dd",
        " invest",
        " \ud22c\uc790",
        " finance",
        " \ud30c\uc774\ub0b8\uc2a4",
        " candle",
        " \uce94\ub4e4",
        " candlestick",
        " \uce94\ub4e4\uc2a4\ud2f1",
        " matplotlib",
        " mplfinance",
        " pyqtgraph",
        " finplot",
        " virtual currency",
        " \uac00\uc0c1\ud654\ud3d0",
        " coin",
        " \ucf54\uc778",
        " bitcoin",
        " \ube44\ud2b8\ucf54\uc778",
        " ethereum",
        " \uc774\ub354\ub9ac\uc6c0"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5bfbd66abfc0abba5da4b3758aff8d0aef86646efb62d6d11ecfdd704fdebc17",
                "md5": "4c057351fb7b7dce977874e49c4e7f5c",
                "sha256": "d05b31e59e9bff1c3a105470cea4c5d0edeacbc46d8b8f0d51318aa153c6fcc6"
            },
            "downloads": -1,
            "filename": "seolpyo_mplchart-2.0.0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4c057351fb7b7dce977874e49c4e7f5c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 628909,
            "upload_time": "2025-11-06T08:05:18",
            "upload_time_iso_8601": "2025-11-06T08:05:18.170985Z",
            "url": "https://files.pythonhosted.org/packages/5b/fb/d66abfc0abba5da4b3758aff8d0aef86646efb62d6d11ecfdd704fdebc17/seolpyo_mplchart-2.0.0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ad2ed5aa880e79213dae96048cd8319f1b174a22ff7461ccba44775b527db722",
                "md5": "aa76069776e321eeb11428d347abd3b8",
                "sha256": "3561619603cc4e1d975c96a692cb46fe3ff7d76a9a3e30ced170e036f7420b59"
            },
            "downloads": -1,
            "filename": "seolpyo_mplchart-2.0.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "aa76069776e321eeb11428d347abd3b8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 38411,
            "upload_time": "2025-11-06T08:05:20",
            "upload_time_iso_8601": "2025-11-06T08:05:20.049392Z",
            "url": "https://files.pythonhosted.org/packages/ad/2e/d5aa880e79213dae96048cd8319f1b174a22ff7461ccba44775b527db722/seolpyo_mplchart-2.0.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-11-06 08:05:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "white-seolpyo",
    "github_project": "seolpyo-mplchart",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "seolpyo-mplchart"
}
        
Elapsed time: 3.28235s