Python - Изменение формата нижних значений для отображения месяца - PullRequest
0 голосов
/ 23 ноября 2018

Новичок в python и pandas, моя функция работает правильно, ища существующий код, однако я хочу изменить нижние значения с цифр на фактические тексты, которые в этом случае будут месяцами.

from sklearn.cluster import AgglomerativeClustering as AC

def scale_df(df,axis=0):
    return (df - df.mean(axis=axis))/df.std(axis=axis)


colormap = sns.diverging_palette(220, 10, as_cmap=True)
def plot_hmap(df, ix=None, cmap=colormap):
    if ix is None:
        ix = np.arange(df.shape[0])
    plt.imshow(df.iloc[ix,:], cmap=cmap)
    plt.colorbar(fraction=0.03)
    plt.yticks(np.arange(df.shape[0]), df.index[ix])
    plt.xticks(np.arange(df.shape[1]))
    plt.grid(False)
    plt.show()

def scale_and_plot(df, ix=None):
    df_marginal_scaled = scale_df(df.T).T
    if ix is None:
        ix = AC(4).fit(df_marginal_scaled).labels_.argsort() # a trick to make better heatmaps
    cap = np.min([np.max(df_marginal_scaled.values), np.abs(np.min(df_marginal_scaled.values))])
    df_marginal_scaled = np.clip(df_marginal_scaled, -1*cap, cap)
    plot_hmap(df_marginal_scaled, ix=ix)

month_by_type = crimeDataMonth.pivot_table(values='Month', index='Crime type', columns=crimeDataMonth.index.month, aggfunc=np.size).fillna(0)

 plt.figure(figsize=(15,12))
 scale_and_plot(month_by_type)

enter image description here

Моя таблица содержит месяц: enter image description here

1 Ответ

0 голосов
/ 24 ноября 2018

Если я правильно понимаю, вы хотели бы изменить метки на оси X графика с чисел [0, 1, ... 11]
на названия соответствующих месяцев ['Январь', 'Февраль', ... 'декабрь'].

Если это так, вы можете сделать это, используя это:

# Get the current locations of the labels
locations, labels = plt.xticks()
# Set the values of the new labels
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July',
          'August', 'September', 'October', 'November', 'December']
# Place the new labels
plt.xticks(locations, labels=months)

Вы можете сделать это с использованием менее жестко заданных значений, используя модуль calendar:

import calendar
locations, labels = plt.xticks()
months = [calendar.month_name[n] for n in range(1, 13, 1)]
plt.xticks(locations, labels=months)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...