fig, axs = plt.subplots(1, 4, figsize=(15, 4)) sns.displot(adata.obs["total_counts"], kde=False, ax=axs[0]) sns.displot(adata.obs["total_counts"][adata.obs["total_counts"] < 10000], kde=False, bins=40, ax=axs[1]) sns.displot(adata.obs["n_genes_by_counts"], kde=False, bins=60, ax=axs[2]) sns.displot(adata.obs["n_genes_by_counts"][adata.obs["n_genes_by_counts"] < 4000], kde=False, bins=60, ax=axs[3]) plt.show()完善这段代码使图像在一个画布上生成
时间: 2024-04-08 15:31:10 浏览: 12
可以使用`plt.subplots()`函数来创建一个包含所有子图的画布。修改代码如下:
```python
fig, axs = plt.subplots(1, 4, figsize=(15, 4))
sns.displot(adata.obs["total_counts"], kde=False, ax=axs[0])
sns.displot(adata.obs["total_counts"][adata.obs["total_counts"] < 10000], kde=False, bins=40, ax=axs[1])
sns.displot(adata.obs["n_genes_by_counts"], kde=False, bins=60, ax=axs[2])
sns.displot(adata.obs["n_genes_by_counts"][adata.obs["n_genes_by_counts"] < 4000], kde=False, bins=60, ax=axs[3])
# 移除原始的plt.show()
plt.tight_layout() # 调整子图之间的间距
plt.show()
```
这样修改后,所有的子图将在一个画布上生成,并且通过`plt.tight_layout()`函数可以调整子图之间的间距,以确保它们不会重叠。
相关问题
fig, axs = plt.subplots(2, 2, figsize=(12, 4))
这段代码创建了一个大小为 12x4 的画布,并将画布分成 2 行 2 列的四个子图区域。`axs` 是一个包含四个子图对象的二维数组,可以分别在每个子图中绘制不同的图形。
下面是一个例子,展示如何在这四个子图中绘制不同的图形:
```python
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(x)
# 创建画布和子图
fig, axs = plt.subplots(2, 2, figsize=(12, 4))
# 在子图中绘制图形
axs[0, 0].plot(x, y1)
axs[0, 0].set_title('sin(x)')
axs[0, 1].plot(x, y2)
axs[0, 1].set_title('cos(x)')
axs[1, 0].plot(x, y3)
axs[1, 0].set_title('tan(x)')
axs[1, 1].plot(x, y4)
axs[1, 1].set_title('exp(x)')
# 显示图形
plt.show()
```
运行以上代码,会在同一画布上绘制四个不同的图形:正弦曲线、余弦曲线、正切曲线和指数曲线。注意,在二维数组中使用 `axs[row, col]` 的方式访问每个子图对象。
fig, axs = plt.subplots(r,shared=‘all’)
`fig, axs = plt.subplots(r, shared='all')` 是一个 Matplotlib 绘制多个子图时比较方便的方式,它可以创建一个 `r` 行、`r` 列的子图网格,并将它们存储在一个名为 `axs` 的二维 numpy 数组中。
`shared='all'` 参数表示所有子图共享相同的 x 轴和 y 轴刻度。这意味着,如果某个子图的数据范围改变了,所有其他子图的刻度也会相应地调整。
以下是一个简单的示例代码:
```python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, axs = plt.subplots(2, 2, figsize=(8, 6), sharex='all', sharey='all')
axs[0, 0].plot(x, y1)
axs[0, 1].plot(x, y2)
axs[1, 0].plot(x, y1+y2)
axs[1, 1].plot(x, y1*y2)
plt.show()
```
在这里,`fig, axs = plt.subplots(2, 2, figsize=(8, 6), sharex='all', sharey='all')` 创建了一个 2x2 的子图网格,每个子图都共享相同的 x 轴和 y 轴刻度。然后,我们在四个子图中绘制了不同的函数。注意,`axs` 是一个 2x2 的 numpy 数组,可以用来对每个子图进行进一步的定制。