Построение более 10 000 точек данных с использованием Seaborn для оси x в качестве отметки времени

Я пытаюсь построить более 10 тыс. Точек данных, где я хочу отобразить свойства данных по сравнению с отметкой времени. Но на оси X отметки времени перекрываются и не видны.

Как уменьшить количество надписей на оси x, чтобы они были удобочитаемыми?

import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
sns.set_style("whitegrid")

data = pd.read_csv('0912Testday4.csv',header=2)

for i in data.columns:
    if i!='TIMESTAMP':
        sns.lineplot(x="TIMESTAMP",y=i,data = data)
        plt.title(f"{i} vs TIMESTAMP")
        plt.show()

Пример графика, демонстрирующий проблему:

Пример сюжета, демонстрирующего проблему

Обновление:TIMESTAMP был в формате строки путем преобразования в datatime формат это решает проблему.

data['TIMESTAMP'] = pd.to_datetime(data['TIMESTAMP'])

3 ответа

Обновление:TIMESTAMP был в строковом формате путем преобразования в формат даты и времени, это решает проблему.

data['TIMESTAMP'] = pd.to_datetime(data['TIMESTAMP'])

Пожалуйста, убедитесь, что TIMESTAMPэто объект datetime. Этого не должно происходить, если ось x является датой и временем. (Ты можешь использоватьpd.to_datetime для преобразования int, float, str и... в datetime.)

Если TIMESTAMP является datetime, вы можете использовать autofmt_xdate() метод:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

fig, ax = plt.subplots() # Create a figure and a set of subplots.

sns.set_style("whitegrid")

data = pd.read_csv('0912Testday4.csv',header=2)

# Use the following line if the TIMESTAMP is not a datetime.
# (You may need to change the format from "%Y-%m-%d %H:%M:%S+00:00".)
# data['TIMESTAMP'] = pd.to_datetime(data.TIMESTAMP, format="%Y-%m-%d %H:%M:%S+00:00")

for i in data.columns:
    if i!='TIMESTAMP':
        sns.lineplot(x="TIMESTAMP", y=i, data=data, ax=ax)
        fig.autofmt_xdate() # rotate and right align date ticklabels
        plt.title(f"{i} vs TIMESTAMP")
        plt.show()

Я не сталкивался с такой проблемой с sns.lineplot

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns

sns.set_style("whitegrid")

# example data
time_stamps = pd.date_range('2019-01-01', '2020-01-01', freq='H')
vals =[np.random.randint(0, 1000) for i in time_stamps]
data_df = pd.DataFrame()
data_df['time'] = time_stamps
data_df['value'] = vals
print(data_df.shape)

# plotting
fig, ax = plt.subplots()
sns.lineplot(x='time', y='value', data=data_df)


plt.show()

sns автоматически выбирает метки x и метки x.

в качестве альтернативы вы можете использовать ax.set_xticks а также ax.set_xlabelsчтобы вручную установить метки x и x. Также вы можете использовать fig.autofmt_xdate() для поворота меток x

Другие вопросы по тегам