Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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 图例()未正确显示数据集_Python_Matplotlib - Fatal编程技术网

Python 图例()未正确显示数据集

Python 图例()未正确显示数据集,python,matplotlib,Python,Matplotlib,我试图在图例中显示两个主要数据集,即“Type2”(红色方块)和“Type1”(蓝色圆圈)。尽管如此,由于我的绘图涉及“类型1”和“类型2”的子组(A、B分别为每个子组),图例中出现了4个项目。请看一下我的情节: 问题是legend()倾向于显示4项:红方块、红方块、蓝圈、蓝圈,而我只需要其中两项,即红方块表示Type2,蓝圈表示Type1 Type2 Mean2 SD2 A 4.1 1.9 A 5.7 0.9 A 7.5 1.2 B

我试图在图例中显示两个主要数据集,即“Type2”(红色方块)和“Type1”(蓝色圆圈)。尽管如此,由于我的绘图涉及“类型1”和“类型2”的子组(A、B分别为每个子组),图例中出现了4个项目。请看一下我的情节:

问题是legend()倾向于显示4项:红方块、红方块、蓝圈、蓝圈,而我只需要其中两项,即红方块表示Type2,蓝圈表示Type1

Type2  Mean2    SD2
A      4.1     1.9
A      5.7     0.9
A      7.5     1.2
B      6.9     0.7
B      4.9     0.4
B      8.5     1

Type1 Mean1    SD1
A      8.1      1
A      7.7     0.9
A      8.5     1.1
B      5.9     0.4
B      7.9     0.7
B      9.5     1.2

Figure1 = plt.figure('Scatter Plot', figsize=(6,6), dpi=300)
Subplot1 = Figure1.add_subplot(1,1,1)

markers = ['s','s']
colors = ['r', 'r']

grouped = DataFrame.groupby('Type2')

for i,((g,d),m,c) in enumerate(zip(grouped,markers,colors)):
    x = np.random.normal(loc=i,scale=0.2,size=(len(d['Mean2'],)))
    Subplot1.errorbar(x, y= Mean2 , yerr= SD2 ,
                      fmt=m,
                      markersize=5, color=c,
                      capsize=3, markeredgewidth=0.5
                      )

XPos = list(range(len(grouped)))
Subplot1.set_xticks(XPos)
Subplot1.set_xticklabels([a for a in grouped.groups])

Subplot1.set_xlim(-0.5,1.5)

###############################################
###############################################

markers = ['o','o']
colors = ['b', 'b']
grouped = DataFrame.groupby('Type1')


for i,((g,d),m,c) in enumerate(zip(grouped,markers,colors)):
    x = np.random.normal(loc=i,scale=0.2,size=(len(d['Mean1'],)))
    Subplot1.errorbar(x, y= Mean1, yerr= SD1,
                      fmt=m,
                      markersize=5, color=c,
                      capsize=3, markeredgewidth=0.5
                      )

###############################################
###############################################
Subplot1.legend(['Type2','not needed!', 'Type1','not needed!'])
如有任何意见,将不胜感激。非常感谢


Matplotlib将只向图例中添加粘贴有
标签的项目。您可以对
errorbar
的标签分配使用三元操作,仅为每个groubby对象上的第一次迭代提供一个标签

例如:

将numpy导入为np
作为pd进口熊猫
将matplotlib.pyplot作为plt导入
df1=pd.DataFrame({'Type1':['A','A','B','B','B'],
“你的意思是1:[8.1,7.7,8.5,5.9,7.9,9.5],
‘y_SD1’:[1.0,0.9,1.1,0.4,0.7,1.2]})
df2=pd.DataFrame({'Type2':['A','A','B','B','B'],
“你的意思是2:[4.1,5.7,7.5,6.9,4.9,8.5],
‘y_SD2’:[1.9,0.9,1.2,0.7,0.4,1.0]})
df1['x']=np.random.rand(6)
df2['x']=np.random.rand(6)
固定,ax=plt.子批次(1,1)
对于枚举(df1.groupby('Type1'))中的i(glab,g):
h1=最大误差杆(g.x,
g、 你的意思是1,
g、 y_SD1,
fmt='o',
c='b',
倾覆=3,
MarkerEdge宽度=0.4,
elinewidth=0.4,
#标签仅在第一次迭代时指定
标签class='Type1'如果不是,则为i,否则为无)
对于枚举(df2.groupby('Type2'))中的i,(glab,g):
h2=最大误差巴(g.x,
g、 你的意思是2,
g、 y_SD2,
fmt='s',
c='r',
倾覆=3,
MarkerEdge宽度=0.4,
elinewidth=0.4,
#标签仅在第一次迭代时指定
标签class='Type2'如果不是,则为i,否则为无)
ax.图例()

您的代码无法按编写的代码进行复制。例如,
d['Mean1']
是未知的。谢谢。您的绘图与原始绘图不一样,因为它去掉了子组A和B。如果可以,请调整原始代码以说明您添加的新代码行,即label='Type1',如果不是,则我没有。我继续添加了这行代码,但它没有;我似乎没有按正确的方式工作。添加这一行不会改变任何东西。我无法调整您的原始代码,因为它包含对您尚未定义的对象的引用。您可以更精确一点吗。这里没有定义什么?你的答案不适用于我的情况。在
x=np.random.normal(loc=i,scale=0.2,size=(len(d['Mean2']))
中,变量
d
没有定义。在
Subplot1.errorbar(x,y=Mean1,yerr=SD1,
)中,您给出的代码中既没有定义
Mean1
nore
SD1
。Mean1和Mean2只是每组数据的y轴值(您可以在代码顶部检出数据)。此外,
d
也为这一行中的每个数据集定义了
i、((g,d),m,c)在enumerate(zip(分组、标记、颜色)):