[英]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.