【问题标题】:Tick placement for radial plot with log-scale for r带有 r 对数刻度的径向图的刻度位置
【发布时间】:2021-04-30 16:20:34
【问题描述】:

我正在尝试在 r 轴上创建一个带有对数刻度的径向图,但是 theta 的刻度标签出现在图中。

import numpy as np
from matplotlib import pyplot as plt

np.random.seed(1)
r = 10**(1 + 2*np.random.rand(36))
theta = 2 * np.pi * np.linspace(0, 1, 37)

fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.plot(theta, r)
# We need to reset the minimum r-limit to avoid log(0)
ax.set_rlim(0.1, None)
ax.set_rscale('log')
plt.show()

theta 刻度在图中,在这里看起来并不那么糟糕,但例如隐藏了一个 pcolormesh 图 - 作为比较,如果我注释掉 set_rlimset_rscale 行,我们会得到以下带有所需位置的刻度线。 (对于使用深色模式的任何人,图像背景都是透明的,因此刻度可能不会显示为内联。)

我试过查看ax.get_xticklabels,但 y 位置(相当于 r 位置)为 0。

[Text(0.0, 0, '0°'),
 Text(0.7853981633974483, 0, '45°'),
 Text(1.5707963267948966, 0, '90°'),
 Text(2.356194490192345, 0, '135°'),
 Text(3.141592653589793, 0, '180°'),
 Text(3.9269908169872414, 0, '225°'),
 Text(4.71238898038469, 0, '270°'),
 Text(5.497787143782138, 0, '315°')]

有趣的是,如果你创建上面的rlim(例如ax.set_rlim([0.1, 1e5])),刻度会向右移动到图形的边缘。

【问题讨论】:

标签: python matplotlib scale


【解决方案1】:

您可以使用Axes.tick_params() 设置刻度和标签之间的pad 距离:

fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.plot(theta, r)
ax.set_rmin(0.1)
ax.set_rscale('log')

ax.tick_params(pad=35)

【讨论】:

  • 为此干杯。如果数据反而更高,例如对于数据r = 10**(7 + 2*np.random.rand(36)),需要减少 35 填充。关于不为每个情节手动设置的任何想法?
  • @Steve 抱歉,我不知道如何自动完成。我尝试使用 seaborn,因为它有时会修复 matplotlib 的格式怪癖,但 set_rscale('log') 也将刻度标签与 seaborn 混淆了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2011-11-01
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多