pandas 如何使用时间作为海运的x轴,散点图

b1payxdu  于 2023-05-12  发布在  其他
关注(0)|答案(2)|浏览(140)

我有一个简单的dataframe与时间作为索引和虚拟值的例子。

我做了一个简单的散点图,如你所见:

简单的问题:如何调整xaxis,以便从00:00到23:00的所有时间值在xaxis中可见?图的其余部分很好,它显示了所有的数据点,它只是标签。尝试了不同的方法,但没有成功。
到目前为止,我的代码是:

import pandas as pd
import seaborn as sns
import matplotlib.dates as mdates
from datetime import time

data = []
for i in range(0, 24):
    temp_list = []
    temp_list.append(time(i))
    temp_list.append(i)
    data.append(temp_list)

my_df = pd.DataFrame(data, columns=["time", "values"])    
my_df.set_index(['time'],inplace=True)
my_df
fig = sns.scatterplot(x=my_df.index, y=my_df['values'])
fig.set(xlabel='time', ylabel='values')
wko9yo5t

wko9yo5t1#

我想你得去matplotlib的水平:

import pandas as pd
import seaborn as sns
import matplotlib.dates as mdates
from datetime import time
import matplotlib.pyplot as plt

data = []
for i in range(0, 24):
    temp_list = []
    temp_list.append(time(i))
    temp_list.append(i)
    data.append(temp_list)

df = pd.DataFrame(data, columns=["time", "values"])  
df.time = pd.to_datetime(df.time, format='%H:%M:%S')
df.set_index(['time'],inplace=True)
ax = sns.scatterplot(x=df.index, y=df["values"])
ax.set(xlabel="time", ylabel="measured values")
ax.set_xlim(df.index[0], df.index[-1])
ax.xaxis.set_major_locator(mdates.HourLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M:%S"))
ax.tick_params(axis="x", rotation=45)

这产生

jjjwad0x

jjjwad0x2#

我想你有两个选择:
1.转换时间到小时只,为那只是提取小时到新的专栏在您的df
df['hour_'] = datetime.hour
而不是用它作为你的x轴
1.如果您需要所描述格式的时间,则可能会导致可见性问题,其中时间戳将彼此重叠。我正在使用
plt.xticks(rotation=45,horizontalalignment='right')
ax.xaxis.set_major_locator(plt.MaxNLocator(12))
所以首先我旋转文本然后我限制刻度数。
下面是我使用它的完整脚本:

sns.set()
sns.set_style("whitegrid")
sns.axes_style("whitegrid")

for k, g in df_forPlots.groupby('your_column'):
    fig = plt.figure(figsize=(10,5))
    wide_df = g[['x', 'y', 'z']]
    wide_df.set_index(['x'], inplace=True)
    ax = sns.lineplot(data=wide_df)
    plt.xticks(rotation=45,
                   horizontalalignment='right')
    ax.yaxis.set_major_locator(plt.MaxNLocator(14))
    ax.xaxis.set_major_locator(plt.MaxNLocator(35))
    plt.title(f"your {k} in somthing{g.z.unique()}")
    plt.tight_layout()

希望我停止

相关问题