如何修改Matplotlib中X轴刻度文本的部分样式(颜色、字号等)
如何单独修改Matplotlib刻度文本中部分内容的样式
你当前用Pandas和Matplotlib生成的X轴刻度里,部分标签包含两行文本(时间+日期),希望仅修改日期部分的外观(如颜色、字号),而非整个刻度标签。由于Matplotlib默认的刻度标签是单一样式的文本对象,无法直接拆分修改,可通过**富文本(Rich Text)**实现需求,以下是具体方案:
方法一:使用HTML富文本
这种方式无需额外依赖,适合快速实现:
import pandas as pd import matplotlib.pyplot as plt def xtick_labels(time_range): labels = [] for i in time_range: if i.strftime("%H:%M:%S") == "00:00:00": # 用HTML标签给日期部分设置样式(红色、小字号) label = f"{i.strftime('%H:%M')}<br><span style='color:red; font-size:10px;'>{i.strftime('%Y-%m-%d')}</span>" else: label = i.strftime("%H:%M") labels.append(label) return labels # 确保关闭LaTeX,开启HTML支持 plt.rcParams['text.usetex'] = False plt.rcParams['text.html'] = True fig, ax = plt.subplots(figsize=(20, 4)) time_range = pd.date_range('01.01.2020 00:00:00', '01.03.2020 01:00:00', freq='2H') ax.plot(time_range, len(time_range)*[1]) labels = xtick_labels(time_range) ax.set_xticks(time_range) ax.set_xticklabels(labels, fontsize=12) plt.tight_layout() plt.show()
方法二:使用LaTeX格式
适合需要更复杂排版的场景,但需系统提前安装LaTeX环境(如TeX Live、MiKTeX):
import pandas as pd import matplotlib.pyplot as plt def xtick_labels(time_range): labels = [] for i in time_range: if i.strftime("%H:%M:%S") == "00:00:00": # LaTeX命令设置日期部分样式(红色、小字号) label = f"{i.strftime('%H:%M')}\\\\ \\textcolor{{red}}{{\\fontsize{{8}}{{10}}\\selectfont {i.strftime('%Y-%m-%d')}}}" else: label = i.strftime("%H:%M") labels.append(label) return labels # 开启LaTeX支持 plt.rcParams['text.usetex'] = True fig, ax = plt.subplots(figsize=(20, 4)) time_range = pd.date_range('01.01.2020 00:00:00', '01.03.2020 01:00:00', freq='2H') ax.plot(time_range, len(time_range)*[1]) labels = xtick_labels(time_range) ax.set_xticks(time_range) ax.set_xticklabels(labels, fontsize=12) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

