0

我有一个包含日期时间数据的数据框,它的列显示不同假期有多少天。我想创建该数据的直方图,并尝试了以下代码:

holiday_features = [name for name in df.columns if 'DAYS FROM' in name]
for feature in holiday_features:
    plt.hist(df[feature], bins=12)
    plt.title(feature)
    plt.xticks(rotation=60)
    plt.show()

当我创建该循环时,出现如下直方图:

DAYS FROM NEW YEARS 柱状图

刻度似乎代表每一个特征,而不仅仅是垃圾箱。将直方图放大到淫秽的比例证实了这一点:

plt.figure(figsize=(70,70))

我只对 bin 刻度感兴趣,而不是功能刻度。如何删除这些刻度以制作更整洁的直方图?

4

1 回答 1

0

我的建议是使用subplots ,并在Axes类上操作 xticks 。

例如,对于单个图:

_, axis = plt.subplots(1, 1) # create an Axes class for a single plot
axis.hist(data, bins=12)
axis.set_xticklabels(axis.get_xticks(), rotation=60)
plt.show()

上面的代码产生了一个具有以下美学的图:

在此处输入图像描述

此外,考虑到在您的情况下,您正在绘制许多特征,您可以使用 subplots 函数生成绘图网格,如下所示:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import seaborn as sns

holiday_features = [name for name in df.columns if 'DAYS FROM' in name]

# define number of rows and columns to the subplot
ncols = 3  # considering a grid with 3 plots per row
nrows = int(np.ceil(len(holiday_features)/3))

# create subplots
_, axes = plt.subplots(nrows, ncols)
axes = axes.flatten()

# plot features with rotated ticks
for j, feature in enumerate(holiday_features):
    axes[j].hist(df[feature], bins=12)
    axes[j].set_title(feature)
    axes[j].set_xticklabels(axes[j].get_xticks(), rotation=60)
    
# remove empty plots
for k in range(j, len(axes)):
    sns.despine(ax=axes[k], top=True, right=True, left=True, bottom=True)
    axes[k].xaxis.set_major_formatter(ticker.NullFormatter())
    axes[k].xaxis.set_ticks_position('none')
    axes[k].yaxis.set_major_formatter(ticker.NullFormatter())
    axes[k].yaxis.set_ticks_position('none')

# show plot
plt.tight_layout()
plt.show()
于 2020-09-24T02:50:26.827 回答