Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何在matplotlib中使用对数刻度指定小刻度位置而不进行标记?_Python 3.x_Matplotlib_Axis Labels_Logarithm - Fatal编程技术网

Python 3.x 如何在matplotlib中使用对数刻度指定小刻度位置而不进行标记?

Python 3.x 如何在matplotlib中使用对数刻度指定小刻度位置而不进行标记?,python-3.x,matplotlib,axis-labels,logarithm,Python 3.x,Matplotlib,Axis Labels,Logarithm,我试图绘制一个图,其中沿x轴的主刻度被取为每三分之一的x值(即,索引模3),并且相应的次刻度在没有标签的情况下可见。这在线性刻度中不是问题,但使用对数刻度似乎可以改变这一点。我很难用对数x数据找到正确的解决方案。我的实际用例是在同一个绘图上叠加线性和对数刻度(即,底部和左侧轴对应线性刻度,顶部和右侧轴对应对数刻度)。但是,我的具体问题是删除x轴上小刻度的Xticklabel。下面是一个示例 import numpy as np import matplotlib.pyplot as plt fr

我试图绘制一个图,其中沿x轴的主刻度被取为每三分之一的x值(即,索引模3),并且相应的次刻度在没有标签的情况下可见。这在线性刻度中不是问题,但使用对数刻度似乎可以改变这一点。我很难用对数x数据找到正确的解决方案。我的实际用例是在同一个绘图上叠加线性和对数刻度(即,底部和左侧轴对应线性刻度,顶部和右侧轴对应对数刻度)。但是,我的具体问题是删除x轴上小刻度的Xticklabel。下面是一个示例

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

x = 2**np.linspace(1, 16, 16).astype(int) ## LOGARITHMIC X-DATA
y = np.exp(x) / x**2 ## ARBITRARY Y-DATA

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xscale('log', basex=2)
ax.xaxis.set_major_formatter(ScalarFormatter()) ## REMOVE SCIENTIFIC NOTATION FOR LABELS
ax.set_xticks(x[::3]) ## MAJOR
ax.set_xticks([x[idx] for idx in range(len(x)) if idx % 3 != 0], minor=True) ## MINOR
ax.tick_params(axis='x', colors='gray', labelsize=7) 
ax.xaxis.tick_top()
ax.xaxis.set_label_position('top')
ax.set_xlim(min(x)-1, max(x)+1)
plt.show()
plt.close(fig)
上面的代码生成此图

我正在尝试将解决方案应用到我的实际用例中,如下图所示


移除次要记号标签时,如何保持主要记号不变?我希望在没有标签的情况下保持次要记号可见。

如果我理解正确,您正在寻找以下内容。这里有几点:

  • 您需要定义一个
    twiny
    轴,以便能够获得上部x轴
  • 然后使用
    plt.setp()


您的图形目前令人困惑。您没有使用任何双轴,所有刻度都在顶部x轴上。您能否显示所需的图形?这比理解图形容易理解text@Bazingaa我刚刚用另一个数字编辑了这个问题。这有助于澄清吗?我的回答对你有帮助吗?在你的第二个数字中,你是s是的,网站只是让我再等几分钟才接受答案。好的,很高兴能帮上忙。我想你还需要别的东西。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

x = 2**np.linspace(1, 16, 16).astype(int) ## LOGARITHMIC X-DATA
y = np.exp(x) / x**2 ## ARBITRARY Y-DATA

fig = plt.figure()
ax = fig.add_subplot(111)

ax2 = ax.twiny()

ax2.set_xscale('log', basex=2)
ax2.xaxis.set_major_formatter(ScalarFormatter()) ## REMOVE SCIENTIFIC NOTATION FOR LABELS
ax2.set_xticks(x[::3]) ## MAJOR
ax2.set_xticks([x[idx] for idx in range(len(x)) if idx % 3 != 0], minor=True) ## MINOR

ax2.tick_params(axis='x', colors='gray', labelsize=7) 
plt.setp(ax2.get_xminorticklabels(), visible=False) # Grab the ticks and hide them
ax2.set_xlim(min(x)-1, max(x)+1)