programing

독립 축에 시간 표시

javajsp 2023. 7. 18. 21:31

독립 축에 시간 표시

타임스탬프의 형식(HH:MM:SS.mmmmmmm) 및 각각 타임스탬프 배열의 값에 해당하는 부동 소수점 번호 배열.

Matplotlib을 사용하여 x축에 시간을 표시하고 y축에 숫자를 표시할 수 있습니까?

그러려고 했지만, 어찌된 일인지 플로트의 배열만 수용하고 있었습니다.어떻게 하면 시간을 표시할 수 있을까요?제가 어떤 식으로든 형식을 수정해야 하나요?

업데이트:

이 답변은 matplotlib 버전 3.5 이후로 구식입니다.plot이제 function이 datetime 데이터를 직접 처리합니다.https://matplotlib.org/3.5.1/api/_as_gen/matplotlib.pyplot.plot_date.html 을 참조하십시오.

plot_date는 사용하지 마십시오.이 방법은 역사적인 이유로 존재하며 나중에 더 이상 사용되지 않을 수 있습니다.

날짜 시간과 유사한 데이터는 플롯을 사용하여 직접 플롯해야 합니다.

일반 숫자 데이터를 Matplotlib 날짜 형식으로 플롯해야 하거나 시간대를 설정해야 하는 경우 ax.xaxis를 호출합니다.axis_date / axis.y축.플롯 전의 axis_date.축을 참조하십시오.axis_date.


오래된 오래된 답변:

먼저 타임스탬프를 Python으로 변환해야 합니다.datetime객체(사용)datetime.strptime). 그런 다음 을 사용합니다.date2num날짜를 matplotlib 형식으로 변환합니다.

다음을 사용하여 날짜와 값을 표시합니다.

import matplotlib.pyplot as plt
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)
plt.plot_date(dates, y_values)

enter image description here

파이플롯을 사용하여 타임스탬프, 값 쌍을 표시할 수도 있습니다.플롯(문자열 표현에서 구문 분석한 후).(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()

결과 이미지:

Line Plot


다음은 산점도와 동일합니다.

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()

다음과 유사한 이미지를 생성합니다.

Scatter Plot

7년 후에 이 코드가 저에게 도움이 되었습니다.하지만, 제 시간은 여전히 정확하게 나타나지 않았습니다.

enter image description here

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)로 변경하여 시간이 올바르게 표시되었습니다.enter image description here

모두 지역사회에 감사드립니다.

matplotlib 버전 2.0.2를 사용하는 데 문제가 있었습니다.위에서 예제를 실행하면 중앙에 쌓인 버블 세트를 얻을 수 있습니다.

graph with centered stack of bubbles

다른 줄을 추가하여 문제를 "수정"했습니다.

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()

이렇게 하면 원하는 대로 거품이 분포된 영상이 생성됩니다.

graph with bubbles distributed over time

판다 데이터 프레임은 아직 언급되지 않았습니다.저는 이것들이 제 데이트 시간 문제를 어떻게 해결했는지 보여주고 싶었습니다.데이트 시간이 밀리초까지 있습니다.2021-04-01 16:05:37/할 수 /proc는 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

팬더는 날짜 문자열을 "객체"로 끌어넣는데, 이것은 단지 글자체일 뿐입니다.스크립트에서 현재 상태로 사용:

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()

enter image description here

Matplotlib은 모든 밀리초 시간 데이터를 렌더링합니다.추가했습니다.plt.xticks(rotation=45)날짜를 늦추려고 했는데 그게 제가 원하는 게 아니에요.날짜 "객체"를 datetime64[ns]로 변환할 수 있습니다.렌더링 방법을 알고 있는 매트플롯립.

dataframe["date"] = pd.to_datetime(dataframe["date"]) 

이번에는 제 데이트 상대가 유형입니다.datetime64[ns]

(base) ➜  graphs ./throughput.py
date    datetime64[ns]
mbps             int64
pps            float64
dtype:          object

한 줄 차이가 있는 동일한 스크립트입니다.

#!/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()

이것은 사용자의 사용 사례에 이상적이지 않을 수 있지만 다른 사용자에게 도움이 될 수 있습니다.

enter image description here

언급URL : https://stackoverflow.com/questions/1574088/plotting-time-on-the-independent-axis