Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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,我通过一个目录绘制了一个方框图,该目录中有6个子文件夹。当我用writeplt.show()写入plt.boxplot(我的列表)时,它会绘制6个不同的图形,如果不写入这些图形,所有6个图形都会相互重叠。如何将它们分离并收集到一个图形中?另外,是否可以在X轴中使用label=directory? 我写的代码如下: import numpy as np import matplotlib.pyplot as plt import os sns.set(style="darkgrid") root

我通过一个目录绘制了一个方框图,该目录中有6个子文件夹。当我用write
plt.show()
写入
plt.boxplot(我的列表)
时,它会绘制6个不同的图形,如果不写入这些图形,所有6个图形都会相互重叠。如何将它们分离并收集到一个图形中?另外,是否可以在X轴中使用
label=directory
? 我写的代码如下:

import numpy as np
import matplotlib.pyplot as plt
import os
sns.set(style="darkgrid")
root = r'/home/hossein/Desktop/Out/INTERSECTION/BETA 15'
xx=[]
percentage=[]
gg=[]
my_list = os.listdir(root)
my_list =  [file for file in my_list if os.path.isdir(os.path.join(root, file))]
for directory in my_list:
    CASES = [file for file in os.listdir(os.path.join(root, directory)) if file.startswith('config')]   
    if len(CASES)==0:
        continue
    CASES.sort()   
    percentage=[]  
    for filename in CASES:      
        with open(os.path.join(root, directory,filename), "r") as file: 
            lines = file.readlines()
            x = [float(line.split()[0]) for line in lines]
            y = [float(line.split()[1]) for line in lines]
            g = np.linspace(min(y),max(y),100)
            h = min(y)*0.9
            t = max(y)*0.9
            xx=[]
            gg= []
            for i in range(1,len(x)):
                if (y[i] < h or y[i] > t):
                    xx.append(x[i])
            percent = len(xx)/len(y)
            percentage.append(percent)
    plt.boxplot(percentage,)

#     plt.show()    

将numpy导入为np
将matplotlib.pyplot作为plt导入
导入操作系统
sns.set(style=“darkgrid”)
root=r'/home/hossein/Desktop/Out/INTERSECTION/BETA 15'
xx=[]
百分比=[]
gg=[]
my_list=os.listdir(根目录)
my_list=[如果os.path.isdir(os.path.join(root,file)),我的_列表中的文件对应文件]
对于my_列表中的目录:
CASES=[os.listdir(os.path.join(root,directory))中的文件,如果file.startswith('config')]
如果len(情况)==0:
持续
CASES.sort()
百分比=[]
对于文件名,在以下情况下:
打开(os.path.join(根目录、目录、文件名),“r”)作为文件:
lines=file.readlines()
x=[float(line.split()[0])表示行中的行]
y=[float(line.split()[1])表示行中的行]
g=np.linspace(最小(y),最大(y),100)
h=最小值(y)*0.9
t=最大值(y)*0.9
xx=[]
gg=[]
对于范围(1,len(x))中的i:
如果(y[i]t):
xx.追加(x[i])
百分比=长度(xx)/长度(y)
百分比。追加(百分比)
plt.箱线图(百分比)
#plt.show()
你能给我举个例子吗


诀窍是将列表传递到
位置。另外,
plt.show()
必须在循环外部调用

下面是一个简单的例子:

import matplotlib.pyplot as plt

a = [1,2,3,4,5,6]
b = [5,6,7,8,9]

data = [a,b]

for i, x in enumerate(data):
    plt.boxplot(x, positions=[i])
plt.show()

您可以随时根据需要更改记号标签

在这种情况下,我将
[0,1]
更改为
['dir\u A','dir\u B']

plt.xticks([0,1], ['dir_A','dir_B'])
plot.show()

尝试使用
plt.boxplot(百分比,位置=范围(len(百分比)))将x值作为位置传递。
@Sheldore通过这个我得到了
箱线图统计列表,“位置”值必须具有相同的长度
@RishaanGupta这不是我的答案。我使用了一个
for循环
,这不是每个循环都能做到的。另外,我曾经使用过
plt.show()
一次,但它不起作用。我如何才能将不同的列表制作成一个列表?写入
data=[percentage[i]]
@Mir.Emad try:
对于枚举(我的列表)中的目录
plt.boxplot(百分比,位置=[\u i])
您将获得每个目录的绘图。是否可以从我的目录名中读取标签?我的意思是不是手动地,通过读取子文件夹的名称来自动地:
plt.xticks(list(range(len(my_list))),my_list)
这将映射您在my_list中的目录和绘图上的记号。但是,在您的情况下,
如果len(CASES)==0:continue
会使事情变得复杂一些。但是,在循环过程中,您可以在单独的列表中附加
\u i
目录
,然后将其用于标记的映射。不幸的是,我不能帮助更多,因为我没有你的投入,我不能测试所有的可能性。我认为我写的代码很容易理解,现在由你来做一点实验。