Python 如何与多个子地块共享Y轴幅值?

Python 如何与多个子地块共享Y轴幅值?,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个包含三列的CSV:日期、LOC、CNT示例如下。我想要很多子情节,最终会有大约200个这样的情节,我想是迷你们大小的情节,但我还没到那个程度。我遇到的问题是,我的图没有共享Y轴大小,因此计数差异很大的组看起来很相似 import pandas as pd import math import matplotlib.pyplot as plt dfh = pd.read_csv('testdata.csv') num_sites = dfh['LOC'].nunique() cols

我有一个包含三列的CSV:日期、LOC、CNT示例如下。我想要很多子情节,最终会有大约200个这样的情节,我想是迷你们大小的情节,但我还没到那个程度。我遇到的问题是,我的图没有共享Y轴大小,因此计数差异很大的组看起来很相似

import pandas as pd
import math
import matplotlib.pyplot as plt

dfh = pd.read_csv('testdata.csv')
num_sites = dfh['LOC'].nunique()

cols = 5
rows = int(math.ceil(float(num_sites) / cols))

fig, axs = plt.subplots(nrows=rows, ncols=cols)

grouped = dfh.groupby('LOC')

targets = zip(grouped.groups.keys(), axs.flatten())
for i, (key, ax) in enumerate(targets):
    ax.plot(grouped.get_group(key)['CNT'])

plt.show()
样本数据:

DATE,LOC,CNT
2017-06-01,Loc 1,1
2017-06-02,Loc 1,6
2017-06-03,Loc 1,4
2017-06-04,Loc 1,1
2017-06-05,Loc 1,1
2017-06-01,Loc 2,0
2017-06-02,Loc 2,7
2017-06-03,Loc 2,4
2017-06-04,Loc 2,10
2017-06-05,Loc 2,12
2017-06-01,Loc 3,5
2017-06-02,Loc 3,2
2017-06-03,Loc 3,1
2017-06-04,Loc 3,8
2017-06-05,Loc 3,1
2017-06-01,Loc 4,19
2017-06-02,Loc 4,20
2017-06-03,Loc 4,15
2017-06-04,Loc 4,12
2017-06-05,Loc 4,22
2017-06-01,Loc 5,0
2017-06-02,Loc 5,1
2017-06-03,Loc 5,1
2017-06-04,Loc 5,2
2017-06-05,Loc 5,2
2017-06-01,Loc 6,7
2017-06-02,Loc 6,5
2017-06-03,Loc 6,7
2017-06-04,Loc 6,5
2017-06-05,Loc 6,6
这产生了:

请注意,我有一些最大Y值为7、2、22、8、12和6的绘图,还有一些最大值为1的空白绘图

我的问题是:如何使这些图共享相同的Y轴?X轴也应该是一样的,但我想这只是需要我去掉X轴标签,因为我已经在数据中确认了每组都有相同的X点


奖励:有没有办法把最后那几个空的地块移走?我不能保证我将拥有一组填充整行的绘图。

若要共享所有Yax,请使用

fig, axs = plt.subplots(nrows=rows, ncols=cols, sharey=True)
对于x相同:sharex=True

要删除多余的轴,可以通过附加

for j in range(i+1, len(axs.flatten())):
    axs.flatten()[j].axis("off")
其中i是前一个循环中的循环变量

完整的工作示例:

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

dfh = pd.DataFrame({"LOC" : np.random.randint(0,6, size=100),
              "CNT" : np.arange(100)})

cols = 5
rows = 2

fig, axs = plt.subplots(nrows=rows, ncols=cols, sharey=True, sharex=True)

grouped = dfh.groupby('LOC')

targets = zip(grouped.groups.keys(), axs.flatten())
for i, (key, ax) in enumerate(targets):
    ax.plot(grouped.get_group(key)['CNT'])

for j in range(i+1, len(axs.flatten())):
    axs.flatten()[j].axis("off")

plt.show()

我不认为我理解关闭轴的最后一个代码块。我把它放在ax.plot行后面的for循环中,但它产生了这样的结果:设置shary仍然有效。非常感谢。这总是一样的:人们问一个没有可复制代码的问题,然后抱怨答案没有显示可复制代码。我现在已经包括了一个例子。