用对数刻度设置刻度

Rug*_*rra 55 matplotlib

似乎set_xticks在日志范围内不起作用:

from matplotlib import pyplot as plt
fig1, ax1 = plt.subplots()
ax1.plot([10, 100, 1000], [1,2,3])
ax1.set_xscale('log')
ax1.set_xticks([20, 200, 500])
plt.show()
Run Code Online (Sandbox Code Playgroud)

可能吗?

tac*_*ell 58

import matplotlib
from matplotlib import pyplot as plt
fig1, ax1 = plt.subplots()
ax1.plot([10, 100, 1000], [1,2,3])
ax1.set_xscale('log')
ax1.set_xticks([20, 200, 500])
ax1.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter())
Run Code Online (Sandbox Code Playgroud)

要么

ax1.get_xaxis().get_major_formatter().labelOnlyBase = False
plt.show()
Run Code Online (Sandbox Code Playgroud)

结果情节

  • 嗨,你能补充一些解释以及这个结果的样子吗? (9认同)
  • @tacaswell:指数符号`3x10^1` 等仍然存在!我该如何删除它? (2认同)

Fra*_*urt 13

我将添加一些图并显示如何删除次要刻度:

OP:

from matplotlib import pyplot as plt

fig1, ax1 = plt.subplots()
ax1.plot([10, 100, 1000], [1,2,3])
ax1.set_xscale('log')
ax1.set_xticks([20, 300, 500])
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

要添加一些特定的滴答,正如tcaswell所指出的,您可以使用 matplotlib.ticker.ScalarFormatter:

from matplotlib import pyplot as plt
import matplotlib.ticker

fig1, ax1 = plt.subplots()
ax1.plot([10, 100, 1000], [1,2,3])
ax1.set_xscale('log')
ax1.set_xticks([20, 300, 500])
ax1.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter())
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

要删除次要刻度,您可以使用matplotlib.rcParams['xtick.minor.size']:

from matplotlib import pyplot as plt
import matplotlib.ticker

matplotlib.rcParams['xtick.minor.size'] = 0
matplotlib.rcParams['xtick.minor.width'] = 0

fig1, ax1 = plt.subplots()
ax1.plot([10, 100, 1000], [1,2,3])
ax1.set_xscale('log')
ax1.set_xticks([20, 300, 500])
ax1.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter())

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

你可以使用 ax1.get_xaxis().set_tick_params它,它具有相同的效果(但只修改当前轴,而不是所有未来的数字不同matplotlib.rcParams):

from matplotlib import pyplot as plt
import matplotlib.ticker

fig1, ax1 = plt.subplots()
ax1.plot([10, 100, 1000], [1,2,3])
ax1.set_xscale('log')
ax1.set_xticks([20, 300, 500])
ax1.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter())

ax1.get_xaxis().set_tick_params(which='minor', size=0)
ax1.get_xaxis().set_tick_params(which='minor', width=0) 

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 指数符号`3x10^1`等仍然存在!我该如何删除它? (2认同)

Mit*_*ril 5

最好用作np.geomspacexticks

ax = sns.histplot(arr, log_scale=True)
ax.xaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter())
ax.set_xticks( np.geomspace(1, 1500 ,15).round() )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


gfo*_*e89 5

from matplotlib.ticker import ScalarFormatter, NullFormatter
for axis in [ax.xaxis]:
    axis.set_major_formatter(ScalarFormatter())
    axis.set_minor_formatter(NullFormatter())
Run Code Online (Sandbox Code Playgroud)

这删除了指数表示法