matplotlib x轴日期(字符串等其他类型也可)倾斜显示

       在画时间序列图时,如果x轴的日期较多,且水平排列的话,会使得在视觉上比较拥挤,不太美观。

       在matplotlib中,有一种高效简单的方式是直接利用图片对象的autofmt_xdate方法,其中有一个rotation参数表示逆时针旋转的度数。假设现在图片对象为fig,则通过fig.autofmt_xdate(rotation=35),便可以让日期逆时针旋转35度的方式显示出来。

       网上有些方法是利用xtick方法中的rotation参数,该方法在双y轴中会失效,但是本文的方法在双y轴图中同样起作用。

       最后,如果使用pandas中的plot函数画图,那么可以通过df.plott().get_figure()函数获取图片对象,然后再使用autofmt_xdate()方法即可。

       需要特别说明的是,虽然该方法旨在调整日期的显示,但是x轴的刻度不必时间类型,可以字符串、数字等其他对象,该方法同样也会进行对其旋转。

### 如何设置或修改 Matplotlib 折线图 X 上的标签与刻度 #### 使用 `plt.xticks` 函数自定义 X 刻度和标签 为了更好地控制图表中的 X ,可以利用 `matplotlib.pyplot.xticks()` 方法来自定义刻度位置及其对应的标签。此方法接受两个主要参数:一个是用于指定哪些数值处应该放置标记的位置列表;另一个则是关联这些位置的文字说明数组。 对于简单的数据集而言,可以直接通过传递给定范围内的一系列整数来作为新的刻度点,并且如果希望改变默认样式的话,则可进一步提供个性化的字符串形式的标签[^1]。 ```python import matplotlib.pyplot as plt x_values = list(range(11)) y_values = [x ** 2 for x in x_values] plt.plot(x_values, y_values) # 自定义X刻度及标签 custom_ticks_positions = [0, 5, 10] custom_labels = ['Start', 'Middle', 'End'] plt.xticks(custom_ticks_positions, custom_labels) plt.show() ``` #### 处理时间序列数据时调整 X 格式化方式 当涉及到处理日期型变量并将其展示于图形界面之中时,Matplotlib 提供了专门针对此类情况的功能——`mdates.DateFormatter` 类可以帮助实现对特定时间段内各个时间节点更加精细地呈现效果[^4]。 下面的例子展示了怎样把一系列 datetime 对象映射成可视化的日历视图: ```python from datetime import timedelta, date import numpy as np import matplotlib.dates as mdates import matplotlib.pyplot as plt def daterange(start_date, end_date): for n in range(int((end_date - start_date).days)): yield start_date + timedelta(n) start_dt = date(2014, 9, 1) end_dt = date(2014, 9, 30) dates = list(daterange(start_dt, end_dt)) data_points = np.random.rand(len(dates)) * 100 fig, ax = plt.subplots() ax.plot(dates, data_points) # 定制X的时间格式 formatter = mdates.DateFormatter('%Y-%m-%d') ax.xaxis.set_major_formatter(formatter) # 避免重叠问题,自动优化布局 fig.autofmt_xdate() plt.tight_layout() plt.show() ``` 上述代码片段实现了从某个月的第一天到最后一天每天都有一个记录点的效果,同时确保每个条目都能清晰可见而不至于因为过密而难以辨认。 #### 控制其他属性如倾斜角度等细节设定 除了基本的内容定制外,还可以借助额外选项比如旋转角(`rotation`) 来改善阅读体验,尤其是在面对较长文字串的情况下尤为有用。此外,也可以考虑增加字体大小或其他视觉增强措施以提高整体美观程度[^3]。 ```python import matplotlib.pyplot as plt hours = range(2, 26, 2) temperatures = [random.randint(12, 35) for _ in hours] plt.figure(figsize=(20, 8), dpi=80) hour_labels = [f"{h}:00" for h in hours] temperature_labels = [f"{t}°C" for t in temperatures] plt.xticks(hours, hour_labels, rotation=45, fontsize='large') # 倾斜45度显示小时标记 plt.yticks([min(temperatures), max(temperatures)], [f'{min(temperatures)}°C', f'{max(temperatures)}°C']) plt.plot(hours, temperatures) plt.grid(True) plt.title('Hourly Temperature Changes') plt.show() ``` 这段脚本不仅设置了水平方向上的间隔分布模式,还加入了垂直维度的信息补充,使得整个图像既直观又详尽。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值