如何使用Matplotlib.plot实现自定义横纵坐标轴标记(自定义标签与间隔放置)

您所在的位置:网站首页 plot怎么写 如何使用Matplotlib.plot实现自定义横纵坐标轴标记(自定义标签与间隔放置)

如何使用Matplotlib.plot实现自定义横纵坐标轴标记(自定义标签与间隔放置)

2024-06-26 16:20| 来源: 网络整理| 查看: 265

Matplotlib是数据可视化中使用的各类绘图库中应用较为广泛的一个,近期使用时遇到大批量数据需要自定义坐标轴标记的需求,捣鼓了很久才搞明白,特此记录

如何自定义坐标

创建对象、设置画布后,绘制图形前,使用 Matplotlib.pyplot.xtick(ticks=mytick, labels=my_label)设置

import Matplotlib.pyplot as plt x = list(range(1100)) y = [1] * 1100 plt.subplots(figsize=(18,6)) plt.xlabel('time') # 设置x坐标轴的名称 my_label = ['I am No.3','I am No.4','I am No.999'] # 自定义坐标轴值 plt.grid(b=True) # 开启网格线 plt.xticks(ticks=[3,14,999],labels=my_label, rotation=60, ha='right') # 自定义x轴内容 plt.ylabel('whatever') # 设置y坐标轴的名称 plt.plot(x, y) # 画图

上述内容中,plt.xticks(ticks=[3,14,999],labels=my_label,)的ticks与labels长度可以不同,但是不同会导致显示出的标签数目不合预期,使用时需要注意。另外,ticks=与labels=可以省略,但省略时顺序不能颠倒,即必须先写坐标显示位置,再写坐标内容。

plt.xticks(rotation=60, ha='right')中的rotation提供坐标标签旋转,旋转中心是标签的中心,所以旋转后可能出现看起来和坐标点对不齐的情况,这时候就需要使用ha参数选择标签的{'left','center','right'}边缘与坐标点对齐。

上述代码的运行效果如图所示:

间隔放置坐标轴标签的方法

正因此处的xticks()可以帮助我们选择放置坐标轴的位置,我们可以巧妙的利用它完成间隔设置标签的需求,只需:

import Matplotlib.pyplot as plt x = list(range(1100)) y = [1] * 1100 plt.subplots(figsize=(18,6)) plt.xlabel('time') # 设置x坐标轴的名称 my_tick = list(range(1100)) # 可以用list(range(len(my_label))) 替代 my_label = time_label[:1100] # 有1100个时间字符串的list plt.grid(b=True) plt.xticks(my_tick[::100],my_label[::100] ,rotation=60, ha='right') # 利用切片来完成需求 plt.ylabel('whatever') plt.plot(x, y)

上述代码的运行效果如图所示:

如果不加切片,显示效果将是灾难

网上的另一种方法

还有一种网上常见的方法使用matplotlib.pyplot.gca().xaxis.set_major_locator()来调整坐标间隔,但是这种方法调整的是坐标轴上打点的间隔,并不能做到省略某些坐标点。在本文使用的时间字符串time_labellist这种上千坐标标签的情况下,用此方法只会导致前半部分标签被分散打在全长度的坐标轴上,请看代码与截图:

N = 4 tsm4 = TimeSeriesKMeans(n_clusters=N, max_iter=10).fit(two_week_nor) time_label = two_week.time.to_list() for clus in range(N): plt.subplots(figsize=(18,6)) plt.xlabel('time') plt.xticks(range(len(time_label)),time_label, rotation=-60, ha='left') plt.gca().xaxis.set_major_locator(ticker.MultipleLocator(128)) x = two_week_nor[np.where(tsm4.labels_ == clus)].T for item in x: plt.plot(item, alpha = 0.6)

可以看到坐标轴只显示了前半部分的连续坐标,并没有做到真正的间隔显示。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3