Resize subplots using seaborn

依然范特西╮ 提交于 2021-01-29 03:14:51

问题


I have just recently started to use matplotlib and seaborn to plot my graphs. This is the code that I wrote so far

count = 1
l=[13,0,47,29,10]
plt.figure(figsize=(30,40))

for ww in l:
    temp_dict = defaultdict(list)
    entropies = list()
    for k,v in df.ix[ww].iteritems():
        e = 0
        for i in v:
            temp_dict[k].append(float(i))
            if not float(i) == 0:
                e += -1.0*float(i)*log10(float(i))
        entropies.append(e)

    y = entropies
    x=(range(len(entropies)))
    slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)

    plt.subplot(len(lista_autori),2,count)
    tdf = pd.DataFrame.from_dict(temp_dict, orient='columns')
    a = tdf.dropna()
    sns.set(font_scale=2)
    #sns.factorplot(size=2, aspect=1)
    sns.heatmap(a,linewidths=.5,cmap="RdBu_r")
    plt.xlabel(ur'year')
    plt.ylabel(ur'$PACS$')
    count +=1

    plt.subplot(len(lista_autori),2,count)
    plt.plot(x,y)
    x1 = (range(28))
    y1 =  [slope*i + intercept for i in x1]
    plt.plot(x1,y1)
    count +=1


plt.tight_layout();

The result is the following:

I would like to resize each row, assigning 2/3 of the row to the left hand side picture, the remaining to the right one. I tried to look at the answer given here but I found some difficulties when I have to mix ax and seaborn's heatmap. Any help or other solutions?


回答1:


The answer to the linked question directly tells you how to achieve a grid with unequal column width using GridSpec. I do not see much of a difference here, but maybe the following is more understandable for you, because it uses seaborn heatmaps, more than one row and no "ax".

import numpy as np
import matplotlib.pyplot as plt 
from matplotlib import gridspec
import seaborn as sns

# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)
X = np.random.rand(3,4)

fig = plt.figure(figsize=(8, 6)) 
gs = gridspec.GridSpec(5, 2, width_ratios=[2, 1]) 

for i in range(5):
    plt.subplot(gs[i*2+0])
    sns.heatmap(X)
    plt.subplot(gs[i*2+1])
    plt.plot(x,y)

plt.show()


来源:https://stackoverflow.com/questions/42179048/resize-subplots-using-seaborn

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!