hba*_*ega 2 python matplotlib python-3.x
我编写了以下最小的 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()
Run Code Online (Sandbox Code Playgroud)
然而,这些图没有在 X 轴上连接在一起,而且我未能获得通用的 Y 轴标签。它实际上是最后一个图的标签(见附图)。我还得到了一个我无法摆脱的空白图。
我正在使用Python3。
以下代码将产生预期的输出:
plt.tick_params创建实际之前的两次调用而创建的空白图figgridspec_kw参数,您可以控制环境之间的subplots空间,以便连接不同的图层图rowscolssubplotsylabel使用fig.text以及相对定位和rotation参数(执行相同的操作xlabel以获得均匀的最终结果)。人们可能会注意到,也可以通过在诸如 之类的常规调用之后重新定位ylabelwith来完成此操作。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})
Run Code Online (Sandbox Code Playgroud)
带轴labels,第一个选项:
fig.text(0.5, 0.01, xlabel, va='center')
fig.text(0.01, 0.5, ylabel, va='center', rotation='vertical')
Run Code Online (Sandbox Code Playgroud)
或者:
# 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)
Run Code Online (Sandbox Code Playgroud)
这使 :
我还for通过在循环时enumerate使用自动计数器来简化循环。iaxarr
| 归档时间: |
|
| 查看次数: |
5592 次 |
| 最近记录: |