복붙노트

[PYTHON] matplotlib에서 축 번호 형식을 쉼표로 수천 자로 어떻게 포맷합니까?

PYTHON

matplotlib에서 축 번호 형식을 쉼표로 수천 자로 어떻게 포맷합니까?

x 축의 숫자 형식을 10000 대신 10,000으로 변경하려면 어떻게해야합니까? 이상적으로, 나는 이런 식으로하고 싶다.

x = format((10000.21, 22000.32, 10120.54), "#,###")

다음은 코드입니다.

import matplotlib.pyplot as plt

# create figure instance
fig1 = plt.figure(1)
fig1.set_figheight(15)
fig1.set_figwidth(20)

ax = fig1.add_subplot(2,1,1)

x = 10000.21, 22000.32, 10120.54

y = 1, 4, 15
ax.plot(x, y)

ax2 = fig1.add_subplot(2,1,2)

x2 = 10434, 24444, 31234
y2 = 1, 4, 9
ax2.plot(x2, y2)

fig1.show()

해결법

  1. ==============================

    1.형식 지정자로 다음을 사용하십시오.

    형식 지정자로 다음을 사용하십시오.

    >>> format(10000.21, ',')
    '10,000.21'
    

    또는 format 대신 str.format을 사용할 수도 있습니다.

    >>> '{:,}'.format(10000.21)
    '10,000.21'
    

    matplotlib.ticker.FuncFormatter 사용 :

    ...
    ax.get_xaxis().set_major_formatter(
        matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
    ax2.get_xaxis().set_major_formatter(
        matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
    fig1.show()
    

  2. ==============================

    2.가장 좋은 방법은 StrMethodFormatter를 사용하는 것입니다.

    가장 좋은 방법은 StrMethodFormatter를 사용하는 것입니다.

    import matplotlib as mpl
    ax.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
    

    예 :

    import pandas as pd
    import requests
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    
    url = 'https://min-api.cryptocompare.com/data/histoday?fsym=BTC&tsym=USDT&aggregate=1'
    df = pd.DataFrame({'BTC/USD': [d['close'] for d in requests.get(url).json()['Data']]})
    
    ax = df.plot()
    ax.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
    plt.show()
    

  3. ==============================

    3.나는이 일을하려고 할 때마다 항상이 같은 페이지에서 나 자신을 발견한다. 물론, 다른 대답은 일을 끝내지 만, 다음에 기억하기 쉽지 않습니다! 예 : 티커 가져 오기 및 람다, 사용자 정의 def 등 사용

    나는이 일을하려고 할 때마다 항상이 같은 페이지에서 나 자신을 발견한다. 물론, 다른 대답은 일을 끝내지 만, 다음에 기억하기 쉽지 않습니다! 예 : 티커 가져 오기 및 람다, 사용자 정의 def 등 사용

    ax라는 축이 있다면 간단한 해결책이 있습니다 :

    ax.set_yticklabels(['{:,}'.format(int(x)) for x in ax.get_yticks().tolist()])
    
  4. ==============================

    4.당신이 해키하고 짧다면 라벨을 업데이트 할 수 있습니다.

    당신이 해키하고 짧다면 라벨을 업데이트 할 수 있습니다.

    def update_xlabels(ax):
        xlabels = [format(label, ',.0f') for label in ax.get_xticks()]
        ax.set_xticklabels(xlabels)
    
    update_xlabels(ax)
    update_xlabels(ax2)
    
  5. ==============================

    5.matplotlib.ticker.funcformatter를 사용할 수 있습니다.

    matplotlib.ticker.funcformatter를 사용할 수 있습니다.

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.ticker as tkr
    
    
    def func(x, pos):  # formatter function takes tick label and tick position
        s = '%d' % x
        groups = []
        while s and s[-1].isdigit():
            groups.append(s[-3:])
            s = s[:-3]
        return s + ','.join(reversed(groups))
    
    y_format = tkr.FuncFormatter(func)  # make formatter
    
    x = np.linspace(0,10,501)
    y = 1000000*np.sin(x)
    ax = plt.subplot(111)
    ax.plot(x,y)
    ax.yaxis.set_major_formatter(y_format)  # set formatter to needed axis
    
    plt.show()
    

  6. from https://stackoverflow.com/questions/25973581/how-do-i-format-axis-number-format-to-thousands-with-a-comma-in-matplotlib by cc-by-sa and MIT license