Что я делаю не так с matplotlibs yticks?

#python #python-3.x #matplotlib

#python #python-3.x #matplotlib

Вопрос:

Мой код выглядит следующим образом (не спрашивайте имена переменных, я немец ^^):

 import matplotlib.pyplot as plt
import numpy as np 

strecke = []
zeit = []

daten = open("BewegungBeschleunigung.csv")

for i in daten:
    i =  i.strip().split(",")
    strecke.append(i[1])
    zeit.append(i[0])

zeit.pop(0)
strecke.pop(0)

f, ax = plt.subplots()

ax.set_xticks(np.arange(0, 100   1, 5)) 
ax.set_yticks(np.arange(0,6000, 10))
ax.set_xlabel("Zeit")
ax.set_ylabel("Strecke")

plt.plot(zeit, strecke, "go")
#plt.autoscale(enable = False, axis = "both", tight = None)
plt.grid(True)
plt.show()
  

Теперь мой вопрос таков: как вы можете видеть на рисунке, ось y переходит только в 4860 вместо 6000, что я и написал, а не в 10 шагов (как я хотел). Это просто выполняется случайными шагами. Что я делаю не так и почему ось x не переходит в 100?

спасибо за вашу помощь.

введите описание изображения здесь

Комментарии:

1. Вам следует попробовать установить ограничения после построения графика. Так что двигайтесь plt.plot(zeit, strecke, "go") , прежде чем устанавливать галочки

2. спасибо за помощь, но если я делаю это, это выглядит примерно так: prntscr.com/n0lvcp

3. Попробуйте следующее: ax.set_xlim(0, 101) и ax.set_ylim(0, 6000) , а затем установите xticks и yticks и дайте мне знать, что произойдет

4. куда именно я должен это добавить? почему я новичок, просто где-то в коде?

5. Сначала plt.plot(zeit, strecke, "go") , затем ax.set_xlim(0, 101) и ax.set_ylim(0, 6000) , а затем ax.set_xticks(np.arange(0, 100 1, 5)) и ax.set_yticks(np.arange(0,6000, 10))

Ответ №1:

У меня была такая же проблема, и через несколько часов я обнаружил, что мои значения были strigs:

 ypoints=['97', '100', '98', '99', '55', '97', '100', '98', '100', '100', '100', '100', '100', '98', '100', '100']
  

Я только сделал следующее:

 ypoints = [int(y) for y in ypoints]
  

Ответ №2:

Проблема, которую я обнаружил, заключалась в том, что ваши значения были строками. Вы можете преобразовать их в значения с плавающей запятой при сохранении в списках. Затем вы можете установить ограничения оси. Обратите внимание, что np.arange(0,6000, 10) это сгенерировало бы 600 тактов. Это приведет к переполнению вашей оси y.

 for i in daten:
    i =  i.strip().split(",")
    strecke.append(float(i[1]))
    zeit.append(float(i[0]))
zeit.pop(0)
strecke.pop(0)

f, ax = plt.subplots()

ax.set_xlabel("Zeit")
ax.set_ylabel("Strecke")
ax.plot(zeit, strecke, "go")
ax.set_xlim(0, 100)
ax.set_ylim(0, 6000)
ax.grid(True)
  

введите описание изображения здесь