我在python中有字典:
dict = {1: {'A': 11472, 'C': 8405, 'T': 11428, 'G': 6613}, 2: {'A': 11678, 'C': 9388, 'T': 10262, 'G': 6590}, 3: {'A': 2945, 'C': 25843, 'T': 6980, 'G': 2150}, 4: {'A': 1149, 'C': 24552, 'T': 7000, 'G': 5217}, 5: {'A': 27373, 'C': 3166, 'T': 4494, 'G': 2885}, 6: {'A': 19300, 'C': 4252, 'T': 7510, 'G': 6856}, 7: {'A': 17744, 'C': 5390, 'T': 7472, 'G': 7312}}
此词典有7个小词典,每个小词典有4个条目。我试图在同一图中制作7个饼图(多个图),每个坑图将有4个部分。使用以下函数来绘制我正在绘制的数据。
def plot(array):
array = np.array([list(val.values()) for val in dict.values()])
df = pd.DataFrame(array, index=['a', 'b', 'c', 'd'], columns=['x', 'y','z','w', 'd', 't', 'u'])
plt.style.use('ggplot')
colors = plt.rcParams['axes.color_cycle']
fig, axes = plt.subplots(1,4, figsize=(10,5))
for ax, col in zip(axes, df.columns):
ax.pie(df[col], labels=df.index, autopct='%.2f', colors=colors)
ax.set(ylabel='', title=col, aspect='equal')
axes[0].legend(bbox_to_anchor=(0, 0.5))
fig.savefig('plot.pdf')
plt.show()
但是此函数返回一个带有4个饼图的图形,每个饼图都有7个部分。并且如果我替换“ index”和“ columns”,我将得到以下error
:
ValueError: Shape of passed values is (4, 7), indices imply (7, 4)
您知道我该如何解决吗?这是我将得到但不正确的数字。
答案 0 :(得分:0)
有两个问题:
您需要7个子图,但您仅使用plt.subplots(1,4)
创建了4个。您应该将(1,7)
定义为具有7个子图。
您需要相应地重塑数据。由于您需要7个饼图,每个饼图都有4个条目,因此您需要调整数组的形状以使其形状为(4, 7)
PS:我使用的是matplotlib 2.2.2
,其中'axes.color_cycle'
已贬值。
下面是修改后的plot
函数。
def plot():
array = np.array([list(val.values()) for val in dict.values()]).reshape((4, 7))
df = pd.DataFrame(array, index=['a', 'b', 'c', 'd'], columns=['x', 'y','z','w', 'd', 't', 'u'])
plt.style.use('ggplot')
colors = plt.rcParams['axes.color_cycle']
fig, axes = plt.subplots(1,7, figsize=(12,8))
for ax, col in zip(axes, df.columns):
ax.pie(df[col], labels=df.index, autopct='%.2f', colors=colors)
ax.set(ylabel='', title=col, aspect='equal')
axes[0].legend(bbox_to_anchor=(0, 0.5))