Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用matplotlib仅显示一个子批次的图例_Python_Matplotlib - Fatal编程技术网

Python 使用matplotlib仅显示一个子批次的图例

Python 使用matplotlib仅显示一个子批次的图例,python,matplotlib,Python,Matplotlib,我在使用matplotlib以正确格式显示图例时遇到了一个问题 编辑:我在一个2乘2格式的图形中有4个子图,我只想在第一个子图上绘制图例,该子图上绘制了两条线。我使用下面附带的代码得到的图例包含了无数的条目,并在整个图中垂直扩展。当我使用相同的代码使用linspace生成假数据时,图例工作得非常好 import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as mtick import os #---

我在使用matplotlib以正确格式显示图例时遇到了一个问题

编辑:我在一个2乘2格式的图形中有4个子图,我只想在第一个子图上绘制图例,该子图上绘制了两条线。我使用下面附带的代码得到的图例包含了无数的条目,并在整个图中垂直扩展。当我使用相同的代码使用linspace生成假数据时,图例工作得非常好

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import os

#------------------set default directory, import data and create column output vectors---------------------------#

path="C:/Users/Pacman/Data files"
os.chdir(path)
data =np.genfromtxt('vrp.txt')

x=np.array([data[:,][:,0]])

y1=np.array([data[:,][:,6]])
y2=np.array([data[:,][:,7]])
y3=np.array([data[:,][:,9]])
y4=np.array([data[:,][:,11]])
y5=np.array([data[:,][:,10]])

nrows=2
ncols=2
tick_l=6   #length of ticks
fs_axis=16 #font size of axis labels


plt.rcParams['axes.linewidth'] = 2         #Sets global line width of all the axis
plt.rcParams['xtick.labelsize']=14         #Sets global font size for x-axis labels
plt.rcParams['ytick.labelsize']=14         #Sets global font size for y-axis labels



plt.subplot(nrows, ncols, 1)

ax=plt.subplot(nrows, ncols, 1)
l1=plt.plot(x, y2, 'yo',label='Flow rate-fan')
l2=plt.plot(x,y3,'ro',label='Flow rate-discharge')
plt.title('(a)')
plt.ylabel('Flow rate ($m^3 s^{-1}$)',fontsize=fs_axis)
plt.xlabel('Rupture Position (ft)',fontsize=fs_axis)

# This part is not working
plt.legend(loc='upper right', fontsize='x-large')

#Same code for rest of the subplots
我尝试实施以下链接中建议的修复,但无法使其正常工作:


非常感谢您在这方面提供的任何帮助。

在使用子批次时,直接使用轴(
ax
)非常有用。因此,如果您在一个图形中设置了两个绘图,并且只希望在第二个绘图中有一个图例:

t = np.linspace(0, 10, 100)

plt.figure()

ax1 = plt.subplot(2, 1, 1)
ax1.plot(t, t * t)

ax2 = plt.subplot(2, 1, 2)
ax2.plot(t, t * t * t)
ax2.legend('Cubic Function')

请注意,创建图例时,我是在
ax2
上进行的,而不是在
plt
上进行的。如果您希望为第一个子批次创建第二个图例,您可以使用相同的方法,但在ax1上如果我理解正确,您需要告诉plt.legend将什么作为图例。。。此时,它将被加载为空。你得到的一定是另一个来源。我很快就有了以下内容,当然,当我像你一样运行fig.legend时,我什么也得不到

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.4, 0.7])
ax2 = fig.add_axes([0.55, 0.1, 0.4, 0.7])

x = np.arange(0.0, 2.0, 0.02)
y1 = np.sin(2*np.pi*x)
y2 = np.exp(-x)
l1, l2 = ax1.plot(x, y1, 'rs-', x, y2, 'go')

y3 = np.sin(4*np.pi*x)
y4 = np.exp(-2*x)
l3, l4 = ax2.plot(x, y3, 'yd-', x, y4, 'k^')

fig.legend(loc='upper right', fontsize='x-large')

#fig.legend((l1, l2), ('Line 1', 'Line 2'), 'upper left')
#fig.legend((l3, l4), ('Line 3', 'Line 4'), 'upper right')
plt.show()

我建议你一个接一个地申请,然后全部申请。

谢谢你的评论。我想我没有恰当地表达我的问题。我使用上面的代码得到的图例包含每个数据点作为标题。因此,图例显示了绘图中的每个点,因此它延伸到整个屏幕,并垂直延伸到其他地方。我尝试了相同的代码,但使用linspace生成了假数据,它成功了。我首先检查数组
x
y2
、和
y3
的形状,以防它们不是简单的1D数组,这是通过从所有向量(如y1=np.array)中移除外方括号来实现的([data[:,][:,6]])谢谢你的评论。我想我没有恰当地表达我的问题。我使用上面的代码得到的图例包含每个数据点作为标题。因此,图例显示了绘图中的每个点,因此它延伸到整个屏幕,并垂直延伸到其他地方。我尝试了相同的代码,但使用linspace生成了虚假数据,并且成功了。