繁体   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