我有以下一段随机代码,它只是使用一些随机数绘制散点图。
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()
一切都很好。但我想要的是使用一些自定义标签编辑 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()
但是它生成了这样的图: (不要介意散点图的变化。我猜 x 和 y 是随机分布的数组)
如何我编辑代码,使 xlabel 位于刻度线之间的中心。
要将 x 轴标签放在 matplotlib 图中的刻度线之间居中,需要将刻度线的位置从主要刻度线偏移到次要刻度线。可以通过以下步骤完成此操作:
-
启用次要刻度线
:使用
ax.minorticks_on()
-
设置次要刻度线的位置
:使用
ax.set_xticks()
并将minor=True
传递给它。为了将这些刻度线放在两个主要刻度线的中间,我们创建了一个与主要刻度线长度相同但偏移 0.5 的数组。 -
对齐标签到次要刻度线
:使用
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