似乎set_xticks在对数尺度下不工作:
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()
这可能吗?
1bqhqjot1#
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())
或
ax1.get_xaxis().get_major_formatter().labelOnlyBase = False plt.show()
5us2dqdw2#
我将添加几个图,并展示如何删除次要刻度: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()
如tcaswell所指出的,要添加一些特定的tick,可以使用matplotlib.ticker.ScalarFormatter:
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()
要删除次要刻度,可以使用matplotlib.rcParams['xtick.minor.size']:
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()
你可以使用ax1.get_xaxis().set_tick_params,它有同样的效果(但只修改当前轴,而不是所有未来的数字,不像matplotlib.rcParams):
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()
ar5n3qh53#
from matplotlib.ticker import ScalarFormatter, NullFormatter for axis in [ax.xaxis]: axis.set_major_formatter(ScalarFormatter()) axis.set_minor_formatter(NullFormatter())
这将删除指数符号
t5fffqht4#
最好使用np.geomspace作为xticks
np.geomspace
ax = sns.histplot(arr, log_scale=True) ax.xaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter()) ax.set_xticks( np.geomspace(1, 1500 ,15).round() )
9q78igpj5#
要使用x刻度对数绘制半对数图,有两个选项:
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot(x,y) ax.set_xscale('log')
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.semilogx(x,y)
如果不需要设置xtick,这两个都可以。如果你需要**来设置xtick,第二个会更好。同样地
ax.loglog(x,y)
优于
ax.plot(x,y) ax.set_xscale('log') ax.set_yscale('log')
必须设置刻度时;
ax.semilogy(x,y)
ax.plot(x,y) ax.set_yscale('log')
当需要设置刻度时。
5条答案
按热度按时间1bqhqjot1#
或
5us2dqdw2#
我将添加几个图,并展示如何删除次要刻度:
OP:
如tcaswell所指出的,要添加一些特定的tick,可以使用
matplotlib.ticker.ScalarFormatter
:要删除次要刻度,可以使用
matplotlib.rcParams['xtick.minor.size']
:你可以使用
ax1.get_xaxis().set_tick_params
,它有同样的效果(但只修改当前轴,而不是所有未来的数字,不像matplotlib.rcParams
):ar5n3qh53#
这将删除指数符号
t5fffqht4#
最好使用
np.geomspace
作为xticks9q78igpj5#
要使用x刻度对数绘制半对数图,有两个选项:
或
如果不需要设置xtick,这两个都可以。
如果你需要**来设置xtick,第二个会更好。
同样地
优于
必须设置刻度时;
优于
当需要设置刻度时。