簡體   English   中英

seaborn 線圖設置 x 軸刻度間隔以實現可見性

[英]seaborn lineplot set x-axis scale interval for visibility

plot 這個圖是這樣的:

plt.figure(1, figsize = (20,8))
ax = sns.lineplot(data=df, x=df['timestamp'], y=df['speed'])

plt.xticks(rotation=90)
plt.title('Trip 543365 timeline', fontsize=22)
plt.ylabel('GPS speed', fontsize=18)
plt.xlabel('Timestamp', fontsize=16,)
plt.savefig('trip537685', dpi=600)

在此處輸入圖像描述

盡管設置plt.xticks(rotation=90) ,但x-axis不可讀,如何更改比例使其看起來可讀?

由於您沒有提供數據,我采用了一些約 1500 行的隨機數據,日期時間為 DD-MM-YYYY 格式。 首先,因為這是文本,所以使用to_datetime()將其更改為日期時間,然后使用 plot 將其更改為日期時間。 正如@JohanC 所說,這應該會給你帶來相當好的結果。 但是,如果您仍然需要調整它,請使用set_major_locator()set_major_formatter()根據需要進行調整。 我已將其顯示為 3 個月的間隔。 但是,您可以根據需要對其進行調整。 希望這可以幫助。

df=pd.read_csv('austin_weather.csv')
df.rename(columns={'Date': 'timestamp'}, inplace=True)
df.rename(columns={'TempHighF': 'speed'}, inplace=True)

df['timestamp']=pd.to_datetime(df['timestamp'],format="%d-%m-%Y")

plt.figure(1, figsize = (20,8))
ax = sns.lineplot(data=df, x=df['timestamp'], y=df['speed'])

import matplotlib.dates as mdates
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=3))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b-%Y'))

在此處輸入圖像描述

似乎您繪制了很多數據點,因此由於 label 字體大小,xticks 只是被覆蓋了。

如果您不需要顯示每一個 x-ticks,您可以設置帶有xticks的 label 位置以及一個數組以僅顯示每第 n 個刻度。

資料准備:
僅以 x 軸標簽的字符串為例。

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


def random_string():
    return ''.join(random.choices(string.ascii_lowercase +
                   string.digits, k=7))


size=1000
x_list = []

for i in range(size):
    x_list.append(random_string())

y = np.random.randint(low=0, high=50, size=size)

df = pd.DataFrame(list(zip(x_list, y)),
                  columns =['timestamp', 'speed'])

Plot 有很多數據點供參考

plt.figure(1, figsize = (20,8))
ax = sns.lineplot(data=df, x=df['timestamp'], y=df['speed'])

plt.xticks(rotation=90)
plt.title('Trip 543365 timeline', fontsize=22)
plt.ylabel('GPS speed', fontsize=18)
plt.xlabel('Timestamp', fontsize=16,)

plt.show()

在此處輸入圖像描述

Plot 減少 xticks:

plt.figure(1, figsize = (20,8))
ax = sns.lineplot(data=df, x=df['timestamp'], y=df['speed'])

plt.xticks(rotation=90)
plt.title('Trip 543365 timeline', fontsize=22)
plt.ylabel('GPS speed', fontsize=18)
plt.xlabel('Timestamp', fontsize=16,)

every_nth_xtick = 50
plt.xticks(np.arange(0, len(x_list)+1, every_nth_xtick))

plt.show()

在此處輸入圖像描述


要交叉檢查,您可以添加:

print(x_list[0])
print(x_list[50])
print(x_list[100])

只要確保它在同一個隨機調用中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM