Построение более 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