프로그램

[파이썬] plot의 y axis 천단위 콤마 표시

오디세이99 2023. 1. 29. 18:56
728x90
반응형

데이터는 그냥 plot으로 그리면 아래와 같이 지수로 표시됩니다.

import matplotlib.pyplot as plt

data = [ 18245824, 37304412, 47413558, 58950482, 69031232, 78310905, 86006036, 94105527, 106179031, 115079370
        ,124198054, 130693879, 141861722, 152311590, 165878863, 174754600, 195942603, 210342549, 222761525, 235886329
        ,250065696, 262379197, 275528131, 288950540, 302449666, 316289174, 330857121, 344357987, 358577332, 372681868
        ,387951295, 401555403, 415453079, 428185060, 441789263, 456267506, 469478437, 483049846, 496161919, 510249534
        ,521658522, 535279464, 547198157, 560712035, 573376201, 589058407, 603520714, 617193780, 632480754, 646494620
        ]

fig = plt.figure(figsize=(12, 6))
plt.rcParams['font.size'] = 14
plt.plot(data)
plt.grid()
plt.show()
plt.close(fig)

 

 

아래와 같이 

plt.gca().get_yaxis().get_major_formatter().set_scientific(False)

를 사용하면 지수값이 아닌 원래 값들이 표시됩니다.

그런데, 천 단위 콤마는 표시되지 않습니다.

import matplotlib.pyplot as plt

data = [ 18245824, 37304412, 47413558, 58950482, 69031232, 78310905, 86006036, 94105527, 106179031, 115079370
        ,124198054, 130693879, 141861722, 152311590, 165878863, 174754600, 195942603, 210342549, 222761525, 235886329
        ,250065696, 262379197, 275528131, 288950540, 302449666, 316289174, 330857121, 344357987, 358577332, 372681868
        ,387951295, 401555403, 415453079, 428185060, 441789263, 456267506, 469478437, 483049846, 496161919, 510249534
        ,521658522, 535279464, 547198157, 560712035, 573376201, 589058407, 603520714, 617193780, 632480754, 646494620
        ]

fig = plt.figure(figsize=(12, 6))
plt.rcParams['font.size'] = 14
plt.plot(data)
plt.gca().get_yaxis().get_major_formatter().set_scientific(False)
plt.grid()
plt.show()
plt.close(fig)

 

 

아래와 같이 

plt.gca().ticklabel_format(axis="y", style="plain")

를 사용하면 동일하게 원값이 기준이 되어 표시하지만 천 단위 콤마는 표시되지 않습니다.

import matplotlib.pyplot as plt

data = [ 18245824, 37304412, 47413558, 58950482, 69031232, 78310905, 86006036, 94105527, 106179031, 115079370
        ,124198054, 130693879, 141861722, 152311590, 165878863, 174754600, 195942603, 210342549, 222761525, 235886329
        ,250065696, 262379197, 275528131, 288950540, 302449666, 316289174, 330857121, 344357987, 358577332, 372681868
        ,387951295, 401555403, 415453079, 428185060, 441789263, 456267506, 469478437, 483049846, 496161919, 510249534
        ,521658522, 535279464, 547198157, 560712035, 573376201, 589058407, 603520714, 617193780, 632480754, 646494620
        ]

fig = plt.figure(figsize=(12, 6))
plt.rcParams['font.size'] = 14
plt.plot(data)
plt.gca().ticklabel_format(axis="y", style="plain")
plt.grid()
plt.show()
plt.close(fig)

 

 

 

아래와 같이 

plt.gca().set_yticklabels(['{:,.0f}'.format(v) for v in data])

를 사용하면 천단위 콤마를 표시하게 됩니다.

그런데, 이렇게 되면 실제 값이 표시되기 때문에 하나의 plot은 문제없을 수 있는데, 여러 개를 볼떄는 이 값들이 달라지기 때문에 plot 간 비교가 어렵게 됩니다.

import matplotlib.pyplot as plt

data = [ 18245824, 37304412, 47413558, 58950482, 69031232, 78310905, 86006036, 94105527, 106179031, 115079370
        ,124198054, 130693879, 141861722, 152311590, 165878863, 174754600, 195942603, 210342549, 222761525, 235886329
        ,250065696, 262379197, 275528131, 288950540, 302449666, 316289174, 330857121, 344357987, 358577332, 372681868
        ,387951295, 401555403, 415453079, 428185060, 441789263, 456267506, 469478437, 483049846, 496161919, 510249534
        ,521658522, 535279464, 547198157, 560712035, 573376201, 589058407, 603520714, 617193780, 632480754, 646494620
        ]

fig = plt.figure(figsize=(12, 6))
plt.rcParams['font.size'] = 14
plt.plot(data)
plt.gca().set_yticklabels(['{:,.0f}'.format(v) for v in data])
plt.grid()
plt.show()
plt.close(fig)

 

 

아래와 같이

plt.gca().get_yaxis().set_major_formatter(StrMethodFormatter('{x:,.0f}'))

를 사용하면 천 단위 콤마가 잘 표시됩니다.

from matplotlib.ticker import FormatStrFormatter, StrMethodFormatter

를 해주어야 합니다.

import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter, StrMethodFormatter

data = [ 18245824, 37304412, 47413558, 58950482, 69031232, 78310905, 86006036, 94105527, 106179031, 115079370
        ,124198054, 130693879, 141861722, 152311590, 165878863, 174754600, 195942603, 210342549, 222761525, 235886329
        ,250065696, 262379197, 275528131, 288950540, 302449666, 316289174, 330857121, 344357987, 358577332, 372681868
        ,387951295, 401555403, 415453079, 428185060, 441789263, 456267506, 469478437, 483049846, 496161919, 510249534
        ,521658522, 535279464, 547198157, 560712035, 573376201, 589058407, 603520714, 617193780, 632480754, 646494620
        ]

fig = plt.figure(figsize=(12, 6))
plt.rcParams['font.size'] = 14
plt.plot(data)
plt.gca().get_yaxis().set_major_formatter(StrMethodFormatter('{x:,.0f}'))
plt.grid()
plt.show()
plt.close(fig)

728x90
반응형