Я пытаюсь организовать круговые диаграммы в сетку с другим столбцом слева, в котором я записываю некоторые релевантные данные на круговых диаграммах конкретной строки. Прямо сейчас мой код:
data = [[0.3,0.3,0.3,0.1],[0.2,0.2,0.2,0.4],[0.1,0.1,0.4,0.4]]
def main():
createPieCharts(data)
return 0
def createPieCharts(data,piecharts_fname="piecharts"):
""" """
import datetime
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
areas = ['Arava','Lotz','Paran','Ramon']
thresholds = [0.0,0.01,0.02]
num_columns = len(areas)
num_rows = len(thresholds)
with PdfPages(piecharts_fname+'.pdf') as pdf:
fig, ax = plt.subplots(num_rows,num_columns)
# fig.suptitle('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
for i,threshold in enumerate(thresholds):
fracs = data[i]
for j,area in enumerate(areas):
ax[i,j].set_title(area)
ax[i,j].pie(fracs, labels=labels,
autopct='%1.1f%%', shadow=True, startangle=90)
ax[i,j].set_aspect('equal')
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
pdf.savefig(fig)
plt.close()
# Adding metadata for PDF file
d = pdf.infodict()
d['Title'] = 'Pie charts'
d['CreationDate'] = datetime.datetime.today()
if __name__ == '__main__':
main()
И результат выглядит так Хотя я бы хотел, чтобы слева был еще один столбец, как в этом примере -
Как это сделать с умом?
2 ответа
Добавьте дополнительный столбец и поместите туда свой текст.
Затем вам просто нужно отключить линии осей и отметки от осей в левом столбце (ax.set_axis_off()
) и добавьте текстовые метки с помощью ax.text
.
Обратите внимание, что вам также необходимо добавить 1 к индексу j для других осей, по которым вы строите круговые диаграммы.
Вот функция из вашего скрипта, измененная:
def createPieCharts(data,piecharts_fname="piecharts"):
""" """
import datetime
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
areas = ['Arava','Lotz','Paran','Ramon']
thresholds = [0.0,0.01,0.02]
num_columns = len(areas) + 1 # Add extra column for text
num_rows = len(thresholds)
with PdfPages(piecharts_fname+'.pdf') as pdf:
fig, ax = plt.subplots(num_rows,num_columns)
# fig.suptitle('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
for i,threshold in enumerate(thresholds):
fracs = data[i]
ax[i,0].set_axis_off() # Turn off axes & ticks
ax[i,0].text(0.5,0.5,threshold,ha='center',va='center') # Add text
for j,area in enumerate(areas):
ax[i,j+1].set_title(area) # Add 1 to j index
ax[i,j+1].pie(fracs, labels=labels, # Add 1 to j index
autopct='%1.1f%%', shadow=True, startangle=90)
ax[i,j+1].set_aspect('equal') # Add 1 to j index
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
pdf.savefig(fig)
plt.close()
# Adding metadata for PDF file
d = pdf.infodict()
d['Title'] = 'Pie charts'
d['CreationDate'] = datetime.datetime.today()
Это возможно, если вы используете специальные функции для объекта оси is_first_col
для обозначения оси y и is_last_row
для оси x:
def createPieCharts(data,piecharts_fname="piecharts"):
""" """
import datetime
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
areas = ['Arava','Lotz','Paran','Ramon']
thresholds = [0.0,0.01,0.02]
num_columns = len(areas)
num_rows = len(thresholds)
val = 0. # to y axis labels
with PdfPages(piecharts_fname+'.pdf') as pdf:
fig, ax = plt.subplots(num_rows,num_columns)
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
for i,threshold in enumerate(thresholds):
fracs = data[i]
for j,area in enumerate(areas):
ax[i,j].set_title(area)
ax[i,j].pie(fracs, labels=labels,
autopct='%1.1f%%', shadow=True, startangle=90)
ax[i,j].set_aspect('equal')
# label y axis
if ax[i,j].is_first_col():
ax[i,j].set_ylabel(str(val), fontsize = 9, rotation = 0)
val += .01
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
pdf.savefig(fig)
plt.close()
# Adding metadata for PDF file
d = pdf.infodict()
d['Title'] = 'Pie charts'
d['CreationDate'] = datetime.datetime.today()
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.