使用python和matplot

时间:2018-03-20 10:04:52

标签: python matplotlib axis-labels

我使用下面的代码在python中创建了一个基本的热图:

import pandas as pd
import matplotlib.ticker as ticker
import matplotlib.pyplot as plt

# FILE INPUT PATH
FILE_PATH_INPUT = 'C:/Python/'

# IMPORT FILE
flights_raw = pd.read_excel(FILE_PATH_INPUT+'flights.xlsx', sheetname='flights')
flights_raw["month"] = pd.Categorical(flights_raw["month"], flights_raw.month.unique())
flights_raw.head()

# CREATE MATRIX
flight_matrix = flights_raw.pivot("month", "year", "passengers")
flight_matrix

fig = plt.figure()
fig, ax = plt.subplots(1,1, figsize=(12,12))
heatplot = ax.imshow(flight_matrix, cmap='binary')
ax.set_xticklabels(flight_matrix.columns, rotation = 90)
ax.set_yticklabels(flight_matrix.index)

tick_spacing = 1
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
ax.yaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
ax.set_title("Variance of Delivery Days By Period")
ax.set_xlabel('DAYS LATE (-EARLY)')
ax.set_ylabel('PERIOD')

结果如下图所示。

enter image description here

但是我的轴标签似乎位于错误的位置。

我的Y轴应该全部掉落到一个空间,我的横轴应该全部向右移动,数据应该从1到14,而不是2-14。

我已经尝试更改刻度线间距,但这只是延伸了定位,我想我可能需要抵消标签的位置?

欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

如果不设置刻度,则不应设置刻度标签。这基本上做的是为轴保持AutoLocator,但为标签使用FixedFormatter

因此,当FixedFormatter使用set_xticklabels时,请始终确保使用FixedLocator,例如使用set_xticks

ax.set_xticks(list(range(len(labels))))
ax.set_xticklabels(labels)

当然在以这种方式设置格式化程序和定位器后,您不应该将它们设置为稍后的不同。因此,需要从代码中删除以下两行。

ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
ax.yaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))