Линии сюжета Python с определенными значениями x от numpy - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть ситуация с кучей файлов данных, у этих файлов данных есть несколько выборок в заданный период времени, который зависит от системы.т.е. в момент времени t = 1, например, у меня может быть файл с 10 или 20 элементами, в более поздние времена в этом файле у меня всегда будет одинаковое количество элементов.Формат - время, x, y, z в столбцах и загружается в массив Numpy.Значения времени показывают, какой кадр, но, как уже упоминалось, всегда есть одно и то же, давайте рассмотрим 10 в качестве образца.Таким образом, у меня будет массив (10,4), где значения времени идентичны, но в файле много кадров, так что скажем, 100 кадров, так что на самом деле у меня есть (1000,4).Я хочу построить данные со временем на оси x и манипулировать другими данными на оси y, но я не уверен, как это сделать с помощью методов линейного графика в matplotlib.Обычно для предоставления обоих значений x, y я считаю, что мне нужно сделать точечный график, поэтому я надеюсь, что есть лучший способ сделать это.В идеале я хочу, чтобы каждая строка с одинаковым временным кодом рассматривалась как отдельная серия (поэтому она будет окрашиваться по-разному), и следующий бит данных для того же номера строки в следующем кадре (значение времени) будет помечен кактого же цвета, давая эти хорошие непрерывные линии.Мы можем взглянуть на столбец времени и выяснить, сколько элементов имеют временной код, назовем его «n».Пример кода:

a = numpy.loadtxt('sampledata.txt')
plt.plot(a[:0,:,n],a[:1,:1])
plt.show()

Я думаю, что этот код отражает то, к чему я стремлюсь, хотя он не работает.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Альтернатива, метод, который я использовал, но ответ Тима все еще точен.Поскольку временные коды не являются информацией о дате / времени, я изменил свой собственный код, добавив теги в качестве второго столбца, который я называю «p» (это полимеры).

import numpy as np
import pandas as pd
datain = np.loadtxt('somefile.txt')
df = pd.DataFrame(data = datain, columns = ["t","p","x","y","z"])
ax = sns.scatterplot("t","x", data = df, hue = "p")
plt.show()

И, конечно, другие столбцы могутпри желании построить аналогично.

0 голосов
/ 15 февраля 2019

Редактировать: Надеюсь, это то, что вы хотели.

диаграмма рассеяния Seaborn может классифицировать данные по некоторым группам, которые имеют одинаковые коды (в данном случае временной код) и используют те же цветак ним.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv(r"E:\Programming\Python\Matplotlib\timecodes.csv",
                 names=["time","x","y","z","code"]) #use your file

df["time"]=pd.to_datetime(df["time"]) #recognize the data as Time
df["x"]=df["time"].dt.day # I changed the data into "Date only" and imported to x column. Easier to see on graph.

#just used random numbers in y and z in my data.
sns.scatterplot("x", "y", data = df, hue = "code") #hue does the grouping

plt.show()

Я использовал CSV-файл здесь, но вы можете сделать и для вашего текстового файла, добавив sep="\t" в аргумент.Я также добавил код в файл.Если он у вас есть, код может сгруппировать данные в графе, поэтому вам не нужно разделять или создавать иерархический индекс.Если вы хотите изменить цвет или группировку, посетите веб-сайт seaborn.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...