【发布时间】:2013-05-20 20:35:51
【问题描述】:
我们有一个代码creates figures from input.txt files。我们需要将其中 2 个数字组合在一个子图中。图 1 中的数据将绘制在左侧子图中,图 2 中的数据将绘制在右侧子图中,共享相同的图例,并且在 x 轴和 y 轴上具有相同的比例:
这里有一些示例数据:
x = [ 1, 2, 3, 5, 10, 100, 1000 ]
y1 = [ 1, 0.822, 0.763, 0.715, 0.680, 0.648, 0.645 ]
y2 = [ 1, 0.859, 0.812, 0.774, 0.746, 0.721, 0.718 ]
import matplotlib.pyplot as plt
# mode 01 from one case
fig1 = plt.figure()
ax1 = fig1.add_subplot(111)
ax1.plot( x, y1, label='mode 01' )
# mode 01 from other case
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
ax2.plot( x, y2, label='mode 01' )
编辑:@nordev 建议的方法有效。现在将 ax1 和 ax2 对象传递给新图形会非常方便,因为它们有更多信息。 It seems that there is no straightforward way to achieve that。
real case has been made available here。要使其工作,请运行plot_both.py。
EDIT2:更改读取 input.txt 文件的例程更容易。 Now it supports multiple plots。但是这个问题仍然有效,因为将AxesSubplot 视为不同图形、子图等之间易于互换的对象会很棒......
【问题讨论】:
-
要明确一点:您不能使用
sharey选项将这些数据简单地绘制为一个图中的两个子图吗?您必须创建两个单独的图形,然后提取图形并将它们组合成一个新图形? -
我尝试了 sharey 选项,但它似乎只共享the axis limits and views,而不是数据本身......并且当前代码创建了这些单独的数字,我想在更改之前尝试组合它们代码...
-
我还是不完全明白你想要达到什么目的。在您包含的示例图中(图像 #1),y 轴是共享的,并且每个图中的数据仅绘制在一个子图中,即图是独立的。从您上面的评论来看,您似乎希望在 both 子图中绘制 both 行?例如,如果您希望第 1 行仅在子图 1 中绘制,而第 2 行仅在子图 2 中绘制,其中 y 轴具有相同的限制(共享 y 轴),这很容易。另外,您不能简单地使用与
ax1.plot(...中相同的参数调用plot方法吗? -
我编辑了问题,请检查现在是否清楚...
-
除了基本上按照我在下面建议的操作之外,您是否找到了解决原始问题的任何方法(将绘图作为同一图形的子图,而不是两个单独图形的子图)?
标签: python matplotlib