You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Matplotlib可视化时X轴日期数据显示异常,求代码排查方向

问题描述

使用CSV文件绘制图表时,希望将表格中「시점」列的日期数据作为X轴,但X轴显示异常(日期重叠、排版混乱)。以下是使用的Python代码:

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

def get_font_family():
    import platform
    system_name = platform.system()

    if system_name == "Darwin":
        font_family = "AppleGothic"
    elif system_name == "Windows":
        font_family = "Malgun Gothic"   
    
    return font_family

plt.rc("font", family=get_font_family())

df_price_index = pd.read_csv("/Users/sun/Downloads/품목별_소비자물가지수_품목성질별_2020100__20240626234308.csv", encoding='cp949')

df_price = df_price_index[df_price_index["품목별"] == "총지수"].copy() # 총지수 품목만 추출하여 복사본 생성

df_price["전년동월대비"] = df_price["데이터"].pct_change(periods=12) * 100 # 전년 동월 대비 증감률 계산

# print(df_price.dropna()) # 결측값 제거 후 데이터 출력 

df_price_notnan = df_price.dropna()

print(df_price_notnan)

plt.figure(figsize=(10,4))

plt.plot(df_price_notnan['시점'], df_price_notnan['전년동월대비'], marker=".")
问题原因

「시점」列读取后是字符串类型,matplotlib会将其视为普通文本标签,不会识别为日期,因此无法自动优化X轴的排版(比如自动调整显示间隔、旋转标签),导致显示混乱。

解决方案

将「시점」列转换为日期时间类型,让matplotlib识别为日期数据,从而自动优化X轴显示:

  1. 在清理数据后,添加日期转换代码(根据实际日期格式调整format参数):
# 假设「시점」列格式为YYYY.MM,转换为日期类型
df_price_notnan['시점'] = pd.to_datetime(df_price_notnan['시점'], format='%Y.%m')
  1. 绘制图表后,添加X轴标签旋转,进一步优化可读性:
plt.xticks(rotation=45) # 旋转X轴标签45度,避免重叠
plt.tight_layout() # 自动调整布局,防止标签被截断
plt.show() # 显示图表
修改后的完整代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

def get_font_family():
    import platform
    system_name = platform.system()

    if system_name == "Darwin":
        font_family = "AppleGothic"
    elif system_name == "Windows":
        font_family = "Malgun Gothic"   
    
    return font_family

plt.rc("font", family=get_font_family())

df_price_index = pd.read_csv("/Users/sun/Downloads/품목별_소비자물가지수_품목성질별_2020100__20240626234308.csv", encoding='cp949')

df_price = df_price_index[df_price_index["품목별"] == "총지수"].copy() # 총지수 품목만 추출하여 복사본 생성

df_price["전년동월대비"] = df_price["데이터"].pct_change(periods=12) * 100 # 전년 동월 대비 증감률 계산

df_price_notnan = df_price.dropna()

# 关键修改:转换日期格式
df_price_notnan['시점'] = pd.to_datetime(df_price_notnan['시점'], format='%Y.%m')

plt.figure(figsize=(10,4))
plt.plot(df_price_notnan['시점'], df_price_notnan['전년동월대비'], marker=".")

# 优化X轴显示
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

注意:如果「시점」列日期格式不是YYYY.MM,需调整format参数,比如YYYYMM对应%Y%m,YYYY-MM对应%Y-%m。

内容的提问来源于stack exchange,提问作者littleBoyyy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 16:10:57