Я хотел бы построить две круговые диаграммы одна рядом с другой. Я создаю их индивидуально следующим образом:

круговая диаграмма 1 :

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4,3),dpi=144)
ax = fig.add_subplot(111)

cts = df1.Name.value_counts().to_frame()
ax.pie(cts.Name)

круговая диаграмма 2 :

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4,3),dpi=144)
ax = fig.add_subplot(111)

cts = df2.Name.value_counts().to_frame()
ax.pie(cts.Name)

Я не знаком с визуализацией в python, но думаю, мне следует использовать subplot для создания этих двух графиков.

Пример данных:

df1 :

  Name

  water
  fire
  water
  fire
  fire
  fire

df2

  Name

  fire
  fire
 stones
 stones
 stones
 stones 
0
Val 25 Фев 2021 в 00:35

3 ответа

Лучший ответ

Вам нужно создать две подзаголовки - по одной для каждой круговой диаграммы. Следующий код сделает это (объяснение в комментариях):

import matplotlib.pyplot as plt

# the same figure for both subplots
fig = plt.figure(figsize=(4,3),dpi=144)

# axes object for the first pie chart 
# fig.add_subplot(121) will create a grid of subplots consisting 
# of one row (the first 1 in (121)), two columns (the 2 in (121)) 
# and place the axes object as the first subplot 
# in the grid (the second 1 in (121))
ax1 = fig.add_subplot(121)

# plot the first pie chart in ax1
cts = df1.Name.value_counts().to_frame()
ax1.pie(cts.Name)

# axes object for the second pie chart 
# fig.add_subplot(122) will place ax2 as the second 
# axes object in the grid of the same shape as specified for ax1 
ax2 = fig.add_subplot(122)

# plot the sencond pie chart in ax2
cts = df2.Name.value_counts().to_frame()
ax2.pie(cts.Name)

plt.show()

Это дает:

enter image description here

1
bb1 24 Фев 2021 в 22:35

Вы можете использовать subplots:

import matplotlib.pyplot as plt

colors = {'water': 'b', 'fire': 'r', 'stones': 'gray'}  # same color for each name in both pie
fig, axes = plt.subplots(1, 2, figsize=(4,3),dpi=144)
plt.suptitle("Big title")

for ax, df, title in zip(axes, (df1, df2), ('Title 1', 'Title 2')):
    count = df.Name.value_counts().to_frame().sort_index()
    ax.pie(count.Name, labels=count.index, colors=[colors[c] for c in count.index])
    ax.set_title(title)

enter image description here

1
PieCot 24 Фев 2021 в 22:48

Это сработает. Вы можете определить subplots с помощью fig.add_subplot(row, column, position).

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4,3),dpi=144)
ax = fig.add_subplot(121)

cts = df1.Name.value_counts().to_frame()
ax.pie(cts.Name)

ax = fig.add_subplot(122)
cts = df2.Name.value_counts().to_frame()
ax.pie(cts.Name)

enter image description here

1
Jay Patel 24 Фев 2021 в 22:19