Matplotlib的趋势图

时间:2019-04-22 21:13:22

标签: python matplotlib

我有以下列表:

input = ['"25', '"500', '"10000', '"200000', '"1000000']
inComp = ['0.000001', '0.0110633', '4.1396405', '2569.270532', '49085.86398']
quickrComp=['0.0000001', '0.0003665', '0.005637', '0.1209121', '0.807273']
quickComp = ['0.000001', '0.0010253', '0.0318653', '0.8851902', '5.554448']
mergeComp = ['0.000224', '0.004089', '0.079448', '1.973014', '13.034443']

我需要创建一个趋势图来演示inComp,quickrComp,quickComp,mergeComp的值随着输入值的增长而增长(输入是x轴)。我正在使用matplotlib.pyplot和以下代码:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(input,quickrComp, label="QR")
ax.plot(input,mergeComp, label="merge")
ax.plot(input, quickComp, label="Quick")
ax.plot(input, inComp, label="Insrção")
ax.legend()
plt.show()

但是,正在发生的事情是:y轴的值无序;首先插入y轴上的quickrComp值;然后是所有mergeComp值,依此类推。我需要y轴值从0开始到4行值中的最高值结束。我该怎么办?

1 个答案:

答案 0 :(得分:0)

两件事:首先,您的y值是字符串。您需要将数据转换为数字(float)类型。其次,与其余三个列表相比,列表之一中的y值很大。因此,您必须将y比例转换为对数才能看到趋势。原则上,您也可以将x值转换为float(整数),但是在您的示例中,您不需要它。如果要这样做,还必须从每个x值的前面删除"

警告:不要将变量命名为内置函数。对于您的情况,应将input重命名为其他名称,例如input1

import matplotlib.pyplot as plt
fig, ax = plt.subplots()

input1 = ['"25', '"500', '"10000', '"200000', '"1000000']
inComp = ['0.000001', '0.0110633', '4.1396405', '2569.270532', '49085.86398']
quickrComp=['0.0000001', '0.0003665', '0.005637', '0.1209121', '0.807273']
quickComp = ['0.000001', '0.0010253', '0.0318653', '0.8851902', '5.554448']
mergeComp = ['0.000224', '0.004089', '0.079448', '1.973014', '13.034443']


ax.plot(input1, list(map(float, quickrComp)), label="QR")
ax.plot(input1, list(map(float, mergeComp)), label="merge")
ax.plot(input1, list(map(float, quickComp)), label="Quick")
ax.plot(input1, list(map(float, inComp)), label="Insrção")
ax.set_yscale('log')
ax.legend()
plt.show()

http://users.stat.umn.edu/~zouxx019/Papers/elasticnet.pdf