重新定义热图中的 x 轴 seaborn

问题描述 投票:0回答:1

我有一个包含一些城市的数据框。 该 DataFrame 有 5 列(城市、日期和 3 列值)。

日期值从 01/01/2015 到 31/12/2019。

我做了一个绘制它的代码。但我需要改进两点: x 轴需要是每月,我还需要一条黑线来分隔这些每月日期。

total_matrix = total.pivot_table(index="Estacao", columns="Date", values="Media_Horaria_MP10")

fig, ax = plt.subplots(figsize=(18, 9), dpi=150) 

ax = sns.heatmap(total_matrix, cmap = 'crest')
for i in range(total_matrix.shape[1]+1):
    ax.axhline(i, color='black', lw=2)

plt.title('MP10')
plt.show()

enter image description here

如您所见,我已经划定了不同的城市(“Estacao”)。 我该如何改进?

python seaborn heatmap
1个回答
0
投票

我在没有测试的情况下给出了我的答案,因为没有提供总数。 这是您可以做到的方法

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Assuming total is your DataFrame
# Ensure 'Date' is in datetime format
total['Date'] = pd.to_datetime(total['Date'])

# Pivot the data
total_matrix = total.pivot_table(
    index="Estacao", columns="Date", values="Media_Horaria_MP10")

# Create the plot
fig, ax = plt.subplots(figsize=(18, 9), dpi=150)

# Plot the heatmap
ax = sns.heatmap(total_matrix, cmap='crest', cbar=True)


# This iterates over the columns (dates), adds a vertical line for the start of each month
for date in total_matrix.columns:
    if date.day == 1: 
        ax.axvline(total_matrix.columns.get_loc(date), color='green', lw=2)

# Set x-axis with monthly labels
ax.set_xticks([total_matrix.columns.get_loc(date)
              for date in total_matrix.columns if date.day == 1])
ax.set_xticklabels([date.strftime('%b-%Y')
                   for date in total_matrix.columns if date.day == 1], rotation=45)

plt.title('MP10')
plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.