我对此代码的工作方式感到有些困惑:
fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()
在这种情况下,无花果轴如何工作?它做了什么?
同样为什么这不能做同样的事情:
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
由于
答案 0 :(得分:108)
有几种方法可以做到这一点。 subplots
方法创建图形以及随后存储在ax
数组中的子图。例如:
import matplotlib.pyplot as plt
x = range(10)
y = range(10)
fig, ax = plt.subplots(nrows=2, ncols=2)
for row in ax:
for col in row:
col.plot(x, y)
plt.show()
然而,这样的东西也会起作用,但它不是那么“干净”,因为你正在创建一个包含子图的图形,然后添加它们:
fig = plt.figure()
plt.subplot(2, 2, 1)
plt.plot(x, y)
plt.subplot(2, 2, 2)
plt.plot(x, y)
plt.subplot(2, 2, 3)
plt.plot(x, y)
plt.subplot(2, 2, 4)
plt.plot(x, y)
plt.show()
答案 1 :(得分:12)
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 2)
ax[0, 0].plot(range(10), 'r') #row=0, col=0
ax[1, 0].plot(range(10), 'b') #row=1, col=0
ax[0, 1].plot(range(10), 'g') #row=0, col=1
ax[1, 1].plot(range(10), 'k') #row=1, col=1
plt.show()
答案 2 :(得分:8)
阅读文档:matplotlib.pyplot.subplots
var printWindow = window.open('', '_blank');
printWindow.document.write(clonedElement.html());
printWindow.onreadystatechage = function() {
console.log('this does not work.');
};
返回一个元组pyplot.subplots()
,使用符号将其解压缩为两个变量
fig, ax
代码
fig, axes = plt.subplots(nrows=2, ncols=2)
不起作用,因为fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
是subplots()
中的函数,而不是对象pyplot
的成员。
答案 3 :(得分:7)
您可能感兴趣的是,从matplotlib 2.1版开始,问题中的第二个代码也可以正常工作。
来自change log:
图类现在有子图方法 Figure类现在有一个subplots()方法,其行为与pyplot.subplots()相同,但在现有数字上。
示例:
import matplotlib.pyplot as plt
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
plt.show()
答案 4 :(得分:4)
您还可以在子图调用中打开轴的包装
并设置是否要在子图之间共享x和y轴
赞:
tim@Tim:~$ ./renewMac.sh
Old MAC:
ether 88:e9:fe:83:XX:XX
New MAC (cd:4c:a0:01:9f:e4):
ether 88:e9:fe:83:XX:XX
答案 5 :(得分:3)
# Generate figure and its subplots
fig, axes = plt.subplots(nrows, ncols)
依次遍历所有子图:
for ax in axes.flatten():
ax.plot(x,y)
通过索引访问特定的子图:
for row in range(nrows):
for col in range(ncols):
axes[row,col].plot(x[row], y[col])
答案 6 :(得分:0)
如果您确实想使用循环,请执行以下操作。没人真正回答过如何循环馈送数据:
def plot(data):
fig = plt.figure(figsize=(100, 100))
for idx, k in enumerate(data.keys(), 1):
x, y = data[k].keys(), data[k].values
plt.subplot(63, 10, idx)
plt.bar(x, y)
plt.show()
答案 7 :(得分:0)
其他答案都很棒,这个答案是可能有用的组合。
import numpy as np
import matplotlib.pyplot as plt
# Optional: define x for all the sub-plots
x = np.linspace(0,2*np.pi,100)
# (1) Prepare the figure infrastructure
fig, ax_array = plt.subplots(nrows=2, ncols=2)
# flatten the array of axes, which makes them easier to iterate through and assign
ax_array = ax_array.flatten()
# (2) Plot loop
for i, ax in enumerate(ax_array):
ax.plot(x , np.sin(x + np.pi/2*i))
#ax.set_title(f'plot {i}')
# Optional: main title
plt.suptitle('Plots')
准备图形基础结构
绘制循环