gpt4 book ai didi

python - Matplotlib 中公共(public) x 轴上的多个图具有公共(public) y 轴标签

转载 作者:行者123 更新时间:2023-12-01 00:38:34 25 4
gpt4 key购买 nike

我编写了以下最小的 Python 代码,以便在同一 X 轴上绘制 x 的各种函数。

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from cycler import cycler

cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']

xlabel='$X$'; ylabel='$Y$'

### Set tick features
plt.tick_params(axis='both',which='major',width=2,length=10,labelsize=18)
plt.tick_params(axis='both',which='minor',width=2,length=5)
#plt.set_axis_bgcolor('grey') # Doesn't work if I uncomment!



lines = ["-","--","-.",":"]

Nlayer=4
f, axarr = plt.subplots(Nlayer, sharex=True)

for a in range(1,Nlayer+1):

X = np.linspace(0,10,100)
Y = X**a
index = a-1 + np.int((a-1)/Nlayer)
axarr[a-1].plot(X, Y, linewidth=2.0+index, color=cycle[a], linestyle = lines[index], label='Layer = {}'.format(a))
axarr[a-1].legend(loc='upper right', prop={'size':6})


#plt.legend()


# Axes labels
plt.xlabel(xlabel, fontsize=20)
plt.ylabel(ylabel, fontsize=20)

plt.show()

但是,这些图在 X 轴上没有连接在一起,而且我未能获得通用的 Y 轴标签。它实际上是最后一个图的标签(见附图)。我还得到了一个我无法摆脱的空白图。

我正在使用Python3。

enter image description here

最佳答案

以下代码将产生预期的输出:

  • 没有由于两个 plt.tick_params 而创建的空白图在创建实际的 fig 之前调用
  • gridspec_kw subplots 的参数允许您控制 rows 之间的空间和colssubplots环境以连接不同的图层图
  • 具有独特且居中的共同点 ylabel使用fig.text具有相对定位和rotation参数(对 xlabel 执行相同的操作以获得同质的最终结果)。人们可能会注意到,这也可以通过重新定位 ylabel 来完成。与 ax.yaxis.set_label_coords()在调用 ax.set_ylabel() 等常规电话后.
import numpy as np
import matplotlib.pyplot as plt

cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']
xlabel='$X$'; ylabel='$Y$'
lines = ["-","--","-.",":"]

Nlayer = 4

fig, axarr = plt.subplots(Nlayer, sharex='col',gridspec_kw={'hspace': 0, 'wspace': 0})

X = np.linspace(0,10,100)
for i,ax in enumerate(axarr):
Y = X**(i+1)
ax.plot(X, Y, linewidth=2.0+i, color=cycle[i], linestyle = lines[i], label='Layer = {}'.format(i+1))
ax.legend(loc='upper right', prop={'size':6})

带轴labels ,第一个选项:

fig.text(0.5, 0.01, xlabel, va='center')
fig.text(0.01, 0.5, ylabel, va='center', rotation='vertical')

或者:

# ax is here, the one of the last Nlayer plotted, i.e. Nlayer=4
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
# change y positioning to be in the horizontal center of all Nlayer, i.e. dynamically Nlayer/2
ax.yaxis.set_label_coords(-0.1,Nlayer/2)

给出:

output_figure

我还简化了您的for使用 enumerate 循环有一个自动计数器i当循环axarr时。

关于python - Matplotlib 中公共(public) x 轴上的多个图具有公共(public) y 轴标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57546492/

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