2015-08-01 23 views
5

wxPython panelinde bir deniz kıyısı figürünü nasıl yerleştirebileceğimi sormak istiyorum.WxPython paneline Seaborn çizimini yerleştirme

Benzer şekilde, bu post, wxPython panelinde bir dış şekil gömmek istiyorum. Seaborn'un kdeplot işlevine göre, veri noktalarının dağılım grafiği ile birlikte, bir Gauss çekirdeğinin bant genişliği değerlerine dayanarak veriimin yoğunluk konturlarını çizmek için wxPython GUI'nin belirli bir panelini istiyorum. İşte panelde çizilen istiyorum ne bir örnek: example

Şu ana kadar, wxPython panel.Is dışında ayrı bir şekilde İstediğimi elde başarmış mümkün bir Seaborn arsa gömmek için wxPython panelinde veya istediğimi uygulamak için alternatif bir yol bulmalı mıyım?

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 panelinde dağınık veri noktaları kod araziler bu bölümü ve için harici bir rakam oluşturur: Aşağıda

o ihtiyaç duyulması halinde arsa üretir benim kod belirli bir parçasıdır yoğunluk konturları. Ben ax.sns.kdeplot(...) çalışırsanız Ama, ben wxPython panelinde bir Seaborn rakam gömebilir veya başka bir şekilde bunu uygulamaya denemelisiniz eğer bilmiyorum hatası

Attribute Error: AxesSubplot object has not attribute .sns

olsun. Baska öneri?

Şimdiden teşekkürler.

+1

Seaborn ('sns') MPL kullanır, ancak tamamen ayrı bir kütüphanedir. ax.sns hiçbir anlam ifade etmiyor. Axe 'sns.kdeplot' işlevine geçmek istersiniz. –

+0

Ben bunu yaptım ve bir çekicilik gibi çalışır. Fonksiyonun [sayfa] (http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.kdeplot.html) üzerinde böyle bir parametre kabul ettiğini fark ettim. Daha spesifik olarak, 'ax' parametresi, çizmek için ** eksenini ** gösterir. Bu yüzden, benim durumumda, aşağıdakileri yaparak problemimi çözdüm: 'sns.kdeplot (data, ** ax = ax **, bw = 10, kernel = 'gau', cmap =" Reds ")'. Size çok teşekkür ederim :). – user3204834

cevap

2

WxPython hakkında bir şey bilmiyorum, ancak belirli bir eksen üzerinde çizmek istiyorsanız, ax anahtar kelime bağımsız değişkenini kullanın.

+0

Aslında, işlevin [sayfa] (http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.kdeplot.html) üzerinde böyle bir parametre kabul ettiğini fark etmedim. Görüldüğü gibi, denizanası.kdeplot (data, data2 = None, shade = False, vertical = False, kernel = 'gau', bw = 'scott', gridsize = 100, cut = 3, clip = Yok, gösterge = Doğru, kümülatif = False, shade_lowest = Doğru, ** ax = Yok **, ** kwargs) '' '' '' '' ax' parametresi, üzerinde ** eksenini gösterir. Bu yüzden, benim durumumda, aşağıdakileri yaparak problemimi çözdüm: 'sns.kdeplot (data, ** ax = ax **, bw = 10, kernel = 'gau', cmap =" Reds ")'. Yardım ettiğin için teşekkür ederim :). – user3204834

2

Seaborn'u hiç kullanmamıştım ama sanırım doktor "Seaborn, matplotlib tabanlı bir Python görselleştirme kütüphanesi" diyor, muhtemelen FigureCanvasWxAgg adlı MPL sınıfını kullanabiliyorsunuz.

WxPython'a bir MPL şekil gömmek için örnek bir kod.

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() 

Muhtemelen sadece SNS şeylerle çizim kodunu değiştirmek ve sadece MPL gelen "Şekil" nesne üzerinde çizilecek emin yapabiliriz.

PS. Faiz dışı, ben kurdum ve sadece denizanası ithal MPL tarzı zaten değişti. Yani, çalışıyor gibi görünüyor. Matplotlib.use çağrısı nedeniyle, MPL ithalatından sonra denizden ithal etmek isteyeceksiniz.

enter image description here

+0

Seaborn'un [kdeplot] (http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.kdeplot.html) argümanı olarak ** ekseni ** 'yi çizer. Bu 'ax' parametresidir. Benim durumumda, aşağıdakileri yaparak problemimi çözdüm: 'sns.kdeplot (data, ax = ax, bw = 10, kernel = 'gau', cmap =" Reds ")'. Yukarıda yazdığınız kodda, bu sns.kdeplot (yourdata, ax = subplot, bw = 10, kernel = 'gau', cmap = "Reds") 'tarafından yapılabilir. Bu başlangıçta benim sorunumdu, bir yol bulamadım ve wxpython'un rakamını (eksen) çizmek için emin oldum. Teşekkürler. :) – user3204834