#python #django #matplotlib #mpld3
#python #django #matplotlib #mpld3
Вопрос:
Я работал над проектом на Python, используя Matplotlib в тандеме с Django. Прямо сейчас я просто хочу отобразить график на веб-странице. Раньше я сохранял рисунок в формате PNG, и график отображался. К сожалению, это отключает некоторые интерактивные функции, которые я планировал включить. Чтобы обойти это, я использовал функцию MPLD3, fig_to_html, которая, как я видел, работала в других примерах. Однако, когда я использовал строку в своем собственном коде, на экране ничего не появилось.
Вот мой код:
def index(request):
# template = loader.get_template('')
noaaNmbr='11809'
#for right now, this is the only active region that I'm pulling data for. When I get the graph up and running, I will make it more interactive for the user so that he can
urlData = "http://www.lmsal.com/hek/hcr?cmd=search-events3amp;outputformat=jsonamp;instrument=IRISamp;noaanum=" noaaNmbr "amp;hasData=true"
webUrl = urlopen(urlData)
counter = 0
data = webUrl.read().decode('utf-8')
hekJSON = json.loads(data)
getInfo(counter, hekJSON)
sort()
# Sorts the data from earliest to most recent
chart = plt.figure()
fig, ax = plt.subplots(figsize=(30, 30))
circle = Circle((0, 0), 980, facecolor='none', edgecolor=(0, 0.8, 0.8), linewidth=3, alpha=0.5)
ax.add_patch(circle)
# Creates circular representation of the sun on the graph because that's all I really need for now
plt.plot(xcen, ycen, color="red")
plt.plot(xcen, ycen, 'ro', color = 'blue')
#first plots the points in red, then draws lines between the points in blue
plt.xlim([setXMin(hekJSON), setXMax(hekJSON)])
plt.ylim([setYMin(hekJSON), setYMax(hekJSON)])
#sets the boundaries of the graph
ax.set_xticks(np.arange(round_multiple(setXMin(hekJSON),50), round_multiple(setXMax(hekJSON), 50), 50))
ax.set_yticks(np.arange(round_multiple(setYMin(hekJSON),50), round_multiple(setYMax(hekJSON), 50), 50))
#sets the ticks
for i in range(getNumberOfEntries(hekJSON)):
if xfov[i] != 0:
xStart = xcen[i] - xfov[i]/14
yStart = ycen[i] - yfov[i]/14
ax.add_patch(Rectangle((xStart, yStart), xfov[i]/7, yfov[i]/7, facecolor='none'))
plt.grid()
g = mpld3.fig_to_html(chart)
return HttpResponse(g)
Моя текущая теория заключается в том, что установка chart = plt.figure(), но также использование «подзаголовков» приводит к тому, что plt.figure ничего не включает. Однако, если я удалю строку и вместо этого помещу
g = mpld3.fig_to_html(fig)
Я получаю сообщение об ошибке
TypeError at /charts/
350 is not JSON serializable
Может кто-нибудь помочь мне понять, что происходит не так?
Изображение графика включено:
Комментарии:
1. Как выглядел рабочий код?
2. @tommy.carstensen Под working вы имеете в виду код, который отображает PNG?