Как повернуть ticklabel_format в matplotlib? - PullRequest
3 голосов
/ 24 апреля 2019

Я использую matplotlib для построения фигуры и хочу повернуть направление zaxis.set_major_formatter.Как показано на изображении с красной меткой.Как я мог повернуть его?

Fontsize_set = {'size' : 20}
fig = plt.figure(figsize=[8, 5], dpi = 140, facecolor = None)
ax = Axes3D(fig)
ax.grid(color = 'y', linestyle = ':', linewidth = 0.5)

## axes tick setting.
ax.tick_params(labelsize = 20)
ax.set_xlim3d(0, 1500)
ax.set_xticks(np.arange(0, 1500, 1500 / 5))
ax.set_ylim3d(0, 250)
ax.set_yticks(np.arange(0, 250, 250 / 5))
ax.set_zlim3d(0, 0.025)
ax.set_zticks(np.arange(0, 0.025, 0.025 / 5))

ax.view_init(20, 60)

ax.zaxis.set_rotate_label(False)     ## rotate the z axis.
ax.zaxis.set_major_formatter(plt.ScalarFormatter(useMathText = True))
ax.ticklabel_format(style = "sci",  axis = "z", scilimits = (-3, -3))

ax.xaxis.pane.set_edgecolor('k')
ax.yaxis.pane.set_edgecolor('k')
ax.zaxis.pane.set_edgecolor('k')
ax.xaxis.pane.set_alpha(1)
ax.yaxis.pane.set_alpha(1)
ax.zaxis.pane.set_alpha(1)
ax.xaxis.pane.fill = False
ax.yaxis.pane.fill = False
ax.zaxis.pane.fill = False

fig.tight_layout()
plt.show()

Изображение показано ниже:

enter image description here

Fontsize_set = {'size' : 20}
fig = plt.figure(figsize=[8, 5], dpi = 140, facecolor = 'w')
ax = plt.axes(projection='3d')
ax.grid(color = 'y', linestyle = '--', linewidth = 0.5)
## axes tick setting.
ax.tick_params(labelsize = 20)

ax.set_xlim3d(0, 2000)
ax.set_xticks(np.arange(0, 2000, 2000 / 5))

ax.set_ylim3d(0, 250)
ax.set_yticks(np.arange(0, 250, 250 / 5))

ax.set_zlim3d(0, 0.0025)
ax.set_zticks(np.arange(0, 0.0025, 0.0025 / 5))

ax.zaxis.set_major_formatter(plt.ScalarFormatter(useMathText = True))
ax.ticklabel_format(style = "sci", axis = "z", scilimits = (-4, -4))

ax.view_init(20, 60)
ax.zaxis.set_rotate_label(False)     ## rotate the z label.

fig.canvas.draw()
ax.zaxis.offsetText.set_visible(False)
ax.text2D(0.05, 0.85, ax.zaxis.offsetText.get_text(),
          transform = ax.transAxes, fontsize = 10)
ax.xaxis.pane.set_edgecolor('k')
ax.yaxis.pane.set_edgecolor('k')
ax.zaxis.pane.set_edgecolor('k')
ax.xaxis.pane.set_alpha(1)
ax.yaxis.pane.set_alpha(1)
ax.zaxis.pane.set_alpha(1)
ax.xaxis.pane.fill = False
ax.yaxis.pane.fill = False
ax.zaxis.pane.fill = False
plt.tight_layout()
plt.show()

enter image description here

Fontsize_set = {'size' : 20}
fig = plt.figure(figsize=[8, 5], dpi = 140, facecolor = 'w')
ax = plt.axes(projection='3d')
ax.grid(color = 'y', linestyle = '--', linewidth = 0.5)
## axes tick setting.
ax.tick_params(labelsize = 20)

ax.set_xlim3d(0, 2000)
ax.set_xticks(np.arange(0, 2000, 2000 / 5))

ax.set_ylim3d(0, 250)
ax.set_yticks(np.arange(0, 250, 250 / 5))

ax.set_zlim3d(0, 0.0025)
ax.set_zticks(np.arange(0, 0.0025, 0.0025 / 5))

ax.zaxis.set_major_formatter(plt.ScalarFormatter(useMathText = True))
ax.ticklabel_format(style = "sci", axis = "z", scilimits = (-4, -4))

ax.view_init(20, 60)
ax.zaxis.set_rotate_label(False)     ## rotate the z label.

ax.zaxis.offsetText.set_visible(False)
ax.text2D(0.05, 0.85, r'$\times$$10^{-3}$',
          transform = ax.transAxes, fontsize = 20)
ax.xaxis.pane.set_edgecolor('k')
ax.yaxis.pane.set_edgecolor('k')
ax.zaxis.pane.set_edgecolor('k')
ax.xaxis.pane.set_alpha(1)
ax.yaxis.pane.set_alpha(1)
ax.zaxis.pane.set_alpha(1)
ax.xaxis.pane.fill = False
ax.yaxis.pane.fill = False
ax.zaxis.pane.fill = False
plt.tight_layout()
plt.show()

enter image description here

1 Ответ

1 голос
/ 24 апреля 2019

После долгих экспериментов с дополнениями вкладок и документацией matplotlib я смог придумать только следующую альтернативу.Идея проста:

  • Скрыть показатель экспоненты, который является offsetText.
  • Заменить его простым текстом в горизонтальной разметке.

Положение текста 0.05, 0.85, является вопросом выбора.Обратите внимание, что в моей системе показатель степени равен -2, а у вас - -3.Но это не имеет значения, поскольку z-ticklabels соответственно изменен.

fig.canvas.draw()
ax.zaxis.offsetText.set_visible(False)
ax.text2D(0.05, 0.85, ax.zaxis.offsetText.get_text(), 
          transform=ax.transAxes, fontsize=20)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...