如何在Y轴上手动放置标签而不在matplotlib中放置空格

时间:2017-03-25 08:11:27

标签: python matplotlib

我试图在一个图上绘制两个数据点图,我已经完成了这个任务,我正在使用Python和Matplotlib完成这项任务。 但是当我想要向ylabel添加文本时,问题就出现了,添加文本很简单,但我想在我的图形旁边添加文本,而且不使用空格。 目前我正在使用空格,但这会在数字缩小到不同大小时产生问题,我希望还有另一种更好的方法。 我将我的问题分解为简单的场景,其代码如下:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.gca()

# Sampling Frequency
SampleFreq = 500.0
time_axis = np.arange(0, 1.0, 1/SampleFreq)

sin_sig = np.sin(2 * np.pi * 10 * time_axis) + 2.0
cos_sig = np.cos(2 * np.pi * 10 * time_axis)

plt.plot(time_axis, sin_sig ,color='#000080', linewidth=1.0)
plt.plot(time_axis, cos_sig ,'r', linewidth=1.0)
plt.xlim(0, 1.0)
plt.yticks([])
plt.grid()
plt.xlabel('Time in ms', fontweight='bold')
plt.ylabel('Cos Signal                    \
                    Sine Signal',fontweight='bold')
plt.show()

正如您在图像中看到的那样,正弦和余弦信号都写在ylabel上,但它们是通过使用空格来调整的。

Output Image

我希望有人可以帮助找到正确的解决方案。 在此先感谢

1 个答案:

答案 0 :(得分:0)

您可以创建两个子图,每个图对应一个但有不同的ylabel。

import numpy as np
import matplotlib.pyplot as plt

fig, (ax,ax2) = plt.subplots(nrows=2, sharex=True)
plt.subplots_adjust(hspace=0)


# Sampling Frequency
SampleFreq = 500.0
time_axis = np.arange(0, 1.0, 1/SampleFreq)

sin_sig = np.sin(2 * np.pi * 10 * time_axis)
cos_sig = np.cos(2 * np.pi * 10 * time_axis)

ax2.plot(time_axis, sin_sig ,color='#000080', linewidth=1.0)
ax.plot(time_axis, cos_sig ,'r', linewidth=1.0)
ax2.set_xlim(0, 1.0)
for a in [ax,ax2]:
    a.set_yticks([-1,1])
    a.set_yticklabels(["off", "on"])
    a.grid(True, axis='x',)


ax2.set_xlabel('Time in ms', fontweight='bold')
ax.set_ylabel("Sine Signal",fontweight='bold')
ax2.set_ylabel("Cos Signal",fontweight='bold')

ax.spines['bottom'].set_visible(False)
ax2.spines['top'].set_visible(False)

plt.show()

enter image description here