gpt4 book ai didi

python - 帮助使大的子图看起来更好更清晰

转载 作者:太空狗 更新时间:2023-10-30 01:24:03 25 4
gpt4 key购买 nike

我有一个 28 行 x 2 列的子图(实际上它可以改变)。第一列的所有行的 yaxis 比例应该是相同的(这也必须适用于第二列)......

所有的 x 轴都应该是相同的。

我想做的是在输出图中做一些东西,显示第一列和第二列的 yaxis 以及两列的 xaxis 是什么...我还想在顶部添加一个标签第一列和第二列(说明这些数据是什么)。

我还想更改绘图的纵横比,以便更清楚地看到它(可能增加 yaxis 纵横比大小并稍微减小 xaxis 大小)。

我想要的子图,没有调整大小,应该是这样的:

Output Figure

它可以是不同的东西。我真的不知道我的请求有什么可能。

我用来生成图形的代码(没有油漆标签):

def pltconc(conc,self):
t=self.t
idx1=0
conc=conc*1000000


c=len(find( self.ml[:,3]==1 ))

from scipy.stats import scoreatpercentile #To adjust the scales
ymin1 = max([median(scoreatpercentile(conc[:,i,:],0.05)) for i in range(28)])
ymax1 = max([median(scoreatpercentile(conc[:,i,:],99.95)) for i in range(28)])

for idx1 in range(c):
a=subplot(c,2,2*idx1+1, adjustable='box-forced')
plt.plot(t,conc[:,idx1,0],color='r')
plt.plot(t,conc[:,idx1,1],color='b')
plt.axis('tight')
xlim(0,max(self.t))
ylim(ymin1,ymax1)
frame1 = plt.gca()
a.set_yticklabels([])
a.set_xticklabels([])


ax=subplot(c,2,2*idx1+2, adjustable='box-forced')
CBV = (conc[:,idx1,2]*100)/(90+conc[:,idx1,2])
StO2 = (conc[:,idx1,0]*100)/(90+conc[:,idx1,2])
ymin2 = max(median(scoreatpercentile(CBV,0.05)),median(scoreatpercentile(StO2,0.05)))
ymax2 = max(median(scoreatpercentile(StO2,99.95)),median(scoreatpercentile(CBV,99.95)))
plt.plot(t,CBV, color='m')
plt.plot(t,StO2, color = 'b')
plt.axis('tight')
xlim(0,max(self.t))
ylim(ymin2,ymax2)
frame1 = plt.gca()
ax.set_yticklabels([])
ax.set_xticklabels([])

非常感谢您的帮助。

我更改了代码,因为我意识到它们没有正确缩放。输出数字应该有点不同,但对于这个问题的目的来说并不重要。

最佳答案

我不完全确定你在问什么,但下面是我将如何沿着这些思路绘制一些东西......

图形的纵横比由 figsize kwarg 控制到 plt.figure(或 plt.subplots,在这种情况下) .

剩下的你可以通过明智地应用annotate来完成。

这是一个例子:

import matplotlib.pyplot as plt
import numpy as np

# Generate the data
data = (np.random.random((20, 2, 2, 1001)) - 0.5).cumsum(axis=-1)

# Set up the figure (the figsize is what's going to control your aspect ratio)
fig, axes = plt.subplots(nrows=20, ncols=2, sharex=True, figsize=(6, 10))
fig.subplots_adjust(wspace=0.1, hspace=0, bottom=0.05)

# Turn off tick labels everywhere
for ax in axes.flat:
for axis in [ax.xaxis, ax.yaxis]:
axis.set_ticklabels([])

# Plot the data
color = {(0,0):'red', (0,1):'green', (1,0):'blue', (1,1):'magenta'}
for (i,j), ax in np.ndenumerate(axes):
for k in range(2):
ax.plot(data[i,j,k,:], color=color[(j,k)])

# Add stacked titles (and text legends)
titles = [['TITLE:', 'Red: Data X', 'Green: Data Y'],
['TITLE:', 'Blue: Data W', 'Magenta: Data Z']]
for i, title in enumerate(titles):
for text, ypos in zip(title, [35, 20, 5]):
axes[0,i].annotate(text, xy=(0.05, 1.0), xytext=(0, ypos), va='bottom',
xycoords='axes fraction', textcoords='offset points')

# Add arrows on "super-Y" axes
xpos, length = -0.1, 5
axes[12,0].annotate('', xy=(xpos, 0), xytext=(xpos, length),
xycoords='axes fraction', textcoords='axes fraction',
arrowprops=dict(arrowstyle='<|-'))
axes[12,0].annotate('{0} subplots'.format(length), xy=(xpos, length/2.0),
xycoords='axes fraction', rotation=90, va='center', ha='right')

# Add arrows on "super-X" axes
ypos, length = -0.7, 1000
axes[-1,0].annotate('', xy=(0, ypos), xytext=(length, ypos),
xycoords=('data', 'axes fraction'), textcoords=('data', 'axes fraction'),
arrowprops=dict(arrowstyle='<|-'))
axes[-1,0].annotate('{0} data units'.format(length), xy=(length/2.0, ypos),
xytext=(0, 5), xycoords=('data', 'axes fraction'),
textcoords='offset points', ha='center', va='bottom')

plt.show()

enter image description here

关于python - 帮助使大的子图看起来更好更清晰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6942312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com