Python 如何与多个子地块共享Y轴幅值?
我有一个包含三列的CSV:日期、LOC、CNT示例如下。我想要很多子情节,最终会有大约200个这样的情节,我想是迷你们大小的情节,但我还没到那个程度。我遇到的问题是,我的图没有共享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
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仍然有效。非常感谢。这总是一样的:人们问一个没有可复制代码的问题,然后抱怨答案没有显示可复制代码。我现在已经包括了一个例子。