我有一个包含一些城市的数据框。 该 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()
如您所见,我已经划定了不同的城市(“Estacao”)。 我该如何改进?
我在没有测试的情况下给出了我的答案,因为没有提供总数。 这是您可以做到的方法
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()