繁体   English   中英

plot 如何在单个页面中显示多个饼图?

[英]how to plot multiple pie chart in a single page?

我有一本包含 63 个项目的字典。 我可以制作 63 饼图吗? 或历史图表?

对于字典items的单个项目Normalize_title我有以下代码:

fig, ax = plt.subplots() 
ax.pie(items[Normalize_title]['y'], labels=items[Normalize_title]['x'], autopct='%1.1f%%')
ax.axis('equal')
ax.set_title(Normalize_title)
y_pos = range(len(list(items[Normalize_title]['x'])))
     #   plt.xticks(y_pos, list(v.keys()), rotation=90)
plt.show()

但我想在项目上使用 for 循环并同时绘制所有内容:像这样:

for title in titles_list:
     ax.pie(items[title][y], labels=items[title]['x'])

您可以创建一个子图网格并将一个饼图放入每个子图中。

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

mpl.rcParams['font.size'] = 8
items = dict()
for _ in range(63):
    items["".join(np.random.choice([*'abcdefghij'], 7))] = {'y': np.random.randint(10, 20, 4), 'x': [*'ABCD']}

fig, axes = plt.subplots(nrows=7, ncols=9, figsize=(10, 12))
colors = plt.cm.Set3.colors
for ax, Normalize_title in zip(axes.ravel(), items.keys()):
    ax.pie(items[Normalize_title]['y'], labels=items[Normalize_title]['x'], autopct='%1.1f%%',
           colors=colors, labeldistance=1.15)
    ax.set_title(Normalize_title)
    ax.axis('equal')
    ax.axis('off')
plt.tight_layout()
plt.show()

这看起来像: 饼图网格

您可能想要根据您的数据更改填充、文本大小、colors 等。

您可以通过ncols创建nrows的子图网格,然后 map 将线性index放入rowcol

nrows, ncols = 11, 6
fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=(ncols*2, nrows*2))

for index, key in enumerate(items.keys()):
    row = index // ncols
    col = index % ncols
    ax = axes[row, col]

    ax.pie(items[key]['y'], labels=items[key]['x'])
    ax.set_title(key)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM