Как расположить фигуру в матплотлиб - PullRequest
1 голос
/ 26 августа 2011

Я новичок в Python / Django и пытаюсь создать сайт, который генерирует графики. Для создания графиков я использую matplotlib.

Когда я запускаю страницу в первый раз, все в порядке, но после обновления в результате я получаю неправильный график (составленный из нового и старого графика).

Вот код:

    from pylab import *

    ...


    #prepare values and labels
    values = []
    labels = []
    values.append(float(user.playcount)/sum*100)
    labels.append(user.name)

    for friend in friends:
        friend = friend.getInfo()
        values.append(float(friend.playcount)/sum*100)
        labels.append(friend.name)

    # create figure
    figure(1)

    # set some parameters
    params = { 'axes.labelsize': 6, 'text.fontsize': 6, 'font.size': 6, 'legend.fontsize': 6, 'xtick.labelsize': 6, 'ytick.labelsize': 6,}        
    rcParams.update(params)

    # draw, add legend and save
    pie(values, labels=labels, shadow=False)
    l = legend(loc='lower center', ncol= 5, bbox_to_anchor=(0.5, -0.25))
    l.get_frame().set_alpha(0.0)
    savefig('media/images/3.png', dpi=100, transparent=True)

    #close(1)

Если я раскомментирую инструкцию close (1), возникнет проблема с обновлением страницы, поскольку приложение застрянет на инструкции figure ().

Может кто-нибудь сказать мне, где проблема? Я думаю, что с раскладом фигур что-то не так, но я понятия не имею, что именно.

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Я думаю, вы бы выиграли от использования метода cla() axes, который очищает оси .Вы можете сделать это в верхней части вашего скрипта, прежде чем что-либо будет сделано;еще до первого сюжета.Я бы использовал это вместо close(), потому что тогда второй раз вокруг фигуры не будет.Поэтому я бы заменил строку figure(1) на

figure(1)
figure(1).gca().cla()

. Это установит цифру на рисунок 1, затем получит текущие оси (gca()) и затем очистит ее с помощью cla().Вот сценарий, который я независимо выполнял для django, который работал для меня и подражал тому, что, я думаю, вы пытаетесь сделать:

from pylab import *

#prepare values and labels
values = [34,17,29,6,14]
labels = ["john","jane","jim","jason","judy"]

# create figure
figure(1)
figure(1).gca().cla()

# set some parameters
params = { 'axes.labelsize': 6, 'text.fontsize': 6, 'font.size': 6, 
           'legend.fontsize': 6, 'xtick.labelsize': 6, 
           'ytick.labelsize': 6,}        
rcParams.update(params)

# draw, add legend and save
pie(values, labels=labels, shadow=False)
l = legend(loc='lower center', ncol= 5, bbox_to_anchor=(0.5, -0.25))
l.get_frame().set_alpha(0.0)
savefig('3.png', dpi=100, transparent=True)


#close(1)

values2 = [24,27,29,16,4]
labels2 = ["dave","donna","derrick","dotty","drew"]

figure(1)
figure(1).gca().cla()

# draw, add legend and save
pie(values2, labels=labels2, shadow=False)
l = legend(loc='lower center', ncol= 5, bbox_to_anchor=(0.5, -0.25))
l.get_frame().set_alpha(0.0)
savefig('4.png', dpi=100, transparent=True)

#show()

Вы, вероятно, можете обойтись только одной строкой;только то, что это сработало для меня:

figure(1).gca().cla()

Но это немного яснее, возможно, с другой стороны.

0 голосов
/ 08 августа 2014

Согласно ответу Кристиана Чиупиту на этот похожий вопрос , используйте figure() вместо figure(1), чтобы решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...