Matplotlib가 있는 Python의 플롯 시간
타임스탬프 배열이 형식)의 타임스탬프 배열이 있습니다.MM:SS.mmmmm) 및 타임스탬프 배열의 값에 대응하는 부동소수점 번호의 다른 배열.
Matplotlib를 사용하여 x축에 시간을 표시하고 y축에 숫자를 표시할 수 있습니까?
그러려고 했는데, 어찌된 일인지 수레만 받아 들이고 있었어요.어떻게 하면 시간을 표시할 수 있을까요?어떤 식으로든 포맷을 수정해야 하나요?
업데이트:
이 답변은 matplotlib 버전 3.5 이후 오래된 것입니다.그plot
이제 함수가 날짜/시간 데이터를 직접 처리합니다.https://matplotlib.org/3.5.1/api/_as_gen/matplotlib.pyplot.plot_date.html 를 참조해 주세요.
plot_date는 사용하지 않는 것이 좋습니다.이 방법은 역사적 이유로 존재하며 향후 폐지될 수 있습니다.
datetime과 유사한 데이터는 플롯을 사용하여 직접 플롯해야 합니다.
일반 숫자 데이터를 Matplotlib 날짜 형식으로 표시해야 하거나 표준 시간대를 설정해야 하는 경우 ax.xaxis를 호출합니다.axis_date / ax.yaxis.axis_date before 플롯.Axis 를 참조해 주세요.axis_date.
오래되고 낡은 답변:
먼저 타임스탬프를 Python으로 변환해야 합니다.datetime
오브젝트(사용)datetime.strptime
) 를 사용합니다.date2num
날짜를 matplotlib 형식으로 변환합니다.
다음을 사용하여 날짜와 값을 표시합니다.
import matplotlib.pyplot
import matplotlib.dates
from datetime import datetime
x_values = [datetime(2021, 11, 18, 12), datetime(2021, 11, 18, 14), datetime(2021, 11, 18, 16)]
y_values = [1.0, 3.0, 2.0]
dates = matplotlib.dates.date2num(x_values)
matplotlib.pyplot.plot_date(dates, y_values)
또한 시간 스탬프와 값 쌍을 벽도를 사용하여 표시할 수도 있습니다.(문자열 표현에서 해석한 후) plot(matplotlib 버전 1.2.0 및 1.3.1에서 테스트 완료).
예:
import datetime
import random
import matplotlib.pyplot as plt
# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
결과 이미지:
다음은 산점도입니다.
import datetime
import random
import matplotlib.pyplot as plt
# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
# plot
plt.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
다음과 같은 이미지를 생성합니다.
7년 후 이 코드가 도움이 되었습니다.하지만, 제 시간은 여전히 정확하게 나타나지 않았습니다.
Matplotlib 2.0.0을 사용하여 Paul H에 의해 matplotlib의 x축 눈금 레이블 날짜 형식 편집에서 다음 코드 비트를 추가해야 했습니다.
import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)
포맷을 (%H:%M)로 변경하여 시각을 올바르게 표시하였습니다.
모두 지역 사회 덕분입니다.
matplotlib 버전 2.0.2에서는 문제가 있었습니다.위에서 예제를 실행한 결과 중앙에 쌓인 버블 세트가 있습니다.
다음 행을 추가하여 문제를 수정했습니다.
plt.plot([],[])
코드 스니펫 전체는 다음과 같습니다.
import datetime
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# make up some data
x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
# plot
plt.plot([],[])
plt.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)
plt.show()
plt.close()
그러면 원하는 대로 버블이 분산된 이미지가 생성됩니다.
판다의 데이터 프레임은 아직 언급되지 않았습니다.나는 이것이 나의 일시적 문제를 어떻게 해결하는지 보여주고 싶었다.밀리초까지의 날짜 시간이 있습니다.2021-04-01 16:05:37
. /할 수 /proc(Linux/haproxy throughput)는 Linux/haproxy 스루풋입니다.실시간 그래프 애니메이션에 데이터를 입력하기에 좋습니다.
csv를 보겠습니다(다른 그래프에서 사용하고 있는 초당 패킷 수 열은 무시하십시오).
head -2 ~/data
date,mbps,pps
2021-04-01 16:05:37,113,9342.00
...
「」를 사용해 .print(dataframe.dtype)
데이터가 어떻게 읽혔는지 알 수 있습니다.
(base) ➜ graphs ./throughput.py
date object
mbps int64
pps float64
dtype: object
판다는 대추 문자열을 "객체"로 끌어당깁니다. 이것은 그냥 char 타입입니다.스크립트에서 현재 상태 사용:
import matplotlib.pyplot as plt
import pandas as pd
dataframe = pd.read_csv("~/data")
dates = dataframe["date"]
mbps = dataframe["mbps"]
plt.plot(dates, mbps, label="mbps")
plt.title("throughput")
plt.xlabel("time")
plt.ylabel("mbps")
plt.legend()
plt.xticks(rotation=45)
plt.show()
Matplotlib 。추가했습니다.plt.xticks(rotation=45)
날짜를 기울이려고 하는데 내가 원하는 게 아니야.datetime64 [ ns ]는, 「object」는 「object」입니다.matplotlib.
dataframe["date"] = pd.to_datetime(dataframe["date"])
이번에 내 데이트 상대는 타입이다.datetime64[ns]
(base) ➜ graphs ./throughput.py
date datetime64[ns]
mbps int64
pps float64
dtype: object
같은 스크립트에 1행의 차이가 있습니다.
#!/usr/bin/env python
import matplotlib.pyplot as plt
import pandas as pd
dataframe = pd.read_csv("~/data")
# convert object to datetime64[ns]
dataframe["date"] = pd.to_datetime(dataframe["date"])
dates = dataframe["date"]
mbps = dataframe["mbps"]
plt.plot(dates, mbps, label="mbps")
plt.title("throughput")
plt.xlabel("time")
plt.ylabel("mbps")
plt.legend()
plt.xticks(rotation=45)
plt.show()
이 방법은 사용 사례에 적합하지 않을 수 있지만 다른 사용자에게 도움이 될 수 있습니다.
언급URL : https://stackoverflow.com/questions/1574088/plotting-time-in-python-with-matplotlib
'sourcecode' 카테고리의 다른 글
화살표 함수(공용 클래스 필드)를 클래스 메서드로 사용하는 방법 (0) | 2022.09.18 |
---|---|
웹 사이트를 방문하는 컴퓨터를 고유하게 식별하려면 어떻게 해야 합니까? (0) | 2022.09.18 |
Larabel: MySQL 쿼리에서 단일 값 가져오기 (0) | 2022.09.18 |
sys.stdout 사용방법flush() 메서드 (0) | 2022.09.18 |
자바에는 '조건이 true가 될 때까지 차단' 함수가 있습니까? (0) | 2022.09.18 |