2017-02-02 2 views
0

На самом деле все работает отлично: я пытаюсь сравнить разные группы в своем опросе на одной диаграмме. Таким образом, я написал следующий код в Python (Jupyter-Notebook)Сгруппированные квадраты ящиков слишком узкие, чтобы читать

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

функция «getdf» запрашивает столбец из базы данных

, к сожалению, это приводит к нечитаемым диаграмме, как этот a diagram with to narrow box plots возможно чтобы дать группам меньшее расстояние и соответственно ящики в группе больше? Или что-нибудь еще, что сделает его более читаемым?

Спасибо

+0

Можете ли вы исправить отступы в вопросе? – titipata

+0

@titipata done ... thx – beetrood

+0

Также в ответ :) Извините за прослушивание, lol! – titipata

ответ

0

Я решил эту проблему на моем собственном: странного поведение произошло из-за петлей for cata in catpool - данные присущи рефлективными, вербальный групп должно содержать значение группы в кадре данных: так что я просто Бесполезным 't loop в этом месте, но зацикливается на конкатенации SQL-оператора. Таким образом, одни и те же запросы были выполнены, но были соединены вместе «UNION», как это:

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 

, который решает эту проблему. Атрибут 'x' для вызова ящика должен быть списком или файлом данных, а не только одной строкой, даже если строка всегда одна и та же. Я предполагаю, что это вызывало «невидимые» значения x, что делало автоматическое масштабирование невозможным, или, другими словами, новое значение в легенде для каждого запроса с новым ограничением и для каждой категории, для каждого ограничения требуется только один фрейм. при изменении этого - тонкие настройки могут быть сделаны путем добавления атрибута boxgroupgap или groupgab к макету ... , пожалуйста, извините мой английский

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