首页 > 编程问答 >使用 matplotlib 在中间设置 xtick 标签

使用 matplotlib 在中间设置 xtick 标签

时间:2024-07-22 09:58:09浏览次数:7  
标签:python matplotlib plot

我有以下一段随机代码,它只是使用一些随机数绘制散点图。

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

x = np.random.rand(10)
y = np.random.rand(10)
fig, ax = plt.subplots()
ax.plot(y, x, '*')

plt.show()

它会生成这样的图: enter image description here

一切都很好。但我想要的是使用一些自定义标签编辑 x 标签,并且我希望它们位于两个 x 刻度之间的中心。以下是我修改代码以实现它的方法:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

x = np.random.rand(10)
y = np.random.rand(10)
fig, ax = plt.subplots()
ax.plot(y, x, '*')

xlabels = ['potato','tomato','apple','cherry','pie']
# Remove the major tick labels
ax.xaxis.set_major_formatter(ticker.NullFormatter())

# Set the major ticks to match the number of labels
num_labels = len(xlabels)
mticks = np.arange(num_labels)
ax.set_xticks(mticks)
ax.set_xticklabels(xlabels)

# Rotate the x-axis labels
for label in ax.get_xticklabels():
    label.set_rotation(90)
    label.set_horizontalalignment('right')  # Adjust horizontal alignment

plt.show()

但是它生成了这样的图: enter image description here (不要介意散点图的变化。我猜 x 和 y 是随机分布的数组)

如何我编辑代码,使 xlabel 位于刻度线之间的中心。


要将 x 轴标签放在 matplotlib 图中的刻度线之间居中,需要将刻度线的位置从主要刻度线偏移到次要刻度线。可以通过以下步骤完成此操作:

  1. 启用次要刻度线 :使用 ax.minorticks_on()
  2. 设置次要刻度线的位置 :使用 ax.set_xticks() 并将 minor=True 传递给它。为了将这些刻度线放在两个主要刻度线的中间,我们创建了一个与主要刻度线长度相同但偏移 0.5 的数组。
  3. 对齐标签到次要刻度线 :使用 ax.xaxis.set_minor_formatter(ticker.NullFormatter()) 删除次要刻度线标签,并使用 ax.xaxis.set_major_locator(ticker.FixedLocator(mticks + 0.5)) 将主要标签与次要刻度线对齐。

以下是的代码的更新版本,其中包含这些更改:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

x = np.random.rand(10)
y = np.random.rand(10)
fig, ax = plt.subplots()
ax.plot(y, x, '*')

xlabels = ['potato','tomato','apple','cherry','pie']

# 设置主要刻度线以匹配标签数量
num_labels = len(xlabels)
mticks = np.arange(num_labels)
ax.set_xticks(mticks)

# 启用次要刻度线并将它们放置在主要刻度线之间
ax.minorticks_on()
ax.set_xticks(mticks + 0.5, minor=True)

# 删除主要和次要刻度线标签
ax.xaxis.set_major_formatter(ticker.NullFormatter())
ax.xaxis.set_minor_formatter(ticker.NullFormatter())

# 将标签添加到次要刻度线
ax.xaxis.set_major_locator(ticker.FixedLocator(mticks + 0.5))
ax.set_xticklabels(xlabels)

# 旋转 x 轴标签
for label in ax.get_xticklabels():
    label.set_rotation(90)
    label.set_horizontalalignment('right')

plt.show()

这将生成一个图形,其中 x 轴标签位于两个刻度线之间居中。

标签:python,matplotlib,plot
From: 78776708

相关文章

  • Python学习计划——2.4列表推导式(List Comprehensions)
    列表推导式是Python的一种简洁且强大的语法,用于生成新的列表。它可以用更少的代码、更清晰的方式来创建列表,特别是在处理简单的循环和条件操作时。1.基本语法列表推导式的基本语法如下:[expressionforiteminiterable]expression:表达式,计算结果用于生成列表的元素。ite......
  • Python学习计划——2.3常用内置函数(len, max, min, sum, etc.)
    Python提供了许多内置函数,用于简化对数据结构的操作。以下是一些常用的内置函数及其详细说明。1.len()len()函数用于返回对象(如列表、元组、字符串、字典等)的长度(元素个数)。示例:#列表fruits=["apple","banana","cherry"]print(len(fruits))#输出:3#元组c......
  • 哪个 Python 框架可以在 Google Collab 中显示和更改图像?
    我希望能够在使用GoogleCollab时为RL绘制高fps的位图。我现在可以使用OpenCV绘制图像cv2_imshowgoogle替换cv2.imshow但是,它无法替换现有图像,它下面绘制了新的我能够在替换imshow函数中使用一些JavaScript来修复它。但刷新率约为......
  • VSCode 自动建议 python 导入而不依赖 Intellisense
    我正在使用Transformer中的AutoModel之类的对象,并且经常遇到自动导入建议无法找到的对象。我总是希望VSCode建议“从Transformer中执行”,而不是费心寻找它找不到的原因每当看到未定义的“AutoModel”时,都会导入AutoModel”,因此无需扫描任何python导入目录。这......
  • 如何使用Python计算位移自相关函数?
    我正在使用python来分析粒子的异常扩散。我已经得到了粒子轨迹的位移,我想计算并绘制位移自相关与滞后时间t的关系。我认为可能存在使用t和位移(如deltar)的自相关函数的一般函数,但我不能没找到。我可以得到函数或代码吗?可以使用numpy和matplotlib库在Python......
  • 一天一点点,第四天Python基础
    第一天:一天一点点。Python基础-CSDN博客第二天:一天一点点,接上章Python基础-CSDN博客第三天:一天一点点,第三天Python基础(循环语句)-CSDN博客推导式推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。推导式是一种强大且简洁的语法,适用于生......
  • Python - for循环不使用正则表达式附加数组
    以下代码从URL获取版本号,然后对于每个版本号,转到该版本号的页面并使用文件名的特定模式填充数组。生成的数组应包含每个版本号的文件名列表,但它似乎只包含早期版本(2.6)。使用print语句,我可以看到代码的工作原理是它获取sha256sums.asc文件-所有这些文件,所有版本。我猜......
  • 使用 callable_iterator (re.finditer) 导致 Python 冻结
    我有一个为文本的每一行调用的函数。deftokenize_line(line:str,cmd=''):matches=re.finditer(Patterns.SUPPORTED_TOKENS,line)tokens_found,not_found,start_idx=[],[],0print(matches)formatchinmatches:pass#Rest......
  • Python 的 time.sleep - 永远不会醒来
    我认为这将是那些简单的问题之一,但它让我感到困惑。[停止媒体:我是对的。找到了解决方案。查看答案。]我正在使用Python的单元测试框架来测试多线程应用程序。很好而且很直接-我有5个左右的工作线程监视一个公共队列,以及一个为它们制作工作项的生产者线程......
  • python中使用mitmproxy的http模块出错
    我有一个使用mitmproxyhttp函数的代码,它在这里惨败:defmain(stdscr):try:parser=argparse.ArgumentParser(description='NetSourNetworkAnalyzer')parser.add_argument('--proxy',action='store_true',help='EnableH......