使用 seaborn 调整子图的大小
Resize subplots using seaborn
我最近才开始使用 matplotlib 和 seaborn 来绘制图表。这是我到目前为止写的代码
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();
结果如下:
我想调整每一行的大小,将行的 2/3 分配给左侧图片,其余分配给右侧图片。我试图查看给定 here 的答案,但是当我必须混合使用 ax 和 seaborn 的热图时,我发现了一些困难。任何帮助或其他解决方案?
linked question的答案直接告诉你如何使用GridSpec实现列宽不等的网格。我在这里看不出太大的区别,但也许下面的内容对你来说更容易理解,因为它使用了 seaborn 热图,不止一行而且没有 "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()
我最近才开始使用 matplotlib 和 seaborn 来绘制图表。这是我到目前为止写的代码
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();
结果如下:
我想调整每一行的大小,将行的 2/3 分配给左侧图片,其余分配给右侧图片。我试图查看给定 here 的答案,但是当我必须混合使用 ax 和 seaborn 的热图时,我发现了一些困难。任何帮助或其他解决方案?
linked question的答案直接告诉你如何使用GridSpec实现列宽不等的网格。我在这里看不出太大的区别,但也许下面的内容对你来说更容易理解,因为它使用了 seaborn 热图,不止一行而且没有 "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()