2017-02-02 3 views
0

Eigentlich funktioniert alles ganz gut: Ich versuche, in einem Diagramm verschiedene Gruppen in meiner Umfrage zu vergleichen. so schrieb ich den folgenden Code in Python (Jupyter-Notebook)gruppierten Box-Plots sind zu schmal lesen

for value in values: 
    catpool=getcat() 
    py.offline.init_notebook_mode() 
    data = [] 
    for cata in catpool: 
     for con in constraints: 
      data.append( go.Box(y=getdf(value,cata,con[0])['Y'+value],x=con[1], name=cata, showlegend=False, boxmean='sd', 
          #boxpoints='all', 
          jitter=0.3, 
          pointpos=0)) 
    layout=go.Layout(title="categorie: "+getclearname(value)+" - local space syntax measurements on placements<br>",yaxis=dict(title='percentage of range between flat extremes'),boxmode='group',showlegend=True) 
    fig = go.Figure(data=data, layout=layout) 
    py.offline.iplot(fig, filename='pandas-box-plot') 

die Funktion ‚getdf‘ fragt eine Spalte aus einer Datenbank

leider kommt es zu einem unlesbaren Diagramm wie diese a diagram with to narrow box plots ist es möglich, den Gruppen weniger Abstand geben und dementsprechend die Boxplots in der Gruppe mehr? Oder irgendetwas anderes, das es lesbarer machen würde?

Danke

+0

Können Sie Vertiefung in der Frage beheben? – titipata

+0

@titipata getan ... thx – beetrood

+0

Auch in der Antwort :) Sorry für Lausch, lol! – titipata

Antwort

0

ich dieses Problem in meinem eigenen gelöst: Das seltsame Verhalten aufgetreten, weil die for cata in catpool Schleife - Daten für Boxplots in Gruppen hat den Gruppenwert in dem Datenrahmen enthalten: so dass ich nur didn 't Schleife an dieser Stelle, aber in der Verkettung der SQL-Anweisung geloopt. So wurden die gleichen Abfragen durchgeführt, jedoch wurden die miteinander durch „UNION“ wie folgt aus:

def formstmtelse (val, category, ext, constraint, nine=True): 
    stmt="" 
    if nine: 
     matrix=['11','12','13','21','22','23','31','32','33'] 
    else: 
     matrix=['11'] 
    j=0 
    for cin in category: 
     j=j+1 
     if j>1: 
      stmt=stmt+" UNION " 
     m=0 
     for cell in matrix: 
      m=m+1 
      if m>1: 
       stmt=stmt+"""UNION 
       """ 
      stmt=stmt+"""SELECT '"""+cin+"""' AS cata, 
      """ 
      if ext: 
       stmt=stmt+"""((("""+val+"""-MIN"""+val+""")/(MAX"""+val+"""-MIN"""+val+"""))*100) AS Y"""+val 
      else: 
       stmt=stmt+"""((("""+val+""")/(MAX"""+val+"""))*100) AS Y"""+val 
      stmt=stmt+""" 
      FROM `stests` 
      JOIN ssubject 
      ON ssubject.ssubjectID=stests.ssubjectID 
      JOIN scountries 
      ON CountryGrownUpIn=scountriesID 
      JOIN scontinents 
      ON Continent=scontinentsID 
      JOIN gridpoint 
      ON stests.FlatID=gridpoint.GFlatID AND G"""+cin+cell+"""=GIntID 
      JOIN 
      (
       SELECT GFlatID AS GSUBFlatID""" 
      stmt=stmt+""", 
      MAX("""+val+""") AS MAX"""+val+""",MIN("""+val+""") AS MIN"""+val 
      stmt=stmt+""" 
       FROM gridpoint 
       GROUP BY GSUBFlatID 
      ) 
      AS virtualtable 
      ON FlatID=virtualtable.GSUBFlatID 
      """+constraint+" " 
    return stmt 

, die das Problem löst. Das ‚x‘ Attribut des Box-Aufrufs muss eine Liste oder Datenrahmen, nicht nur eine einzelne Zeichenfolge, auch wenn die Zeichenfolge ist immer gleich. Ich denke, das verursacht wurde ‚unsichtbar‘ x-Werte den automatische Skalierung unmöglich, oder mit anderen Worten einen neuen Punkt in der Legende für jede Abfrage mit einer neuen Einschränkung und für jede Kategorie zu machen, nur ein Datenrahmen für jede Einschränkung benötigt. wenn dieser Wechsel - Feineinstellungen von boxgroupgap oder groupgab Attribute Zugabe gemacht werden könnten, Layout ... bitte mein Englisch entschuldigen

Verwandte Themen