【问题标题】:set_markersize not working for right side axisset_markersize 不适用于右侧轴
【发布时间】:2019-11-06 17:40:42
【问题描述】:

我在搞乱一些情节风格并遇到了好奇心。我有一个带有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()

【问题讨论】:

    标签: python numpy matplotlib axes twinx


    【解决方案1】:

    您需要使用tick2line 而不是tick1line,因为那是指上/右轴,according to the documentation

    ax2.yaxis.get_major_ticks()[1].tick1line.set_markersize(15)更改为:

    ax2.yaxis.get_major_ticks()[1].tick2line.set_markersize(15)
    

    结果:

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 2020-10-29
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多