#python #matplotlib
#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 неупорядочены; сначала вставляются значения quickrComp на оси y; затем все значения mergeComp и так далее. Мне нужно, чтобы значения по оси y начинались с 0 и заканчивались на самом высоком из 4-х рядов значений. Как я могу это сделать?
Комментарии:
1. Не уверен, что это проблема, но имейте в виду, что вы строите строки, которые неупорядочены (например, matplotlib не может знать, хотите ли вы, чтобы
"second pirate"
или"fourth viking"
отображались первыми на оси).
Ответ №1:
Две вещи: во-первых, ваши y-значения являются строками. Вам необходимо преобразовать данные в числовой ( float
) тип. Во-вторых, ваши значения y в одном из списков огромны по сравнению с остальными тремя списками. Таким образом, вам нужно будет преобразовать y-масштаб в логарифмический, чтобы увидеть тенденцию. В принципе, вы также можете преобразовать свои значения x в значения с плавающей точкой (целые числа), но в вашем примере вам это не нужно. В случае, если вы хотите это сделать, вам также придется удалить "
перед каждым значением 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()
Комментарии:
1. На переменные с названием функций оригинал был на английском, и я не обратил внимания во время перевода. Спасибо!