【问题标题】:How to plot different plots on same page in Python?如何在 Python 的同一页面上绘制不同的图?
【发布时间】:2020-06-25 18:13:28
【问题描述】:

我已经绘制了 10 个图,但它们显示在不同的窗口中,但我想在同一页或几页内绘制不同的下降大小图的网格。

重现我的情况的代码是:

matrix=np.random.randint(0,100,(50,10))
df=pd.DataFrame(matrix)
df.columns=['a','b','c','d','e','f','g','h','i','j']


f=pd.DataFrame(np.random.randint(0,100,(50,1)))
f.columns=['f']

for i in range(len(df.columns)):
    plt.scatter(df.iloc[:,i],f)
    plt.show()

所需的输出应该类似于:

【问题讨论】:

标签: python python-3.x matplotlib plot scatter-plot


【解决方案1】:

您需要为此使用plt.subplot()Documentation

使用子图,您可以在一个图中放置多个图:

import matplotlib.pyplot as plt

# Arguments to subplot are (# rows, # cols, index in grid)
plt.subplot(1, 2, 1)
# Modify left plot here
plt.title("Left Plot")
plt.text(0.4, 0.4, "1", fontsize=50)

plt.subplot(1, 2, 2)
# Modify right plot here
plt.title("Right Plot")
plt.text(0.4, 0.4, "2", fontsize=50)

plt.show()

这段代码产生:

只需将参数中的前两位数字更改为subplot 即可增加网格中的行数和列数。

对于有 10 个绘图的应用程序,您可以这样做:

# Increase figure size so plots are big
plt.figure(figsize=(10, 40))

for i in range(len(df.columns)):
    plt.subplot(5, 2, i+1)
    plt.scatter(df.iloc[:,i],f)

plt.show()

这将创建一个 5 行 2 列的绘图网格。

参考:

【讨论】:

  • 我之前尝试过这种方法,但得到的地块非常小
  • 您可以使用plt.figure(figsize=(10, 40)) 增加图形大小。这将使您的身材宽 10 英寸,高 40 英寸。 @Razeun
【解决方案2】:

这会给您提供有关如何实现目标的线索吗?

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

matrix = np.random.randint(0,100,(50,10))
df = pd.DataFrame(matrix)
df.columns = ['a','b','c','d','e','f','g','h','i','j']
f = pd.DataFrame(np.random.randint(0,100,(50,1)))
f.columns = ['f']
fig,axs = plt.subplots(2,2)

axs[0,0].scatter(df.iloc[:,0],f)
axs[0,1].scatter(df.iloc[:,1],f)
axs[1,0].scatter(df.iloc[:,2],f)
axs[1,1].scatter(df.iloc[:,3],f)

plt.show()

输出:


更新循环:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

matrix = np.random.randint(0,100,(50,10))
df = pd.DataFrame(matrix)
df.columns = ['a','b','c','d','e','f','g','h','i','j']
f = pd.DataFrame(np.random.randint(0,100,(50,1)))
f.columns = ['f']

fig,axs = plt.subplots(2,2)

i = 0
for a in axs:
    for b in a:
        ax[a,b].scatter(df.iloc[:,i],f)
        i += 1

plt.show()

【讨论】:

  • 我必须通过循环来执行此操作...我如何管理轴?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 2021-12-12
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多