2015-08-01 2 views
5

Я хотел бы спросить, как я могу вставить фигуру из морского дерева в панель wxPython.Вложение Морской участок в панель WxPython

Аналогично этому post, я хочу встроить внешнюю фигуру в панель wxPython. Мне нужна конкретная панель моего графического интерфейса wxPython для построения контуров плотности моих данных на основе значений ширины гауссовского ядра в соответствии с функцией kdeplot от Seaborn и диаграммой рассеяния точек данных. Вот пример того, что я хотел бы быть нанесены на панели: example

До сих пор я не удалось получить то, что я хочу в отдельном рисунке из самых wxPython panel.Is можно встроить Сиборн участок в панели wxPython или должен найти альтернативный способ реализовать то, что я хочу?

Ниже конкретная часть моего кода, который генерирует участок в случае, если это необходимо:

import seaborn as sns 
import numpy as np 

fig = self._view_frame.figure 

data = np.loadtxt(r'data.csv',delimiter=',') 
ax = fig.add_subplot(111) 
ax.cla() 
sns.kdeplot(data, bw=10, kernel='gau', cmap="Reds") 
ax.scatter(data[:,0],data[:,1], color='r') 

fig.canvas.draw() 

Эта часть коды участков в панели WxPython рассеянных точки данных и создает внешнюю фигуру для контуры плотности. Но, если я пытаюсь ax.sns.kdeplot(...) я получаю ошибку

Attribute Error: AxesSubplot object has not attribute .sns

Я не знаю, могу ли я вставлять фигуру Сиборн в wxPython панели или я должен попытаться реализовать это по-другому. Какие-либо предложения?

Заранее спасибо.

+1

Сиборн ('sns') использует MPL, но это совершенно отдельная библиотека. 'ax.sns' не имеет смысла. Вы хотите передать' ax' в функцию 'sns.kdeplot'. –

+0

Я сделал именно это и работает как шарм. Я заметил на странице [page] (http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.kdeplot.html), что он принимает такой параметр. В частности, параметр «ax» показывает ось ** для построения графика. Итак, в моем случае я имел дело с моей проблемой, выполнив следующее: 'sns.kdeplot (data, ** ax = ax **, bw = 10, kernel = 'gau', cmap =" Reds ")'. Большое вам спасибо :). – user3204834

ответ

2

Я ничего не знаю о wxPython, но если вы хотите нанести на определенные оси, используйте аргумент ключевого слова ax.

+0

На самом деле, я не заметил на странице [page] (http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.kdeplot.html), что он принимает такой параметр. Как видно, «морской.kdeplot (data, data2 = None, shade = False, vertical = False, kernel = 'gau', bw = 'scott', gridsize = 100, cut = 3, clip = None, legend = True, cumulative = False, shade_lowest = Правда, ** ax = None **, ** kwargs) 'параметр' ax' показывает ** ось ** для построения графика. Итак, в моем случае я имел дело с моей проблемой, выполнив следующее: 'sns.kdeplot (data, ** ax = ax **, bw = 10, kernel = 'gau', cmap =" Reds ")'. Спасибо за вашу помощь :). – user3204834

2

Я никогда не использовал Seaborn, но я думаю, потому что документ говорит: «Seaborn - это библиотека визуализации Python на основе matplotlib», вы, вероятно, можете использовать класс MPL под названием FigureCanvasWxAgg.

Вот пример кода для встраивания фигуры MPL в wxPython.

import numpy as np 
import wx 

import matplotlib 
matplotlib.use('WXAgg') 
from matplotlib.figure import Figure 
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg 

import seaborn 

class test(wx.Frame): 

    def __init__(self): 

     wx.Frame.__init__(self, None, title='Main frame') 

     # just a normal MPL "Figure" object 
     figure = Figure(None) 
     # Place a widget to hold MPL figure. no sizer because this is the only widget 
     fc = FigureCanvasWxAgg(self, -1, figure) 

     # your plotting code here, this can be sns calls i think 
     subplot = figure.add_subplot(111) 
     subplot.plot(np.arange(10)) 

     # Lastly show them 
     self.Show() 


if __name__ == '__main__': 

    app = wx.App(0) 
    testframe = test() 
    app.MainLoop() 

Вы могли бы просто заменить код построения графиков с SNS вещами и просто убедитесь, что сюжет на «Рисунок» объект из MPL.

PS. Из интереса, я пип установил его, и только импорт морского дна уже изменил стиль MPL. Так, кажется, это работает. Из-за вызова matplotlib.use вы захотите импортировать морское судно после импорта MPL.

enter image description here

+0

[kdeplot] Seaborn [http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.kdeplot.html) принимает в качестве аргумента ** ось ** для построения графика. Это параметр 'ax'. В моем случае я рассмотрел свою проблему, выполнив следующие действия: 'sns.kdeplot (data, ax = ax, bw = 10, kernel = 'gau', cmap =" Reds ")'. В коде, который вы указали выше, это можно сделать с помощью: sns.kdeplot (yourdata, ax = subplot, bw = 10, kernel = 'gau', cmap = "Reds") '. Первоначально это была моя проблема, я не мог найти способ и не зацикливаться на фигуре (оси) wxpython. Благодарю. :) – user3204834

Смежные вопросы