python现有三个列表,列表中存储着三个文件夹下去除后缀并排序的文件名,读取每一个列表,每读取到一个文件名,就画一条向x轴的竖线,图下加三个滑动条控制显示,完整代码
时间: 2024-05-07 12:20:53 浏览: 59
以下是基于matplotlib库的示例代码,实现读取三个文件夹下的文件名并画出相应的竖线,同时添加三个滑动条可以控制显示:
```python
import os
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
# 三个文件夹下去除后缀并排序的文件名存储在三个列表中,分别为list1、list2、list3
list1 = sorted([os.path.splitext(filename)[0] for filename in os.listdir('folder1')])
list2 = sorted([os.path.splitext(filename)[0] for filename in os.listdir('folder2')])
list3 = sorted([os.path.splitext(filename)[0] for filename in os.listdir('folder3')])
# 初始化画布和子图
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
# 定义函数绘制竖线
def draw_vertical_lines():
ax.clear() # 清空子图
x1, x2, x3 = 0, 0, 0 # 分别为三个列表的索引
while x1 < len(list1) or x2 < len(list2) or x3 < len(list3):
# 获取当前需要绘制的文件名
if x1 < len(list1):
filename = list1[x1]
elif x2 < len(list2):
filename = list2[x2]
else:
filename = list3[x3]
# 绘制竖线
ax.axvline(x=x1+x2+x3, linewidth=1, color='black')
ax.text(x1+x2+x3, -0.05, filename, rotation=90, ha='center', va='top')
# 更新索引
if x1 < len(list1) and filename == list1[x1]:
x1 += 1
elif x2 < len(list2) and filename == list2[x2]:
x2 += 1
else:
x3 += 1
# 设置x轴和y轴范围
ax.set_xlim(0, len(list1)+len(list2)+len(list3)-1)
ax.set_ylim(-0.1, 1)
# 初始化绘图
draw_vertical_lines()
# 添加三个滑动条
axcolor = 'lightgoldenrodyellow'
ax1 = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor)
ax2 = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor)
ax3 = plt.axes([0.25, 0.2, 0.65, 0.03], facecolor=axcolor)
slider1 = Slider(ax1, 'List 1', 0, len(list1), valinit=0, valstep=1)
slider2 = Slider(ax2, 'List 2', 0, len(list2), valinit=0, valstep=1)
slider3 = Slider(ax3, 'List 3', 0, len(list3), valinit=0, valstep=1)
# 定义滑动条更新函数
def update(val):
x1, x2, x3 = slider1.val, slider2.val, slider3.val
ax.set_xlim(x1+x2+x3-10, x1+x2+x3+10)
plt.draw()
# 绑定滑动条更新函数
slider1.on_changed(update)
slider2.on_changed(update)
slider3.on_changed(update)
# 显示绘图
plt.show()
```
这个代码应该可以满足你的需求,你可以根据自己的实际情况进行适当的修改。
阅读全文