pandas Python和matplotlib -x轴上的许多日期

wlzqhblo  于 2023-04-18  发布在  Python
关注(0)|答案(1)|浏览(109)

我有一个dataframe,它报告了调用了多少次。我已经按报告和日期总结了它。现在,当我用matplotlib绘制整个事情时,我总是有太多的日期显示。
记录示例(报告名称、日期、计数):

8  ADOSperrenVK.avx"  2023-04-17   7278 
9  ADOSperrenVK.avx"  2023-04-18   4591

我的代码(从数据导入不在代码中):

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

# Datum konvertieren
df['TimeStamp'] = pd.to_datetime(df['TimeStamp'])

# Nur das Datum extrahieren
df['Date'] = df['TimeStamp'].dt.date

# Gruppieren nach Report und Datum und zählen
df_grouped = df.groupby([df['Report'], df['Date']]).size().reset_index(name='count')

# Top 10 Berichte auswählen
top_10_reports = df_grouped.groupby('Report').sum().nlargest(10, 'count').index.values
df_top_10 = df_grouped[df_grouped['Report'].isin(top_10_reports)]
unique_reports = df_top_10['Report'].unique().tolist()

# Schleife über die Berichte und Erstellung der Plots
for report in unique_reports:
    # DataFrame für den aktuellen Bericht erstellen
    df_report = df_top_10[df_top_10['Report'] == report]

    # Plot erstellen
    x = pd.to_datetime(df_report['Date'])
    y = df_report['count']
    plt.bar(x, y)
    plt.title(report)  # Titel für den Plot setzen
    plt.xlabel('Date')  # x-Achsenbeschriftung setzen
    plt.ylabel('Count')  # y-Achsenbeschriftung setzen
    plt.xticks(rotation=45)  # X-Achsenbeschriftungen um 45 Grad drehen
    plt.show()  # Plot anzeigen

结果是这样的

我需要做什么,我在x轴上只有2个条目(示例中的2023-04-17和2023-04-18)?

2mbi3lxu

2mbi3lxu1#

使用Pandas绘制条形图,否则Matplotlib尝试使用AutoLocator推断xlabel类型:

for report in unique_reports:
    # DataFrame für den aktuellen Bericht erstellen
    df_report = df_top_10[df_top_10['Report'] == report]

    # Plot erstellen
    ax = df_report.plot.bar(x='Date', y='count', title=report, rot=45)
    plt.tight_layout()
    plt.show()  # Plot anzeigen

输出

温馨提示

使用groupby代替unique

# unique_reports = df_top_10['Report'].unique().tolist()

# for report in unique_reports:
#     # DataFrame für den aktuellen Bericht erstellen
#     df_report = df_top_10[df_top_10['Report'] == report]

for report, df_report in df_top_10.groupby('Report'):
    ...

相关问题