我使用下面的代码在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')
结果如下图所示。
但是我的轴标签似乎位于错误的位置。
我的Y轴应该全部掉落到一个空间,我的横轴应该全部向右移动,数据应该从1到14,而不是2-14。
我已经尝试更改刻度线间距,但这只是延伸了定位,我想我可能需要抵消标签的位置?
欢迎任何建议。
答案 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))