我正在尝试分析折线图中的合并排序排序性能,但是仍然显示条形图,如何在折线图中实现该图? 我使用for循环增加100,因此合并排序可以对数据进行排序,增加100。我已经在L中随机生成了10000个列表。
Tx = [0] * len(L) # time list
for i in range(0,len(L), 100):
start_time = time()
merge_sort(L[:i])
end_time = time()
elapsed_time = end_time - start_time
Tx[i] = elapsed_time * 1000
plt.plot(Tx, label='merge_sort')
plt.xlim(100, 10000)
plt.ylim(1, 10000)
plt.xlabel("n")
plt.ylabel('ms')
plt.yscale('log')
plt.legend(loc = "upper left")
plt.show()
答案 0 :(得分:0)
问题如下所述:
Tx
中只有一个非零值。其余所有值均为零,未定义日志。因此,事情在线性标度上看起来不错,但是当您在对数y标度上绘制事物时,因为非零值连接到-inf
(即log(0)的值),所以出现了唯一的非零峰值。结果,它对您来说就像是一个酒吧。为了说服自己,您可以使用
绘制标记而不是线条plt.plot(Tx, 'bo', label='merge_sort')
线性y缩放
Tx = [0.0019073486328125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
plt.plot(Tx, label='merge_sort')
plt.xlabel("n")
plt.ylabel('ms')
plt.legend(loc = "upper right")
plt.show()
对数y尺度
Tx = [0.0019073486328125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
plt.plot(Tx, label='merge_sort')
plt.xlabel("n")
plt.ylabel('ms')
plt.yscale('log')
plt.legend(loc = "upper right")
plt.show()
答案 1 :(得分:-1)
这对您有用吗?
Tx = [0] * len(L) # time list
for i in range(0,len(L), 100):
start_time = time()
merge_sort(L[:i])
end_time = time()
elapsed_time = end_time - start_time
Tx[i] = elapsed_time * 1000
plt.plot(Tx, '-', label='merge_sort')
plt.xlim(100, 10000)
plt.ylim(1, 10000)
plt.xlabel("n")
plt.ylabel('ms')
plt.yscale('log')
plt.legend(loc = "upper left")
plt.show()
在“情节”中有其他争论,应强制其画一条线。
答案 2 :(得分:-1)
import time
import sorting
import random
import matplotlib.pyplot as plt
arr=[]
time_array=[]
x_axis=[]
for i in range(0,1000):
start_time = time.time()
arr.append(random.randint(1,10000))
k=arr.copy()
sorting.mergeSort(k)
end_time = time.time()
elapsed_time = end_time - start_time
time_array.append(elapsed_time * 1000)
print(time_array)
for i in range(0,1000):
x_axis.append(i)
plt.plot(x_axis, time_array)
# naming the x axis
plt.xlabel('no of items')
# naming the y axis
plt.ylabel('time taken by mergesort')
# giving a title to my graph
plt.title('Mergesort graph')
# function to show the plot
plt.show()