【问题标题】:make subplots have the same x range使子图具有相同的 x 范围
【发布时间】:2023-04-09 03:39:02
【问题描述】:

我正在尝试将数百个子图绘制成一个图形(我可以将其拆分为一个网格并使其跨越多个 PDF 页面)但是如果我使用标准的 matplotlib 子图并一次添加一个子图,这个过程会很慢.可能适用于我的问题here 的解决方案。问题是我的数据对于每个子图都有不同的 x 范围。如何使所有 x 值具有相同的宽度,例如 1 英寸?这是一个说明问题的示例。

import numpy as np
import matplotlib.pyplot as plt

ax = plt.subplot(111)
plt.setp(ax, 'frame_on', False)
ax.set_ylim([0, 5])
ax.set_xlim([0, 30])
ax.set_xticks([])
ax.set_yticks([])
ax.grid('off')

x1 = np.arange(2,8)
y1 = np.sin(x1)*np.sin(x1)

xoffset1 = max(x1) + 1

print x1

x2 = np.arange(5,10)
y2 = np.sin(x2)*np.sin(x2)
print x2
print x2+ xoffset1

xoffset2 = max(x2) + xoffset1



x3 = np.arange(3,15)
y3 = np.sin(x3)*np.sin(x3)
print x3
print x3+ xoffset2


ax.plot(x1,y1)
ax.plot(x2+xoffset1, y2)
ax.plot(x3+xoffset2, y3)

plt.show()

plot

谢谢

【问题讨论】:

  • 不确定是否理解问题...这里只有一个图(三个不同的线,但都在同一个图上)...另外,您是否想要相同的 x 范围(所有图范围例如从 0 到 10)或者你想要相同的比例?
  • 相同的比例。一些 x 值从 3 到 10 和一些从 2 到 5。当将前者绘制在同一图中时,后者看起来会被挤压。是否有有效的映射/转换使每个绘图的 x 值的值以 1 英寸宽表示。这样所有图像都将具有相同的 x 比例,并且它们看起来会更好
  • 是的,它是一个包含多个“图”的图,当我沿水平方向移动时,x 轴的长度会发生变化。它比为每个情节使用子情节要快得多,尤其是当你有 100 个情节时。

标签: python matplotlib


【解决方案1】:

我不确定这是否是您想要的,但这里有一个示例,我重新映射了所有 x 范围以使所有范围占用相同的空间:

import numpy as np
import matplotlib.pyplot as plt

nplots = 3
xmin = 0
xmax = 30
subrange = float(xmax-xmin)/float(nplots)

ax = plt.subplot(111)
plt.setp(ax, 'frame_on', False)
ax.set_ylim([0, 5])
ax.set_xlim([xmin, xmax])
ax.set_xticks([])
ax.set_yticks([])
ax.grid('off')

xranges = [(2,8), (5,10), (3,15)]

for j in xrange(nplots):
    x = np.arange(*xranges[j])
    y = np.sin(x)*np.sin(x)

    new_x = (x-x[0])*subrange/float(x[-1]-x[0])+j*subrange ## remapping the x-range

    ax.plot(new_x,y)

plt.show()

【讨论】:

  • 谢谢。这可能会做到。我会告诉你任何问题。
猜你喜欢
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 2021-04-18
  • 2015-02-14
相关资源
最近更新 更多