如何使两个情节并列

我在 matplotlib 上发现了以下例子:

import numpy as np
import matplotlib.pyplot as plt




x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)


y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)


plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'ko-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')




plt.subplot(2, 1, 2)
plt.plot(x2, y2, 'r.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')


plt.show()

我的问题是: 我需要改变什么,让情节并排?

305908 次浏览

看看这一页: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplots是相似的。我认为这是更好的,因为它更容易设置参数的数字。前两个参数定义布局(在您的示例中为1行2列) ,其他参数更改图形大小等特性:

import numpy as np
import matplotlib.pyplot as plt


x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)


fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(5, 3))
axes[0].plot(x1, y1)
axes[1].plot(x2, y2)
fig.tight_layout()

enter image description here

将子情节设置更改为:

plt.subplot(1, 2, 1)


...


plt.subplot(1, 2, 2)

subplot的参数是: 行数、列数以及当前所在的子图。因此,1, 2, 1的意思是“一行两列的图形: 转到第一个子图。”那么 1, 2, 2意味着“一行两列的图形: 转到第二个子图。”

当前要求使用2行1列(即一列在另一列之上)的布局。您需要要求使用一行两列的布局。当你这样做的时候,结果将是:

side by side plot

为了尽量减少次要情节的重叠,您可能需要添加一个:

plt.tight_layout()

在表演之前屈服:

neater side by side plot

您可以使用-matplotlib.GridSpec. GridSpec

检查 -https://matplotlib.org/stable/api/_as_gen/matplotlib.gridspec.GridSpec.html

下面的代码在右侧显示一个热图,在左侧显示一个 Image。

#Creating 1 row and 2 columns grid
gs = gridspec.GridSpec(1, 2)
fig = plt.figure(figsize=(25,3))


#Using the 1st row and 1st column for plotting heatmap
ax=plt.subplot(gs[0,0])
ax=sns.heatmap([[1,23,5,8,5]],annot=True)


#Using the 1st row and 2nd column to show the image
ax1=plt.subplot(gs[0,1])
ax1.grid(False)
ax1.set_yticklabels([])
ax1.set_xticklabels([])


#The below lines are used to display the image on ax1
image = io.imread("https://images-na.ssl-images- amazon.com/images/I/51MvhqY1qdL._SL160_.jpg")


plt.imshow(image)
plt.show()

输出图像

当在一个方向上堆叠子图时,如果您只是创建了几个轴,Matplotlib 文档主张立即解压缩。

fig, (ax1, ax2) = plt.subplots(1,2, figsize=(20,8))
sns.histplot(df['Price'], ax=ax1)
sns.histplot(np.log(df['Price']),ax=ax2)
plt.show()

enter image description here