당신은 주제를 찾고 있습니까 “파이썬 실시간 그래프 – 주기함수 실시간 그래프(periodic function animations using python matplotlib)“? 다음 카테고리의 웹사이트 https://you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.maxfit.vn/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 나무마을파스칼 이(가) 작성한 기사에는 조회수 1,187회 및 좋아요 7개 개의 좋아요가 있습니다.
파이썬 실시간 그래프 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 주기함수 실시간 그래프(periodic function animations using python matplotlib) – 파이썬 실시간 그래프 주제에 대한 세부정보를 참조하세요
#주기함수 #periodicfunction #삼각함수 #함수합성
You can enjoy function animations with different periods or frequencies. This short animation leads you to the world of beauty and peculiarities of periodic functions.
주기함수의 주기(주파수)를 변화시키면서 다른 주기함수와 합하거나 곱해서 새로운 함수 그래프를 생성해 보았습니다.
주기함수의 오묘한 아름다움과 주기에 따른 변화를 감상해 보면 좋을 것 같습니다.
마지막전 영상에에서 0.1x가 아니고 0.5x 임을 밝혀둡니다. 즉 주기가 10배가 아니고 5배 늘어난 것입니다. 미안합니다~
파이썬 실시간 그래프 주제에 대한 자세한 내용은 여기를 참조하세요.
실시간 데이터 반영 그래프
matplotlib.animation -> animation 효과, 실시간 데이터 반영을 위해 사용 … with open(‘C:/Users/opers/python/data4.csv’,’w’) as csv_file:.
Source: operstu1.tistory.com
Date Published: 5/23/2022
View: 4367
파이썬 실시간 그래프 그리기 예제 (Python Matplotlib Real …
최근 머신러닝이나 최적화를 위한 툴로 파이썬을 활용하면서 실시간 그래프 그리는 방법을 찾아보았습니다. 이를 위해 사용된 파이썬 패키지는 …
Source: muzukphysics.tistory.com
Date Published: 8/15/2021
View: 8658
Matplotlib을 사용하여 실시간으로 데이터를 그리는 방법
어떻게 · 파이썬 Matplotlib 하우투 · Matplotlib을 사용하여 실시간으로 데이터를 … 애니메이션을 통해 업데이트 된 플롯을 실시간으로 보려면 …
Source: www.delftstack.com
Date Published: 10/20/2021
View: 1184
FuncAnimation을 이용하여 실시간 그래프 그리기
파이썬 프로그래밍/Matplotlib. FuncAnimation을 이용하여 실시간 그래프 그리기. Majestyblue 2021. 12. 22 …
Source: toyourlight.tistory.com
Date Published: 3/24/2021
View: 667
Python: matplotlib 플롯 실시간 업데이트하기
안녕하세요!. 개발을 하다보면 종종 출력 데이터를 디버깅 하기 위해 그래프를 출력해야하는 경우가 있습니다! 하지만, 일반적인 라이브러리에선, …
Source: blog.devf.kr
Date Published: 11/28/2022
View: 1255
– 2D 실시간 그래프 2개 그리기. (animation)
파이썬 (Python)/– Matplotlib (데이터 시각화).
Source: infinitt.tistory.com
Date Published: 5/28/2022
View: 9088
[Python] 파이썬, Matplotlib 실시간 주식 차트 업데이트 자동화 …
(다시 말해, 차트 그래프가 실시간으로 그려집니다.) 2. 준비물. VScode, Python. 3. 전체 종목 데이터 가져오기. from pykrx import stock …
Source: sjblog1.tistory.com
Date Published: 7/27/2021
View: 5410
파이썬을 사용한 실시간 데이터 그래프 – OpenMicro Labs
Python Playground 책의 저자의 블로그를 보니 실시간으로 시리얼 데이터를 받아서 mathplot을 사용해서 그래프를 출력하는 프로그램이 있어서 사용해 …
Source: openmicrolab.com
Date Published: 3/6/2021
View: 6913
[python] matplotlib을 사용하여 while 루프에서 실시간으로 플롯 …
실제로 발생하는 것은 첫 번째 점이 표시된 상태로 창이 팝업 된 다음 (그래도 괜찮음) 루프가 완료 될 때까지 기다렸다가 나머지 그래프를 채 웁니다.
Source: daplus.net
Date Published: 4/25/2021
View: 159
06) 실시간 1분봉 차트 그리기 – PyQt를 이용한 파이썬 GUI …
06) 실시간 1분봉 차트 그리기. 1분봉 데이터; 1분봉 그래프. 1분봉 데이터. # pip install -U pyupbit import …
Source: wikidocs.net
Date Published: 9/24/2022
View: 3601
주제와 관련된 이미지 파이썬 실시간 그래프
주제와 관련된 더 많은 사진을 참조하십시오 주기함수 실시간 그래프(periodic function animations using python matplotlib). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
![주기함수 실시간 그래프(periodic function animations using python matplotlib)](https://i.ytimg.com/vi/cvcxMTZRo_U/maxresdefault.jpg)
주제에 대한 기사 평가 파이썬 실시간 그래프
- Author: 나무마을파스칼
- Views: 조회수 1,187회
- Likes: 좋아요 7개
- Date Published: 최초 공개: 2019. 11. 2.
- Video Url link: https://www.youtube.com/watch?v=cvcxMTZRo_U
실시간 데이터 반영 그래프
<목차>
1. 기본 구조
2. csv 파일 읽어들여 만들기
1. 기본 구조
사용한 라이브러리
random -> 무작위의 수를 생성하기 위해 사용합니다.
intertools.count -> 1,2,3… 순차적인 수를 생성하기 위해 사용합니다.
pandas
matplotlib.pyplot
matplotlib.animation -> animation 효과, 실시간 데이터 반영을 위해 사용합니다.
사용한 메서드
index = count()
next(index) -> 순차적인 수를 생성해냅니다.
random.randint(0,5) -> 0~5 사이의 랜덤한 정수를 생성합니다.
plt.cla() -> 앞선 그래프를 삭제합니다.
ani = FuncAnimation(plt.gcf(), animate, interval = 1000)
-> plt.gcf() –> 현재 그래프 모양을 가져옵니다.
-> animate -> 애니메이션 효과를 적용합니다.
->interval = 1000 -> 1000 밀리초 마다 적용합니다.
[코드]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import random from itertools import count import pandas as pd import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation plt.style.use( ‘fivethirtyeight’ ) x_val = [] y_val = [] index = count() def animate(i): x_val.append( next (index)) y_val.append(random.randint( 0 , 5 )) plt.cla() plt.plot(x_val, y_val) ani = FuncAnimation(plt.gcf(), animate, interval = 1000 ) plt.tight_layout() plt.show() Colored by Color Scripter cs
[실행결과]2. csv_file을 읽어들여 만들기
(1) 실시간으로 데이터를 생성하는 csv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import csv import random import time x_value = 0 total_1 = 1000 total_2 = 1000 fieldnames = [ “x_value” , “total_1” , “total_2” ] with open ( ‘C:/Users/opers/python/data4.csv’ , ‘w’ ) as csv_file: csv_writer = csv.DictWriter(csv_file, fieldnames = fieldnames) csv_writer.writeheader() while True : with open ( ‘C:/Users/opers/python/data4.csv’ , ‘a’ ) as csv_file: csv_writer = csv.DictWriter(csv_file,fieldnames = fieldnames) info = { “x_value” :x_value, “total_1” :total_1, “total_2” :total_2 } csv_writer.writerow(info) print (x_value,total_1,total_2) x_value + = 1 total_1 = total_1 + random.randint( – 4 , 8 ) total_2 = total_2 + random.randint( – 5 , 8 ) time.sleep( 1 ) Colored by Color Scripter cs
(2) 실시간 그래프 그리기 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import random from itertools import count import pandas as pd import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from pandas.core.indexes import interval def animate(i): data = pd.read_csv( ‘data4.csv’ ) x = data[ ‘x_value’ ] y1 = data[ ‘total_1’ ] y2 = data[ ‘total_2’ ] plt.cla() plt.plot(x,y1, label = ‘블로그’ ) plt.plot(x,y2,label = ‘유튜브’ ) plt.legend(loc = ‘upper left’ ) plt.tight_layout() ani = FuncAnimation(plt.gcf(),animate, interval = 1000 ) plt.tight_layout() plt.show() Colored by Color Scripter cs
[실행결과]728×90
파이썬 실시간 그래프 그리기 예제 (Python Matplotlib Real Time Plot)
최근 머신러닝이나 최적화를 위한 툴로 파이썬을 활용하면서 실시간 그래프 그리는 방법을 찾아보았습니다. 이를 위해 사용된 파이썬 패키지는 Matplotlib 입니다. 생각보다 쉬운 방법을 통해 파이썬을 활용한 실시간 그래프를 그릴 수 있었으며, 이번 포스팅에서 여러분과 이를 공유하고자 합니다.
파이썬 실시간 그래프 그리기
해당 기능을 사용하기 위해 필요한 패키지는 Numpy와 Matplotlib 입니다. 넘파이 같은 경우에는 텐서플로우나 케라스와 같은 머신러닝 라이브러리나 Matplotlib와 궁합이 좋아서 많이 사용되는 툴입니다. TypeError가 나지 않는다는 장점을 가지고 있습니다.
# 패키지 선언 import numpy as np import matplotlib.pyplot as plt # 파이썬 실시간 그래프 그리기 x = 0 for i in range(1000): x = x + 0.1 y = np.sin(x) plt.scatter(x, y) plt.pause(0.001) plt.show()
예제 코드를 사용하면 실시간으로 파이썬 그래프를 그릴 수 있습니다. 여기서 중요한 코드는 plt.pause() 입니다. 해당 코드가 없으면 실시간(Real Time)으로 그래프가 그려지지 않습니다. 또한 plt.show()가 for문 외부에 존재해야 한다는 것입니다. 이점 참고하시고 다른 함수에 사용하시면 되겠습니다.
파이썬 실시간 그래프 출력
실시간-차트-그리기-예제
위와 같은 이미지로 그래프를 확인할 수 있습니다. 파이썬 스킬이 부족한 관계와 귀찮은 관계로 해당 파일을 gif로 저장하지는 못했지만, 위 코드를 여러분 PC에서 실행하면 순차적으로 점이 찍히는 것을 확인할 수 있습니다. 위와 같은 방법으로 쉽게 파이썬을 사용해서 Real Time Plot을 그릴 수 있습니다.
마치며
썸네일
이번 포스팅에서는 파이썬 실시간(Real Time) 그래프 그리기 방법에 대해 알아보았습니다. 그래프 혹은 차트라는 것은 유저로하여금 컴퓨터가 어떤 연산을 하고 있는지를 가장 보기 쉽고 이해하기 쉽게 출력하는 형태 중 하나입니다.
민감도 기반으로 최적화를 진행하는 과정이나 딥러닝 학습을 수행하는 경우에 반응 값이나 Cost가 어떻게 줄어들고 있는지, 변수가 어떻게 변하고 있는지를 실시간 그래프 그리기 방법을 사용하면 쉽게 확인 가능합니다.
Matplotlib을 사용하여 실시간으로 데이터를 그리는 방법
Matplotlib를 사용하여 실시간으로 데이터를 플롯하거나 Matplotlib에서 애니메이션을 만들려면 루프에서 반복 한 다음 업데이트 된 값을 플롯하여 플롯 할 변수를 지속적으로 업데이트합니다. 애니메이션을 통해 업데이트 된 플롯을 실시간으로 보려면 FuncAnimation() 함수, canvas.draw() 및 canvas_flush_events() 와 같은 다양한 메소드를 사용합니다.
FuncAnimation() 함수
변수 x 와 y 를 업데이트 한 다음 matplotlib.animation.FuncAnimation 을 사용하여 애니메이션을 통해 업데이트를 표시하여 플롯을 실시간으로 업데이트 할 수 있습니다.
구문:
matplotlib.animation.FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, *, cache_frame_data=True, **kwargs)
암호:
Please enable JavaScript Doc Translator: 문서 번역기는 어떻게 사용합니까?
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation x = [] y = [] figure, ax = plt.subplots(figsize=(4,3)) line, = ax.plot(x, y) plt.axis([0, 4*np.pi, -1, 1]) def func_animate(i): x = np.linspace(0, 4*np.pi, 1000) y = np.sin(2 * (x – 0.1 * i)) line.set_data(x, y) return line, ani = FuncAnimation(figure, func_animate, frames=10, interval=50) ani.save(r’animation.gif’, fps=10) plt.show()
ani = FuncAnimation(figure, func_animate, frames=10, interval=50)
figure 는 플롯이 업데이트 될 figure 객체입니다.
func_animate 는 각 프레임에서 호출되는 함수입니다. 첫 번째 논거는 다음 값 frames 에서 나옵니다.
frames=10 은 range(10) 과 같습니다. 0에서 9까지의 값은 각 프레임에서 func_animate 로 전달됩니다. 또한리스트 [0, 1, 3, 7, 12] 와 같이 인터벌을 ‘프레임’에 할당 할 수도 있습니다.
interval 은 ms 단위의 프레임 간 지연 시간입니다.
ani.save(‘animation.gif’, fps=10)
fps 및 dpi 와 같은 매개 변수를 사용하여 애니메이션을 gif 또는 mp4 에 저장할 수 있습니다.
canvas.flush_events() 와 함께 canvas.draw()
set_xdata() 와 set_ydata() 로 변수 x 와 y 를 업데이트 한 다음 canvas.draw() 를 사용하여 애니메이션을 통해 업데이트를 표시함으로써 플롯을 실시간으로 업데이트 할 수 있습니다. JavaScript 기반의 메소드.
import numpy as np import time import matplotlib.pyplot as plt x = np.linspace(0, 10, 100) y = np.cos(x) plt.ion() figure, ax = plt.subplots(figsize=(8,6)) line1, = ax.plot(x, y) plt.title(“Dynamic Plot of sinx”,fontsize=25) plt.xlabel(“X”,fontsize=18) plt.ylabel(“sinX”,fontsize=18) for p in range(100): updated_y = np.cos(x-0.05*p) line1.set_xdata(x) line1.set_ydata(updated_y) figure.canvas.draw() figure.canvas.flush_events() time.sleep(0.1)
여기에서 x 와 y 의 값은 반복적으로 업데이트되고 플롯도 실시간으로 업데이트됩니다.
plt.ion() 은 대화식 모드를 켭니다. 플롯이 호출되지 않으면 플롯이 업데이트되지 않습니다.
canvas.flush_events() 는 JavaScript 기반의 메소드로, 모든 반복에서 숫자를 지우므로 연속 숫자가 겹치지 않을 수 있습니다.
실시간 산포도
그러나 실시간 산란을 만들려면 x 와 y 의 값을 업데이트하고 각 반복에서 산점을 추가하면됩니다. 이 경우 산점도는 일반적으로 평면의 별개의 점을 나타내며 점이 겹칠 가능성이 거의 없으므로 모든 그림을 지우지 않아도됩니다.
FuncAnimation을 이용하여 실시간 그래프 그리기
외부에서 자료를 입력받아 실시간으로 그래프를 업데이트 하여 출력하는 그래프를 만들어보고자 한다. 매번 만들다가 코드 어디에다 정리해 놨지 잃어버리고… 이번에 확실히 정리해 두자.
1. 간단한 그래프 그리기
import matplotlib.pyplot as plt import numpy as np from matplotlib.animation import FuncAnimation #fig, ax = plt.subplots() fig = plt.figure() ax = plt.axes(xlim=(0, 3), ylim=(0, 9)) a = np.arange(0, 3, 0.2) ax.plot(a, a**2) plt.show()
subplots 을 이용하면 객체지향으로 작성 가능, figure(), axes()를 이용해 개별 호출 가능
을 이용하면 객체지향으로 작성 가능, figure(), axes()를 이용해 개별 호출 가능 figure 는 영어로 “모양, 도형” 이라는 뜻인데 그래프가 그려질 “도화지” 라고 생각해 보자.
는 영어로 “모양, 도형” 이라는 뜻인데 라고 생각해 보자. axes 는 영어로 “축” 이라는 뜻인데 축을 지정함으로써 “그래프를 정의” 하는 것으로 생각해 보자.
는 영어로 “축” 이라는 뜻인데 축을 지정함으로써 하는 것으로 생각해 보자. 이 그래프는 x^(2)의 식을 그린다.
<실행 결과>
2. 움직이는 그래프 그리기
이차함수 위에서 움직이는 점을 그릴 것이다.
(reference : https://riptutorial.com/matplotlib/example/23558/basic-animation-with-funcanimation)
import matplotlib.pyplot as plt import numpy as np from matplotlib.animation import FuncAnimation fig = plt.figure() ax = plt.axes(xlim=(0, 3), ylim=(0, 9)) a = np.arange(0, 3, 0.2) ax.plot(a, a**2) redDot, = plt.plot([], [], ‘ro’) def animate(frame): redDot.set_data(frame, frame**2) return redDot ani = FuncAnimation(fig, animate, frames=np.array([0.2, 0.4, 0.6])) plt.show()
<실행결과>
움직이는 것을 볼 수 있을텐데 캡쳐는 image로만 저장이 되어 아쉽다.
gif로 저장하기 위해선 imagemagick을 설치해야 하는데 귀찮다. 동영상으로 먼저 저장해야겠다.
3. 동영상으로 저장하기
(reference : https://stackoverflow.com/questions/37146420/saving-matplotlib-animation-as-mp4)
import matplotlib.pyplot as plt import numpy as np from matplotlib.animation import FuncAnimation import matplotlib.animation as animation fig = plt.figure() ax = plt.axes(xlim=(0, 3), ylim=(0, 9)) a = np.arange(0, 3, 0.2) ax.plot(a, a**2) redDot, = plt.plot([], [], ‘ro’) def animate(frame): redDot.set_data(frame, frame**2) return redDot ani = FuncAnimation(fig, animate, frames=np.array([0.2, 0.4, 0.6])) FFwriter = animation.FFMpegWriter(fps=1) ani.save(‘animation.mp4’, writer = FFwriter)
<실행결과>
fps를 작게 하지 않으면 순식간에 지나간다.
동영상을 gif로 저장해도 될 듯. (난 추가 라이브러리 설치가 매우매우 싫다)
4. 움직인 자취 남기기
움직인 자취를 남긴다면 추척하면서 보기에 더 좋을 것 같다.
import matplotlib.pyplot as plt import numpy as np from matplotlib.animation import FuncAnimation import matplotlib.animation as animation fig = plt.figure() ax = plt.axes(xlim=(0, 3), ylim=(0, 9)) a = np.arange(0, 3, 0.2) ax.plot(a, a**2) x, y = [], [] redDot, = plt.plot([], [], ‘ro’) def animate(frame): x.append(frame) y.append(frame**2) redDot.set_data(x, y) return redDot ani = FuncAnimation(fig, animate, frames=np.array([0.2, 0.4, 0.6])) FFwriter = animation.FFMpegWriter(fps=1) ani.save(‘animation.mp4’, writer = FFwriter)
<실행화면>
Python: matplotlib 플롯 실시간 업데이트하기 – woorim’s DEVBLOG 🙂
안녕하세요! 🙌
개발을 하다보면 종종 출력 데이터를 디버깅 하기 위해 그래프를 출력해야하는 경우가 있습니다! 하지만, 일반적인 라이브러리에선, 그래프가 정적으로 출력되기 때문에 실시간으로 들어오는 데이터를 확인해야하는 코드를 조금 더 만지작만지작 하는 과정이 필요합니다🙀
Python에선 그래프 Ploting 라이브러리로 matplotlib를 가장 많이 사용하는 것 같습니다. 요즘은 seaborn이나, plotly도 많이 사용하지만, 이번 포스트에서는 matplotlib를 이용해서 간단하게! 그래프를 실시간으로 업데이트 할 수 있는 방법을 공유해보도록 할께요!
먼저 Matplotlib가 설치 되어있어야 하겠죠? 혹시라도 설치가 안되어계신 분들은 pip로 손쉽게 설치할 수 있습니다!>
1
pip install matplotlib
matplotlib에서는 아주 친절하게도 플롯을 업데이트할 수 있는 여러가지 방법을 제공합니다. 대표적인 방법으로 FuncAnimation()을 이용하는 방법이 있습니다! (pyplot.ion()을 이용하는 방법도 있습니다!🧐)
FuncAnimation()을 이용한 애니메이션은 이미 처리가 완료된 데이터 리스트를 애니메이션하고 싶을 때 사용하기도 하지만 이번 포스트에서는 출력하고자 하는 데이터가 변경되거나, 추가 되는 상황에서 실시간으로 플롯을 업데이트 하는 목적으로 코드를 작성해 봤습니다! (사실 전자나, 후자 모두 구현은 비슷합니다 하하)
FuncAnimation()함수의 매개변수는 공식문서에서 아래와 같이 정의하고 있습니다!
악!!.. 매개변수를 하나하나 설명하면 시간이 너무 오래 걸리니까..?(잘 모르니까..😅) 중요한 매개변수만 살펴 볼까요?
fig -> 업데이트를 수행할 figure 객체 입니다. 그래프를 그릴 도화지라고 생각하면 쉬울 것 같아요!
func -> 업데이트 주기(frame)마다 호출할 함수를 지정합니다. 본 함수에서 해당 frame에 대한 Data를 지정할 수 있습니다🤓
interval(**kwargs에 포함) -> 업데이트 주기를 설명합니다 ms 단위에요!
그럼 코드를 한번 살펴볼까요?
1
2
3
4
import matplotlib. pyplot as plt
import numpy as np
from matplotlib. animation import FuncAnimation
import random
먼저 필요한 라이브러리를 불러오고!
클래스 형식으로 기능을 구현해봤어요!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import matplotlib. pyplot as plt
import numpy as np
from matplotlib. animation import FuncAnimation
import random
class RTplot ( ) :
def __init__ ( self ) :
self . X = [ ]
self . Y = [ ]
self . C = [ ]
self . upCount = 0
self . fig = plt. figure ( figsize = ( 12 , 6 ) )
self . ax = plt. subplot ( )
plt. autoscale ( enable = True )
def aniFunc ( self , i ) :
self . addPoint ( [ random . randrange ( 1 , 100 ) , random . randrange ( 1 , 100 ) ] )
self . ax . cla ( )
self . ax . scatter ( self . X , self . Y , c = self . C )
def addPoint ( self , list ) :
if self . upCount > ; 100 :
self . clearPoint ( )
self . upCount = 0
self . X . append ( list [ 0 ] )
self . Y . append ( list [ 1 ] )
self . C . append ( “#%06x” % random . randint ( 0 , 0xFFFFFF ) )
self . upCount + = 1
def clearPoint ( self ) :
self . X . clear ( )
self . Y . clear ( )
self . C . clear ( )
def start ( self ) :
self . ani = FuncAnimation ( self . fig , self . aniFunc , interval = 50 )
plt. show ( )
if __name__ == “__main__” :
plot = RTplot ( )
plot. start ( )
RTplot class는 초기화 시에 일단 figure 객체와, subplot 객체를 인스턴스 내 변수에 저장합니다!
그리고선 냅다 start() 함수를 실행합니다. start() 함수에서는 위해서 말했던 FuncAnimation() 함수를 호출합니다.
위 코드에서 보면 FuncAnimation()함수에 의해 50ms 주기로 aniFunc() 함수가 호출됩니다. 😮
aniFunc() 함수에서는 addPoint() 함수를 호출해서 클래스 인스턴스 내 X, Y리스트 변수에 랜덤 넘버를 추가하고, plot을 초기화 한 후에! X, Y 리스트를 scatter()로 출력합니다.
addPoint()에서 무한정하게 리스트에 숫자를 추가할 수 없으니, 100개가 넘으면 초기화 하도록 작성하였습니다!
실제 구현에서는 addPoint() 함수를 수정하면 쉽게 사용할 수 있을 것 같습니다!
아래는 실행 결과입니다!
코드 실행 결과
끝! 포스팅 내용에 문제가 있거나 궁금하신 내용은 댓글 남겨주시면 감사하겠습니다~
#python #matplotlib #animate
– 2D 실시간 그래프 2개 그리기. (animation)
from matplotlib import pyplot as plt from matplotlib import animation import numpy as np import random import time fig = plt.figure() #figure(도표) 생성 ax = plt.subplot(211, xlim=(0, 50), ylim=(0, 1024)) ax_2 = plt.subplot(212, xlim=(0, 50), ylim=(0, 512)) max_points = 50 max_points_2 = 50 line, = ax.plot(np.arange(max_points), np.ones(max_points, dtype=np.float)*np.nan, lw=1, c=’blue’,ms=1) line_2, = ax_2.plot(np.arange(max_points_2), np.ones(max_points, dtype=np.float)*np.nan, lw=1,ms=1) def init(): return line def init_2(): return line_2 def animate(i): y = random.randint(0,1024) old_y = line.get_ydata() new_y = np.r_[old_y[1:], y] line.set_ydata(new_y) print(new_y) return line def animate_2(i): y_2 = random.randint(0,512) old_y_2 = line_2.get_ydata() new_y_2 = np.r_[old_y_2[1:], y_2] line_2.set_ydata(new_y_2) print(new_y_2) return line_2 anim = animation.FuncAnimation(fig, animate , init_func= init ,frames=200, interval=50, blit=False) anim_2 = animation.FuncAnimation(fig, animate_2 , init_func= init_2 ,frames=200, interval=10, blit=False) plt.show()
랜덤값을 이용하여 실시간으로 업로드되는 2개의 그
래프를 구현해보았습니다.
후에는 센서값이나 의미있는 데이터를 이용하여 구현할 예정입니다.
반응형
[Python] 파이썬, Matplotlib 실시간 주식 차트 업데이트 자동화 만들기
반응형
파이썬을 이용하여 실시간 오늘 주가 데이터를 받아오고 그래프로 확인하여 보겠습니다.
Matplotlib 실시간 데이터 업데이트 자동화
<완성본>
(실제 장이 열리는 시간에 각각 5분, 15분동안 녹화한 동영상이며, 주가변동이 크지 않아 64배속 하였습니다.)
1. 차트 구성
위의 <완성본>은 2일간의 OHLC(시가, 고가, 저가, 종가) 데이터를 나타내며
주식장이 열려있는 동안에도 종목별 오늘의 현재 가격을 실시간으로 반영합니다.
(다시 말해, 차트 그래프가 실시간으로 그려집니다.)
2. 준비물
VScode, Python
3. 전체 종목 데이터 가져오기
from pykrx import stock import pandas as pd import matplotlib.pyplot as plt from datetime import datetime, timedelta
from pykrx import stock
# pykrx를 통해 국내 주식 정보를 가져올 수 있습니다.
# pykrx를 사용해보니, 빠르긴 하지만 주가 데이터가 1분 정도 지연 표시됩니다.
# 증권사 api를 사용하시면 주가 데이터를 실시간으로 받을 수 있습니다.
https://github.com/sharebook-kr/pykrx
import matplotlib.pyplot as plt
# matplotlib를 사용하여 그래프를 그립니다.
https://matplotlib.org/
# 총 종목 설정 stock_list_stock = pd.DataFrame({‘종목코드’:stock.get_market_ticker_list(market=”KOSPI”)}) stock_list_stock1 = pd.DataFrame({‘종목코드’:stock.get_market_ticker_list(market=”KOSDAQ”)}) stock_list_stock = pd.concat([stock_list_stock, stock_list_stock1], axis=0, ignore_index=True) stock_list_stock[‘종목명’] = stock_list_stock[‘종목코드’].map(lambda x: stock.get_market_ticker_name(x)) stock_list_etf = pd.DataFrame({‘종목코드’:stock.get_etf_ticker_list(datetime.today().strftime(‘%Y%m%d’))}) stock_list_etf[‘종목명’] = stock_list_etf[‘종목코드’].map(lambda x: stock.get_etf_ticker_name(x)) # 종목 ohlcv def stock_stock(stock_code, stock_from, stock_to): # 종목 stock_name = stock_list_stock.loc[stock_list_stock[‘종목코드’] == stock_code, ‘종목명’] if str(stock_name.values) == ‘[]’: stock_name = stock_list_etf.loc[stock_list_etf[‘종목코드’]==stock_code, ‘종목명’] df = stock.get_market_ohlcv_by_date(fromdate=stock_from, todate=stock_to, ticker=stock_code) # 칼럼명을 영문명으로 변경 df = df.rename(columns={‘시가’:’Open’, ‘고가’:’High’, ‘저가’:’Low’, ‘종가’:’Close’, ‘거래량’:’Volume’}) df[‘Close’]=df[‘Close’].apply(pd.to_numeric,errors=”coerce”) df[‘ma20’] = df[‘Close’].rolling(window=20).mean() # 20일 이동평균 df[‘stddev’] = df[‘Close’].rolling(window=20).std() # 20일 이동표준편차 df[‘upper’] = df[‘ma20’] + 2*df[‘stddev’] # 상단밴드 df[‘lower’] = df[‘ma20’] – 2*df[‘stddev’] # 하단밴드 # 거래정리 시 for i in range(len(df)): if df[‘Open’].iloc[i] == 0: df[‘Open’].iloc[i] = df[‘Close’].iloc[i] df[‘High’].iloc[i] = df[‘Close’].iloc[i] df[‘Low’].iloc[i] = df[‘Close’].iloc[i] return df, stock_name.values
stock_list_stock = pd.DataFrame({‘종목코드’:stock.get_market_ticker_list(market=”KOSPI”)})
# 코스피 모든 종목의 종목코드 가져오기
stock_list_stock1 = pd.DataFrame({‘종목코드’:stock.get_market_ticker_list(market=”KOSDAQ”)})
# 코스닥 모든 종목의 종목코드 가져오기
stock_list_stock = pd.concat([stock_list_stock, stock_list_stock1], axis=0, ignore_index=True)
# 코스피와 코스닥 종목코드 합치기
stock_list_stock[‘종목명’] = stock_list_stock[‘종목코드’].map(lambda x: stock.get_market_ticker_name(x))
# 종목코드에 맞는 종목명을 추가합니다.
stock_list_etf = pd.DataFrame({‘종목코드’:stock.get_etf_ticker_list(datetime.today().strftime(‘%Y%m%d’))})
# ETF 모든 종목의 종목코드 가져오기
stock_list_etf[‘종목명’] = stock_list_etf[‘종목코드’].map(lambda x: stock.get_etf_ticker_name(x))
# ETF 종목코드에 맞는 ETF 종목명을 추가합니다.
def stock_stock(stock_code, stock_from, stock_to):
# 종목코드에 해당하는 종목의 OHLC 데이터를 받아옵니다.
# 20일 이동평균선, 볼린저밴드를 계산합니다.
4. Matplotlib 차트 데이터
def matgraph(i,code): stock_from = (datetime.today() – timedelta(days=50)).strftime(‘%Y%m%d’) stock_to = datetime.today().strftime(‘%Y%m%d’) df, stock_name = stock_stock(code,stock_from,stock_to) plt.subplot(1,len(codes),i) plt.hlines(df[‘upper’][-1],0,2,color=’red’, zorder = 0) plt.hlines(df[‘ma20′][-1],0,2,color=’black’, zorder = 0) plt.hlines(df[‘lower’][-1],0,2,color=’blue’, zorder = 0) # 금일 데이터 if df[‘Open’][-1] < df['Close'][-1]: plt.vlines(1,df['Open'][-1],df['Close'][-1],color='red',linewidth=5, zorder = 2) else: plt.vlines(1,df['Open'][-1],df['Close'][-1],color='blue',linewidth=5, zorder = 2) if df['Open'][-1] < df['Close'][-1]: plt.vlines(1,df['Low'][-1],df['High'][-1],color='red', zorder = 0) else: if df['Open'][-1] > df[‘Close’][-1]: plt.vlines(1,df[‘Low’][-1],df[‘High’][-1],color=’blue’, zorder = 0) else: plt.vlines(1,df[‘Low’][-1],df[‘High’][-1],color=’black’, zorder = 0) plt.plot(1,df[‘Close’][-1],marker=’_’,color=’black’, zorder = 2) # 전일 데이터 if df[‘Open’][-2] < df['Close'][-2]: plt.vlines(0.5,df['Open'][-2],df['Close'][-2],color='red',linewidth=5, zorder = 2) else: plt.vlines(0.5,df['Open'][-2],df['Close'][-2],color='blue',linewidth=5, zorder = 2) if df['Open'][-2] < df['Close'][-2]: plt.vlines(0.5,df['Low'][-2],df['High'][-2],color='red', zorder = 0) else: if df['Open'][-2] > df[‘Close’][-2]: plt.vlines(0.5,df[‘Low’][-2],df[‘High’][-2],color=’blue’, zorder = 0) else: plt.vlines(0.5,df[‘Low’][-2],df[‘High’][-2],color=’black’, zorder = 0) plt.plot(0.5,df[‘Close’][-2],marker=’_’,color=’black’, zorder = 2) plt.title(stock_name) plt.grid(axis=’y’) plt.tight_layout()
plt.subplot(1,len(codes),i)
# 조회할 종목의 수만큼 subplot을 할당합니다.
plt.hlines(df[‘upper’][-1],0,2,color=’red’, zorder = 0)
# 오늘 볼린저 상단 밴드를 빨강으로 직선을 그립니다.
plt.hlines(df[‘ma20′][-1],0,2,color=’black’, zorder = 0)
# 오늘 20일 이동평균선을 검정으로 직선을 그립니다.
plt.hlines(df[‘lower’][-1],0,2,color=’blue’, zorder = 0)
# 오늘 볼린저 하단 밴드를 파랑으로 직선을 그립니다.
plt.title(stock_name)
# 종목명을 제목으로 추가합니다.
plt.grid(axis=’y’)
# y축 그리드를 추가합니다.
plt.tight_layout()
# 그래프 여백을 줄입니다.
5. Matplotlib 차트 그리기
# 메인 fig = plt.figure() while True: i=0 fig.clear() codes = [‘005930′,’000660′,’005935′,’035420′,’207940’] for code in codes: i+=1 matgraph(i,code) plt.draw() plt.pause(5)
codes = [‘005930′,’000660′,’005935′,’035420′,’207940’]
# 조회할 종목의 종목코드를 추가해주세요.
# 개별종목과 ETF 종목 조회 가능합니다. (코넥스와 기타 종목은 코드 수정으로 가능합니다.)
plt.pause(5)
# 5초간 대기합니다.
# 5초마다 그래프가 갱신됩니다. (원하시는 시간으로 수정해주세요.)
반응형
[python] matplotlib을 사용하여 while 루프에서 실시간으로 플롯하는 방법은 무엇입니까?
OpenCV를 사용하여 카메라의 일부 데이터를 실시간으로 플롯하려고합니다. 그러나 실시간 플로팅 (matplotlib 사용)이 작동하지 않는 것 같습니다.
이 간단한 예제로 문제를 격리했습니다.
fig = plt . figure () plt . axis ([ 0 , 1000 , 0 , 1 ]) i = 0 x = list () y = list () while i < 1000 : temp_y = np . random . random () x . append ( i ) y . append ( temp_y ) plt . scatter ( i , temp_y ) i += 1 plt . show () 이 예제는 1000 점을 개별적으로 그릴 것으로 예상합니다. 실제로 발생하는 것은 첫 번째 점이 표시된 상태로 창이 팝업 된 다음 (그래도 괜찮음) 루프가 완료 될 때까지 기다렸다가 나머지 그래프를 채 웁니다. 한 번에 하나씩 포인트가 표시되지 않는 이유가 있습니까?
키워드에 대한 정보 파이썬 실시간 그래프
다음은 Bing에서 파이썬 실시간 그래프 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 주기함수 실시간 그래프(periodic function animations using python matplotlib)
- periodic function
- python
- matplotlib
- live graph
- frequency
- convolution
- 주기함수
- 파이썬
- 실시간그래프
- 합성곱
- 컨벌루션
- 주파수변화
주기함수 #실시간 #그래프(periodic #function #animations #using #python #matplotlib)
YouTube에서 파이썬 실시간 그래프 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 주기함수 실시간 그래프(periodic function animations using python matplotlib) | 파이썬 실시간 그래프, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.