set_markersize 不适用于右侧轴
set_markersize not working for right side axis
我正在摆弄一些情节风格,运行 出于好奇。我有一个带有 twinx()
的图,用于在右侧和左侧产生刻度。我想错开一些滴答声,一些比其他的更远。
我可以在任何轴上的任何刻度上添加填充并通过 ax.yaxis.get_major_ticks()[1].set_pad()
推出文本,但是当我尝试通过 ax.yaxis.get_major_ticks()[1].tick1line.set_markersize()
延长刻度时,它适用于除右侧之外的所有轴边。有什么见解吗?
请看下面的代码。我试过调高轴 (ax1, ax2) 和索引。
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
t = np.linspace(0,5)
x = np.exp(-t)*np.sin(2*t)
fig, ax1 = plt.subplots()
ax1.plot(t, x, alpha=0.0)
ax2 = ax1.twinx()
ax2.plot(t, x, alpha=1.0)
ax1.set_xticks([0,1,2])
ax1.set_yticks([0.1, 0.2])
ax2.set_yticks([0.3, 0.4, 0.5])
ax2.set_xticks([1,2,3])
ax1.grid(True, color='lightgray')
ax2.grid(True, color='lightgray')
for a in [ax1, ax2]:
a.spines["top"].set_visible(False)
a.spines["right"].set_visible(False)
a.spines["left"].set_visible(False)
a.spines["bottom"].set_visible(False)
ax1.set_axisbelow(True)
ax2.set_axisbelow(True)
ax1.xaxis.get_major_ticks()[1].set_pad(15) #
ax1.xaxis.get_major_ticks()[1].tick1line.set_markersize(15)
ax1.yaxis.get_major_ticks()[1].set_pad(15) #
ax1.yaxis.get_major_ticks()[1].tick1line.set_markersize(15)
ax2.yaxis.get_major_ticks()[1].set_pad(15) #
ax2.yaxis.get_major_ticks()[1].tick1line.set_markersize(15)
plt.savefig('fig.pdf')
plt.show()
您需要使用 tick2line
而不是 tick1line
,因为它指的是 top/right 轴,according to the documentation。
更改 ax2.yaxis.get_major_ticks()[1].tick1line.set_markersize(15)
为:
ax2.yaxis.get_major_ticks()[1].tick2line.set_markersize(15)
结果:
我正在摆弄一些情节风格,运行 出于好奇。我有一个带有 twinx()
的图,用于在右侧和左侧产生刻度。我想错开一些滴答声,一些比其他的更远。
我可以在任何轴上的任何刻度上添加填充并通过 ax.yaxis.get_major_ticks()[1].set_pad()
推出文本,但是当我尝试通过 ax.yaxis.get_major_ticks()[1].tick1line.set_markersize()
延长刻度时,它适用于除右侧之外的所有轴边。有什么见解吗?
请看下面的代码。我试过调高轴 (ax1, ax2) 和索引。
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
t = np.linspace(0,5)
x = np.exp(-t)*np.sin(2*t)
fig, ax1 = plt.subplots()
ax1.plot(t, x, alpha=0.0)
ax2 = ax1.twinx()
ax2.plot(t, x, alpha=1.0)
ax1.set_xticks([0,1,2])
ax1.set_yticks([0.1, 0.2])
ax2.set_yticks([0.3, 0.4, 0.5])
ax2.set_xticks([1,2,3])
ax1.grid(True, color='lightgray')
ax2.grid(True, color='lightgray')
for a in [ax1, ax2]:
a.spines["top"].set_visible(False)
a.spines["right"].set_visible(False)
a.spines["left"].set_visible(False)
a.spines["bottom"].set_visible(False)
ax1.set_axisbelow(True)
ax2.set_axisbelow(True)
ax1.xaxis.get_major_ticks()[1].set_pad(15) #
ax1.xaxis.get_major_ticks()[1].tick1line.set_markersize(15)
ax1.yaxis.get_major_ticks()[1].set_pad(15) #
ax1.yaxis.get_major_ticks()[1].tick1line.set_markersize(15)
ax2.yaxis.get_major_ticks()[1].set_pad(15) #
ax2.yaxis.get_major_ticks()[1].tick1line.set_markersize(15)
plt.savefig('fig.pdf')
plt.show()
您需要使用 tick2line
而不是 tick1line
,因为它指的是 top/right 轴,according to the documentation。
更改 ax2.yaxis.get_major_ticks()[1].tick1line.set_markersize(15)
为:
ax2.yaxis.get_major_ticks()[1].tick2line.set_markersize(15)
结果: