我有这样的数据集:
示例数据框:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
我只知道如何生成单独的情节:
for k, m in zip('ABCD', 'mbry'):
plt.figure(k)
for i in range(5):
plt.subplot(5,1,i+1)
plt.bar(range(20), df[k][20*i: 20*(i+1)], color = m)
plt.subplots_adjust(wspace=0, hspace=0)
plt.show()
如何在同一页面中绘制所有四个数字?
2017年2月2日更新:
我还想将它应用于更大的数据集。这是我试过的@ Phlya的代码,但它并没有给我我想要的东西:
更大的数据集:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec
df = pd.DataFrame(np.random.randint(0,100,size=(100, 11)), columns=list('ABCDEFGHIJK'))
from mpl_toolkits.axes_grid1 import axes_grid
f = plt.figure()
for i, (k, m) in enumerate(zip('ABCDEFGHIJK', 'mbrygrygybr')):
ag = axes_grid.Grid(f, 261+i, (5, 1), axes_pad=0)
for j in range(5):
ag[j].bar(range(20), df[k][20*j: 20*(j+1)], color = m)
ag[j].set_ylim(0, df.max().max())
if i%2==0:
if j == 4:
ag[j].yaxis.set_ticks([0, ag[j].get_yticks()[-1]])
else:
ag[j].yaxis.set_ticks([ag[j].get_yticks()[-1]])
else:
ag[j].yaxis.set_ticks([])
if i in (0, 1):
ag[j].xaxis.set_ticks([])
plt.subplots_adjust(wspace=0.5, hspace=0.5)
plt.show()
答案 0 :(得分:4)
完成重写。
Axesgrid就是你想要的,我想。
from mpl_toolkits.axes_grid1 import axes_grid
nrows = 2
ncols = 6
naxes = 5
f = plt.figure(figsize=(10, 6))
for i, (k, m) in enumerate(zip('ABCDEFGHIJK', 'mbrygrygybr')):
ag = axes_grid.Grid(f, (nrows, ncols, i+1), (naxes, 1), axes_pad=0)
for j in range(naxes):
ag[j].bar(range(20), df[k][20*j: 20*(j+1)], color = m)
ag[j].set_ylim(0, df.max().max())
if i%ncols==0:
if j == naxes-1:
ag[j].yaxis.set_ticks([0, ag[j].get_yticks()[-1]])
else:
ag[j].yaxis.set_ticks([ag[j].get_yticks()[-1]])
else:
ag[j].yaxis.set_ticks([])
if i in range(ncols):
ag[j].xaxis.set_ticks([])
plt.subplots_adjust(wspace=0.1, hspace=0.1)
plt.show()
<强>编辑:强> 漂亮的刻度和间距
<强>编辑:强> 现在应该适用于任意数量的网格。 当i> 9时,主要问题是指定网格位置。
答案 1 :(得分:0)
您可以使用
生成轴fig, ax = plt.subplots(2, 2)
这将以您想要的方式生成包含4个Axes
个对象的单个数字。通过访问2D数组Axes
来处理每个ax
对象。例如,左上角的图是ax[0][0]
。