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