Единицы измерения на оси x графика не имеют одинакового масштаба

#python #graph

#python #График

Вопрос:

У меня есть следующий код

 import numpy as np

#x axis
data = open("spectra.dat","r")
linesColumn = data.readlines()
xaxis = []
for x in linesColumn:
    xaxis.append(x.split()[0])
data.close()

#y data
data = open("spectra.dat","r")
linesColumn1 = data.readlines()
firstColumn = []
for x in linesColumn1:
    firstColumn.append(x.split()[1])
data.close()

plt.plot(xaxis, firstColumn)

plt.show()
  

Данные здесь https://drive.google.com/file/d/177kzRGXIoSKvH1fC9XJZubfK3AHzHsFF/view?usp=sharing

Когда я строю график, я получаю линейную функцию, потому что единицы измерения на оси x не масштабируются одинаково. В начале одна единица равна 0,1, а в конце — 5, но она по-прежнему отображается на том же расстоянии по оси x.

Как мне это исправить? Кроме того, есть ли способ оптимизировать разделение столбцов (делая это через цикл или что-то в этом роде) и сохранить каждый столбец в виде одного списка?

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

1. Вам необходимо предоставить разрешение на доступ к данным на Google Диске. Найдя max и значение по оси x, мы можем использовать функцию np.arange(). Например, np.arange(0, 5, 0.1): минимальное значение: 0, максимальное значение: 5, размер шага: 0.1, используя эту функцию, мы можем иметь одинаковый размер шага от начальной точки до конца

2. Теперь данные доступны, извините. Это не решает проблему для оси x (np.arange(xaxis)); «Ошибка типа: неподдерживаемые типы операндов для -: ‘list’ и ‘int'».

Ответ №1:

Проблема в том, что xaxis состоит из str переменных типа. Преобразуя str переменную типа в float , мы можем получить ожидаемую цифру. Код показан ниже:

 import numpy as np
from matplotlib import pyplot as plt

#x axis
data = open("spectra.DAT","r")
linesColumn = data.readlines()
xaxis = []
for x in linesColumn:
    xaxis.append(float(x.split()[0]))
data.close()

#y data
data = open("spectra.DAT","r")
linesColumn1 = data.readlines()
firstColumn = []
for x in linesColumn1:
    firstColumn.append(x.split()[1])
data.close()

plt.plot(xaxis, firstColumn)

plt.show()
  

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