Почему метки делений графика перекрываются только для импортированных данных CSV?Python

Программы на Python
Ответить
Anonymous
 Почему метки делений графика перекрываются только для импортированных данных CSV?

Сообщение Anonymous »

Когда я создаю простой график matpltlib с массивами numpy, метки галочек ведут себя хорошо, выбраны разумно, чтобы не перекрываться, и расположены так, чтобы равномерно охватывать диапазон данных.
Однако, когда я импортированные данные в массивы numpy, метки галочек - это беспорядок. Похоже, что он добавил метку для каждой точки данных вместо автоматического создания разумного масштаба.
Почему из-за моих данных он не создается автоматически ?

Как заставить MPL делать это автоматически для реальных данных с неравномерно расположенными данными X/Y?

"Нормальное" поведение:

Код: Выделить всё

import matplotlib.pyplot as plt
import numpy as np
import numpy.random as rnd

x = np.array(  range(1000000)  )
y = rnd.rand(1,1000000)[0]

fig, ax = plt.subplots()
ax.plot(x,y)
Результирующий график, как и ожидалось:
Изображение


Реальные данные с неравномерно расположенными данными по оси X, импортированные из файла.
Фрагмент файла данных:

Код: Выделить всё

-1900.209922,-106.022
-1900.176409,-103.902
-1900.142897,-112.337
-1900.109384,-109.252
...
Скрипт печати:

Код: Выделить всё

import numpy as np
import matplotlib.pyplot as plt
import csv

# Read CSV file
with open(r"graph.csv", encoding='utf-8-sig') as fp:
reader = csv.reader(fp, delimiter=",", quotechar='"', )
data_read = [row for row in reader]
#end with file

d = np.array(data_read).T   # transpose

x = d[0][0:10]
y = d[1][0:10]

fig, ax = plt.subplots()
ax.plot( x, y, "." )
fig.show()
Я получаю беспорядочные метки галочек:
Изображение

При увеличении вы можете видеть, что тики добавлены именно в моих точках данных:
Изображение


Если я изменю X-данные на линейный массив, затем он автоматически отмечает ось X, помещая метки в интуитивно понятных местах (а не в точках данных):

Код: Выделить всё

y = d[1][0:100]
x = range( len(y) )   # integer x-axis points

fig, ax = plt.subplots()
ax.plot( x, y, "." )
fig.show()
Изображение

Кстати, даже если я загружу 20 000 точек данных, так что ось Y охватывает диапазон от -106 --> -88 (в случае, если значения были слишком близко друг к другу), метки оси Y все равно будут конфликтовать:

Код: Выделить всё

y[-1]
Out[31]: '-88.109'

y[0]
Out[32]: '-106.022'
Изображение

В конечном итоге Я буду загружать большое количество точек данных (200 000), поэтому нужно решить эту проблему.

Подробнее здесь: https://stackoverflow.com/questions/767 ... d-csv-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»