2016-11-21 110 views
0

我有下一個繪圖,但正如你所看到的,它不可能看到直立的部分。所以我想知道我能做些什麼來看整個情節並減少他的體型。代碼來自Stack的另一個用戶。顯示邊界並更改Python繪圖的大小

謝謝。

import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns 
import pandas as pd 

def _scale_data(data, ranges): 
    """scales data[1:] to ranges[0], 
    """ 
    for d, (y1, y2) in zip(data[1:], ranges[1:]): 
     assert (y1 <= d <= y2) or (y2 <= d <= y1) 
    x1, x2 = ranges[0] 
    d = data[0] 
    sdata = [d] 
    for d, (y1, y2) in zip(data[1:], ranges[1:]): 
     sdata.append((d-y1)/(y2-y1) 
        * (x2 - x1) + x1) 
    return sdata 

class ComplexRadar(): 
    def __init__(self, fig, variables, ranges, 
       n_ordinate_levels=6): 
     angles = np.arange(0, 360, 360./len(variables)) 

     axes = [fig.add_axes([0.1,0.1,0.9,0.9],polar=True, 
       label = "axes{}".format(i)) 
       for i in range(len(variables))] 
     l, text = axes[0].set_thetagrids(angles, 
             labels=variables) 
     [txt.set_rotation(angle-90) for txt, angle 
      in zip(text, angles)] 
     for ax in axes[1:]: 
      ax.patch.set_visible(False) 
      ax.grid("off") 
      ax.xaxis.set_visible(False) 
     for i, ax in enumerate(axes): 
      grid = np.linspace(*ranges[i], 
           num=n_ordinate_levels) 
      gridlabel = ["{}".format(round(x,2)) 
         for x in grid] 
      if ranges[i][0] > ranges[i][1]: 
       grid = grid[::-1] # hack to invert grid 
          # gridlabels aren't reversed 
      gridlabel[0] = "" # clean up origin 
      ax.set_rgrids(grid, labels=gridlabel, 
         angle=angles[i]) 
      #ax.spines["polar"].set_visible(False) 
      ax.set_ylim(*ranges[i]) 
     # variables for plotting 
     self.angle = np.deg2rad(np.r_[angles, angles[0]]) 
     self.ranges = ranges 
     self.ax = axes[0] 

    def plot(self, data, *args, **kw): 
     sdata = _scale_data(data, self.ranges) 
     l = self.ax.plot(self.angle, np.r_[sdata, sdata[0]], *args, **kw) 
     return l 

    def fill(self, data, *args, **kw): 
     sdata = _scale_data(data, self.ranges) 
     self.ax.fill(self.angle, np.r_[sdata, sdata[0]], *args, **kw) 



index = ["Carl","Michael","Peter","Louis","Sarah", "Laura","Nicholas"]  
df = pd.DataFrame({ 
    "Spe": pd.Series([89, 83, 70, 60, 30, 49, 28]), 
    "Str": pd.Series([69, 53, 30, 20, 10, 29, 48]), 
    "Det": pd.Series([82, 44, 79, 39, 20, 10, 85]), 
    "Extr": pd.Series([59, 74, 29, 36, 18, 29, 18]), 
    "Int": pd.Series([63, 11, 20, 36, 97, 58, 91]), 
    "Est": pd.Series([12, 69, 89, 59, 19, 58, 98]), 
    "Ape": pd.Series([29, 13, 94, 30, 20, 10, 67]), 
}) 

variables = [k[0] for k in df.iteritems()] 

ranges = [(1.,100.),(1.,100.),(1.,100.),(1.,100.),(1.,100.),(1.,100.),(1.,100.)] 
fig1 = plt.figure(figsize=(8, 8)) 
radar = ComplexRadar(fig1, variables, ranges) 
lax = [] 
for i, name in enumerate(index): 
    data=df.iloc[i].values 
    l, = radar.plot(data, label=name) 
    lax.append(l) 
    radar.fill(data,alpha=0.2) 

legendax = fig1.add_axes([0.8,0.8,0.1,.1]) 
legendax.legend(handles = lax, labels=index, loc=3, bbox_to_anchor=(0,0,1,1), bbox_transform=fig1.transFigure) 

legendax.axis('off') 
sns.plt.show() 

This is the plot

+0

最初的代碼來自[這裏](https://gist.github.com/kylerbrown/29ce940165b22b8f25f4),並且在[本文]中添加了圖例(https://stackoverflow.com/questions/40208035/adding -legend到一個-radarchart合蟒) – ImportanceOfBeingErnest

回答

0

圖的大小由fig1 = plt.figure(figsize=(8, 8))決定的,所以在這裏的8×8英寸。您可以根據需要更改值來縮小尺寸。

圖內的圖的大小由

fig.add_axes([0.1,0.1,0.9,0.9])

此命令意味着您與參數[left, bottom, width, height]添加一個軸來確定。因此,減少widthheight將會減少繪圖大小。嘗試fig.add_axes([0.1,0.1,0.7,0.7])或您喜歡的任何其他值。