【问题标题】:plotting angularly-wrapped data in cartesian space with matplotlib使用 matplotlib 在笛卡尔空间中绘制角度环绕的数据
【发布时间】:2012-01-05 03:18:17
【问题描述】:

也许我让标题比问题更复杂,但这里是……!

我有一些角度数据,在 x-y 平面上连续,跨越 360 => 0 度线 - 即 358,359,0,1,2....

如果我正在绘制这些并设置:

 plt.xlim(0,360)

我当然会在情节的最左边有三个点,在最右边有两个。您可以在此处的(更复杂和实际的)图中看到这一点(故意颠倒 x 轴限制):

我真正想要的是将所有点绘制在绘图窗口中的同一位置周围,可能是朝向绘图的中心。在此方案下,x 轴向 360-0 度边界的左侧减小,向右增加。

我不想对数据本身进行任何翻译/转换(它是一个大型数据集等),所以我希望通过一些 matplotlib 技巧来做到这一点。

我计划用 hexbin 绘制数据点,如果这有什么不同的话。

感谢您的浏览,并提前感谢您的帮助,

戴夫

【问题讨论】:

  • 我想到的最简单的“技巧”是将您的数据绘制两次,即用移位的 x 值绘制相同的东西,以便第二个的左侧与第一个的右侧重合(@987654323 @)。这是一个选项吗?

标签: python plot matplotlib axes


【解决方案1】:

老实说,我认为仅转换您的数据会更快。 x[x>180] -= 360 相当快。除非您的数据集大小为几 GB,否则转换数据所需的时间仅为几毫秒。

所以,这是一种简单的方法(转换您的数据):

import matplotlib.pyplot as plt
import numpy as np

# Generate data to match yours...
y = 60 * np.random.random(300) - 20
x = 60 * (np.random.random(300) - 0.5)
x[x < 0] += 360

# Transform the data back to a -180 to 180 range...
x[x > 180] -= 360

# Plot the data
fig, ax = plt.subplots()
ax.plot(x, y, 'b.')

# Set the ticks so that negative ticks represent >180 numbers
ticks = ax.get_xticks()
ticks[ticks < 0] += 360
ax.set_xticklabels([int(tick) for tick in ticks])

plt.show()

但是,如果您想避免转换数据,您可以执行以下操作...不过,这 100% 保证比仅转换数据要慢。 (可能慢得可以忽略不计,但不会更快。)

import matplotlib.pyplot as plt
import numpy as np

# Generate data to match yours...
y = 60 * np.random.random(300) - 20
x = 60 * (np.random.random(300) - 0.5)
x[x < 0] += 360

fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True)
fig.subplots_adjust(wspace=0)

ax1.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax1.tick_params(right=False)
ax2.tick_params(left=False)
for label in ax2.get_yticklabels():
    label.set_visible(False)

ax1.plot(x[x > 180], y[x > 180], 'b.')
ax2.plot(x[x <= 180], y[x <= 180], 'b.')

ax2.set_xticks(ax2.get_xticks()[1:])

plt.show()

【讨论】:

  • +1 x[x &lt; 0] uau!那是什么?麻木?请问您可以添加指向该美女相关文档的链接吗?
  • 这是一个 numpy 成语(也是一个“matlab 主义”)。 scipy.org/…(链接是教程,而不是文档。文档的相关部分假设对 numpy 更加熟悉。)对 numpy 数组的逻辑操作返回布尔数组。这些可以(除其他外)用于索引相同形状的 numpy 数组。
猜你喜欢
  • 2019-12-29
  • 1970-01-01
  • 2023-01-30
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多