Python 如何在箱线图中取消分离图
我通过一个目录绘制了一个方框图,该目录中有6个子文件夹。当我用writePython 如何在箱线图中取消分离图,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
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
和目录
,然后将其用于标记的映射。不幸的是,我不能帮助更多,因为我没有你的投入,我不能测试所有的可能性。我认为我写的代码很容易理解,现在由你来做一点实验。