[英]Plot multiple histograms as a grid
I am trying to plot multiple histograms on the same window using a list of tuples.我正在尝试使用元组列表在同一个 window 上 plot 多个直方图。 I have managed to get it to sketch only 1 tuple at a time and I just can't seem to get it to work with all of them.
我设法让它一次只绘制 1 个元组,但我似乎无法让它与所有这些元组一起工作。
import numpy as np
import matplotlib.pyplot as plt
a = [(1, 2, 0, 0, 0, 3, 3, 1, 2, 2), (0, 2, 3, 3, 0, 1, 1, 1, 2, 2), (1, 2, 0, 3, 0, 1, 2, 1, 2, 2),(2, 0, 0, 3, 3, 1, 2, 1, 2, 2),(3,1,2,3,0,0,1,2,3,1)] #my list of tuples
q1,q2,q3,q4,q5,q6,q7,q8,q9,q10 = zip(*a) #split into [(1,0,1,2,3) ,(2,2,2,0,1),..etc] where q1=(1,0,1,2,3)
labels, counts = np.unique(q1,return_counts=True) #labels = 0,1,2,3 and counts the occurence of 0,1,2,3
ticks = range(len(counts))
plt.bar(ticks,counts, align='center')
plt.xticks(ticks, labels)
plt.show()
As you can see from the above code, I can plot one tuple at a time say q1,q2 etc but how do I generalise it so that it plots all of them.正如您从上面的代码中看到的那样,我可以一次使用 plot 一个元组说 q1、q2 等,但是我如何对其进行概括以便绘制所有这些元组。
I've tried to mimic this python plot multiple histograms , which is exactly what I want however I had no luck.我试图模仿这个python plot 多个直方图,这正是我想要的,但是我没有运气。
Thank you for your time:)感谢您的时间:)
You need to define a grid of axes with plt.subplots
taking into account the amount of tuples in the list, and how many you want per row.您需要使用
plt.subplots
定义一个轴网格,同时考虑到列表中的元组数量以及每行需要多少个。 Then iterate over the returned axes, and plot the histograms in the corresponding axis.然后遍历返回的轴,plot 对应轴的直方图。 You could use Axes.hist , but I've always preferred to use
ax.bar
, from the result of np.unique
, which also can return the counts of unique values:您可以使用Axes.hist ,但我一直更喜欢使用
ax.bar
的结果np.unique
,它也可以返回唯一值的计数:
from matplotlib import pyplot as plt
import numpy as np
l = list(zip(*a))
n_cols = 2
fig, axes = plt.subplots(nrows=int(np.ceil(len(l)/n_cols)),
ncols=n_cols,
figsize=(15,15))
for i, (t, ax) in enumerate(zip(l, axes.flatten())):
labels, counts = np.unique(t, return_counts=True)
ax.bar(labels, counts, align='center', color='blue', alpha=.3)
ax.title.set_text(f'Tuple {i}')
plt.tight_layout()
plt.show()
You can customise the above to whatever amount of rows/cols you prefer, for 3
rows for instance:您可以将上述内容自定义为您喜欢的任意数量的行/列,例如
3
行:
l = list(zip(*a))
n_cols = 3
fig, axes = plt.subplots(nrows=int(np.ceil(len(l)/n_cols)),
ncols=n_cols,
figsize=(15,15))
for i, (t, ax) in enumerate(zip(l, axes.flatten())):
labels, counts = np.unique(t, return_counts=True)
ax.bar(labels, counts, align='center', color='blue', alpha=.3)
ax.title.set_text(f'Tuple {i}')
plt.tight_layout()
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.