显示折线图而不是条形图的排序性能

时间:2019-06-09 18:27:52

标签: python sorting matplotlib graph

我正在尝试分析折线图中的合并排序排序性能,但是仍然显示条形图,如何在折线图中实现该图?  我使用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()

3 个答案:

答案 0 :(得分:0)

问题如下所述:

  • 您的Tx中只有一个非零值。其余所有值均为零,未定义日志。因此,事情在线性标度上看起来不错,但是当您在对数y标度上绘制事物时,因为非零值连接到-inf(即log(0)的值),所以出现了唯一的非零峰值。结果,它对您来说就像是一个酒吧。

为了说服自己,您可以使用

绘制标记而不是线条
plt.plot(Tx, 'bo', label='merge_sort')

enter image description here


线性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()

enter image description here

对数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()

enter image description here

答案 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()

请尝试输入我的代码。 enter image description here

当我的计算机完成处理后,我将添加10000个项目的图片。 enter image description here 如果没有,可以进行pip安装排序。