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

Python绘图:如何将xticks调整为每4年显示一次的间隔

热带气旋时序图X轴刻度调整方案

我有1960-2020年的热带气旋数据,需绘制时序图:FRQ为柱状图,FILT为折线图。当前代码可生成图表,但无法将X轴刻度调整为每4年显示一次,使用Jupyter Notebook开发,求解决方案。

数据示例

YEAR    FRQ FILT
1960    1   
1961    3   
1962    1   1.416666667
1963    1   0.916666667
1964    0   0.833333333
1965    1   1.333333333
1966    3   1.75
1967    2   1.5
1968    0   0.833333333
1969    0   0.666666667
1970    1   1.166666667
1971    3   1.666666667
1972    1   1.833333333
1973    2   1.75
1974    2   1.5
1975    1   1
1976    0   0.5
1977    0   0.416666667
1978    1   0.833333333
1979    1   1.333333333
1980    3   1.5
1981    0   1.333333333
1982    2   1
1983    0   0.833333333
1984    1   0.75
1985    1   0.583333333
1986    0   0.5
1987    0   0.75
1988    2   1.166666667
1989    2   1.25
1990    0   0.916666667
1991    1   0.833333333
1992    0   1.25
1993    4   1.5
1994    0   1.416666667
1995    1   1.25
1996    2   1.416666667
1997    1   1.833333333
1998    3   2
1999    2   1.75
2000    1   1.166666667
2001    0   1.083333333
2002    1   1.666666667
2003    5   2
2004    0   1.75
2005    1   1.5
2006    2   1.75
2007    3   2.166666667
2008    1   2.333333333
2009    4   2.333333333
2010    1   2.25
2011    3   1.916666667
2012    1   1.5
2013    1   1.166666667
2014    1   0.916666667
2015    1   0.75
2016    0   0.666666667
2017    1   0.75
2018    1   0.833333333
2019    1   
2020    0   

当前运行代码

#Read Tropical cyclone frequency 
TC = pd.read_csv (r'G:\TC_Atlas\\data.csv', encoding="ISO-8859-1")
TC = pd.DataFrame(TC,columns=['YEAR','FRQ','FILT','FRQ2','FILT2','LMI','FILTLMI','LMI2','FILTLMI2'])
TC=  TC[TC['YEAR'].between(1960,2020,inclusive="both")]
#TC = TC.set_index('YEAR')

labels =['1960','1961','1962','1963','1964','1965','1966','1967','1968','1969','1970','1971','1972','1973','1974','1975',
    '1976','1977','1978','1979','1980','1981','1982','1983','1984','1985','1986','1987','1988','1989','1990','1991','1992',
    '1993','1994','1995','1996','1997','1998','1999','2000','2001','2002','2003','2004','2005','2006','2007','2008','2009',
    '2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020']

#Plot timeseries
TC['FRQ'].plot(kind='bar', color='lightgray', width=1, edgecolor='darkgray')
TC['FILT'].plot(kind='line',color='black')
plt.suptitle("TC Passage Frequency",fontweight='bold',y=0.95,x=0.53)
plt.title("Isabela (1960-2020)", pad=0)
L=plt.legend()
L.get_texts()[0].set_text('filtered')
plt.yticks(fontsize=12)
tickvalues = range(0,len(labels))
plt.xticks(ticks = tickvalues ,labels = labels, rotation = 30)

plt.xlabel('Year', color='black', fontsize=14, weight='bold',labelpad=10)
plt.ylabel('Frequency' , color='black', fontsize=14, weight='bold',labelpad=15)
plt.tight_layout()
plt.show()

解决方案

核心是只保留每4年的刻度标签,其余年份隐藏,同时保证刻度和数据对齐。以下是修改后的完整代码:

import pandas as pd
import matplotlib.pyplot as plt

# 读取热带气旋频率数据
TC = pd.read_csv(r'G:\TC_Atlas\\data.csv', encoding="ISO-8859-1")
# 只保留需要的列,简化数据结构
TC = TC[['YEAR','FRQ','FILT']]
TC = TC[TC['YEAR'].between(1960,2020,inclusive="both")]

# 绘制时序图:FRQ柱状图,FILT折线图
TC['FRQ'].plot(kind='bar', color='lightgray', width=1, edgecolor='darkgray')
TC['FILT'].plot(kind='line', color='black')

# 设置标题
plt.suptitle("TC Passage Frequency", fontweight='bold', y=0.95, x=0.53)
plt.title("Isabela (1960-2020)", pad=0)

# 调整图例显示
L = plt.legend()
L.get_texts()[0].set_text('filtered')

# 设置Y轴刻度字体大小
plt.yticks(fontsize=12)

# 关键:设置每4年显示一次的X轴刻度
years = TC['YEAR'].tolist()
# 筛选出1960开始每4年的年份
tick_years = [year for year in years if year % 4 == 0]
# 获取这些年份在数据中的索引位置
tick_positions = [years.index(year) for year in tick_years]
# 应用刻度:仅在指定位置显示对应年份标签
plt.xticks(ticks=tick_positions, labels=tick_years, rotation=30)

# 设置坐标轴标签
plt.xlabel('Year', color='black', fontsize=14, weight='bold', labelpad=10)
plt.ylabel('Frequency', color='black', fontsize=14, weight='bold', labelpad=15)

plt.tight_layout()
plt.show()

关键修改点说明

  • 移除了手动维护的labels列表,直接从数据中提取年份,避免手动输入错误
  • 通过year % 4 == 0筛选每4年的年份,确保间隔准确
  • 用years.index(year)获取对应数据索引,保证刻度和柱状图位置完全对齐
  • 仅给筛选后的位置设置标签,其余年份自动隐藏,解决刻度重叠问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:00:53