독립 축에 시간 표시
타임스탬프의 형식(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)
파이플롯을 사용하여 타임스탬프, 값 쌍을 표시할 수도 있습니다.플롯(문자열 표현에서 구문 분석한 후).(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 파일을 저장합니다.이것은 실시간 그래프 애니메이션에 데이터를 제공하는 데 유용합니다.
다음은 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()
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()
이것은 사용자의 사용 사례에 이상적이지 않을 수 있지만 다른 사용자에게 도움이 될 수 있습니다.
언급URL : https://stackoverflow.com/questions/1574088/plotting-time-on-the-independent-axis
'programing' 카테고리의 다른 글
| scipy.pi, numpy.pi 또는 math.pi를 사용해야 합니까? (0) | 2023.07.18 |
|---|---|
| Oracle 매개 변수를 변환합니다.Int32에 대한 값 (0) | 2023.07.18 |
| 텍스트 파일에 다차원 배열을 쓰는 방법은 무엇입니까? (0) | 2023.07.18 |
| Python을 사용하여 gz 파일의 압축을 푸는 방법 (0) | 2023.07.18 |
| 두 열의 상관 관계를 가져오려면 .corr 사용 (0) | 2023.07.13 |




