sourcecode

Matplotlib가 있는 Python의 플롯 시간

copyscript 2022. 9. 18. 10:04
반응형

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

반응형