在 matplotlib 中绘图时如何隐藏毫秒数?
How to hide milliseconds when plotting in matplotlib?
我使用的数据是毫秒分辨率的,所以我无法在绘图时删除它们。
我使用以下代码将年中的第几天、小时-分钟-秒-毫秒更改为简单的
小时-分钟-秒-毫秒
df['epoch'] = pd.to_datetime(df.epoch, format='%Y-%m-%dT%H:%M:%S.%f')
df['time'] = df['epoch'].dt.strftime('%H:%M:%S.%f')
为了删除毫秒,我可以简单地从此行('%H:%M:%S.%f')中删除 f,但是由于它有毫秒级的步长,因此绘图无法正常工作。那么我怎样才能以毫秒为单位进行绘图,然后在绘图时将其隐藏在 x 轴上呢?
有两种方法可以做到这一点。
首先是 resample
不包括毫秒的数据,并按照与您相同的方式绘制。您可以 select 为 resample
设置 period
,这样您就可以减少信号而不改变它。
编辑:也许我不应该包括这个 b/c 你特别要求将 ms
数据留在原地并且根本不绘制它。 如果您不想降低信号,请跳过这部分答案。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Create 1 min of synthetic data with ms time resolutions.
ind = pd.date_range(start='2022-01-01T12:00:00', end='2022-01-01T12:00:01', freq='ms')
data = np.random.randint(0, 255, size=ind.shape[0])
df = pd.DataFrame(data={"data": data}, index=ind)
# convert to periodic index
p_ind = df.index.to_period('s')
df.index = p_index
df.plot()
第二种方法是不使用built-in Pandas绘图,而是创建自己的图形和坐标轴。这是控制情节细节的唯一方法。内置的 Pandas 仅适用于快速而肮脏的工作。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Create 100 ms of synthetic data with ms time resolutions.
ind = pd.date_range(start='2022-01-01T12:00:00', end='2022-01-01T12:00:00.10', freq='ms')
data = np.random.randint(0, 255, size=ind.shape[0])
df = pd.DataFrame(data={"data": data}, index=ind)
fig, ax = plt.subplots(nrows=1) # the subplots with the 's'
ax.xaxis.set_tick_params(which="major", rotation=45)
ax.plot(df)
您可能需要更多控制,最好使用刻度定位器功能。我会把它留给你去研究,但它已被解释 。
我使用的数据是毫秒分辨率的,所以我无法在绘图时删除它们。
我使用以下代码将年中的第几天、小时-分钟-秒-毫秒更改为简单的 小时-分钟-秒-毫秒
df['epoch'] = pd.to_datetime(df.epoch, format='%Y-%m-%dT%H:%M:%S.%f')
df['time'] = df['epoch'].dt.strftime('%H:%M:%S.%f')
为了删除毫秒,我可以简单地从此行('%H:%M:%S.%f')中删除 f,但是由于它有毫秒级的步长,因此绘图无法正常工作。那么我怎样才能以毫秒为单位进行绘图,然后在绘图时将其隐藏在 x 轴上呢?
有两种方法可以做到这一点。
首先是 resample
不包括毫秒的数据,并按照与您相同的方式绘制。您可以 select 为 resample
设置 period
,这样您就可以减少信号而不改变它。
编辑:也许我不应该包括这个 b/c 你特别要求将 ms
数据留在原地并且根本不绘制它。 如果您不想降低信号,请跳过这部分答案。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Create 1 min of synthetic data with ms time resolutions.
ind = pd.date_range(start='2022-01-01T12:00:00', end='2022-01-01T12:00:01', freq='ms')
data = np.random.randint(0, 255, size=ind.shape[0])
df = pd.DataFrame(data={"data": data}, index=ind)
# convert to periodic index
p_ind = df.index.to_period('s')
df.index = p_index
df.plot()
第二种方法是不使用built-in Pandas绘图,而是创建自己的图形和坐标轴。这是控制情节细节的唯一方法。内置的 Pandas 仅适用于快速而肮脏的工作。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Create 100 ms of synthetic data with ms time resolutions.
ind = pd.date_range(start='2022-01-01T12:00:00', end='2022-01-01T12:00:00.10', freq='ms')
data = np.random.randint(0, 255, size=ind.shape[0])
df = pd.DataFrame(data={"data": data}, index=ind)
fig, ax = plt.subplots(nrows=1) # the subplots with the 's'
ax.xaxis.set_tick_params(which="major", rotation=45)
ax.plot(df)
您可能需要更多控制,最好使用刻度定位器功能。我会把它留给你去研究,但它已被解释