如何使用面向对象的 matplotlib 设置轴刻度和刻度标签 API

How to set the axis scale and ticklabels using matplotlib object oriented API

我需要一些帮助来在 Matplotlib.pyplot under Python2.7!

中绘图

我想生成具有以下 x 轴的绘图:

x-axis as it should be

到目前为止,我使用 myaxis.set_xticks([0,0.5,1,2,4,6,8]) 并且看起来不错,但是如果我想创建 **对数 x 轴* **,那么我的轴标签看起来像这样!

wrong x-axis labels

我该怎么做才能同时拥有对数标度的 x 轴和整数格式的标签(也不是对数值作为标签!)。 请阅读有关对数刻度的说明!!!

在浏览 Whosebug 时,我发现了以下类似问题,但没有任何建议对我有用,我不知道我做错了什么。

Matplotlib: show labels for minor ticks also

谢谢!

注意:这个图叫做Madau-Plotsee:adsabs[dot]harvard[dot]edu Madau (1998) DOI=10.1086/305523)。通常将其绘制为对数尺度并显示 z=0.0 值,尽管轴是对数尺度轴并且 log10(0)=Error。我绝对想在这里指出,这在我的领域很常见,但不应该一对一地应用于任何其他地块。 原来剧情是骗人的!您绘制 (1+z) [1,1.5,2,3,5,7,9]] 然后将 x 轴转换为纯 z 值 0.0 < z 8.0! 所以我需要什么要查找的是如何将 xticks 设置为 "translated" 值 ([0,0.5,1,2,4,6,8])

如果您将对应于 x=0 的数据点绘制在其他地方,例如 x=0.25,然后重新标记它会怎么样。例如,

import matplotlib.pyplot as plt
fig, ax = plt.subplots()

plot_vals = [0.25, 0.5, 1, 2, 4, 6, 8]
label_vals = [0, 0.5, 1, 2, 4, 6, 8]

ax.plot(plot_vals, plot_vals, 'k-o')

ax.set_xscale('log')
ax.set_xticks(plot_vals) 
ax.set_xticklabels(label_vals) # relabeling the ticklabels

这产生了我认为是你想要的。

您可以通过执行以下操作来关闭小刻度:

ax.tick_params(axis='x', which='minor', bottom='off', top='off')

编辑:鉴于对操作的编辑,这可以通过以下方式轻松完成:

import matplotlib.pyplot as plt


original_values = [0, 0.5, 1, 2, 4, 6, 8]

# if using numpy:
# import numpy as np
# plot_values = np.array(original_values) + 1

# if using pure python
plot_values = [i + 1 for i in original_values]

fig, ax = plt.subplots()
ax.plot(plot_values, plot_values, 'k-o') #substitute actual plotting here
ax.set_xscale('log')
ax.set_xticks(plot_values)
ax.set_xticklabels(original_values)

产生: