Время на X-оси в Matplot [дубликат]

Вы можете использовать что-то вроде этого для PHP:

if(strpos('xyz',$v[0])===false)//example 1
//strpos returns false when the letter isn't in the string
//returns the position (0 based) of the substring
//we must use a strict comparison to see if it isn't in the substring

if(!in_array($v[0],array('x','y','z')))//example 2

//example 3
$out=array('x'=>1,'y'=>1,'z'=>1); //create an array
if(!$out[$v[0]]) //check if it's not 1

if(!preg_match('/^[xyz]$/',$v))//example 4, using regex

if(str_replace(array('x','y','z'),'',$v[0]))//example 5


if(trim($v[0],'xyz'))//example 6

Для Javascript:

if(~'xyz'.search(v[0]))//example 1(.indexOf() works too)

if(!(v[0] in {x:0,y:0,z:0}))//example 2

if(~['x','y','z'].indexOf(v[0]))//example 3, incompatible with older browsers.

if(!/^[xyz]$/.match(v))//example 4

if(v.replace(/^[xyz]$/))//example 5

Для MySQL:

Select not locate(@v,'xyz'); -- example 1

select @v not in ('x','y','z'); -- example 2

-- repetition of the same pattern for the others

Для C:

if(!strstr('xyz',v))//example 1, untested

Есть больше способов, я просто слишком ленив.

Используйте свое воображение и просто напишите то, что вам нравится больше!

101
задан Peter Mortensen 14 July 2016 в 00:29
поделиться

4 ответа

Сначала вы должны преобразовать свои метки времени в объекты Python datetime (используйте datetime.strptime). Затем используйте date2num, чтобы преобразовать даты в формат matplotlib.

Настройте даты и значения с помощью plot_date :

dates = matplotlib.dates.date2num(list_of_datetimes)
matplotlib.pyplot.plot_date(dates, values)
118
ответ дан oli5679 18 August 2018 в 12:14
поделиться
  • 1
    будет ли он строить дату или просто время? Мне нужно только время с момента перехода на дату и время, год установлен в 1990 году. – randomThought 15 October 2009 в 20:19
  • 2
    «... при преобразовании в дату и время, год установлен в 1990 году». Не могли бы вы разместить код, который вы используете для преобразования из строки в дату-время? Что-то может быть неправильно с преобразованием. Число рейнольдса форматирование ярлыков диаграмм, см. ссылку date_demo1, предоставленную J. K. Seppänen. Документация matplot lib отличная, BTW. matplotlib.sourceforge.net/index.html – codeape 19 October 2009 в 14:53
  • 3
    plot_dates - & gt; matplotlib.pyplot.plot_date (даты, значение) – Pete 22 November 2010 в 22:37
  • 4
    А как насчет разброса? Я хочу предоставить массив размеров, чтобы определить размер рассеивающих пузырьков, но нет эквивалента scatter_date() и нет очевидного / прямого способа получить этот график. – dwanderson 5 October 2016 в 16:23
  • 5
    Вышеприведенный возвращает список с одним объектом типа: matplotlib.lines.Line2D. Теперь как это использовать, чтобы показать график? – Arindam Roychowdhury 20 July 2017 в 06:59

7 лет спустя, и этот код мне помог. Однако, мои времена все еще не отображались правильно.

Используя Matplotlib 2.0.0, и мне пришлось добавить следующий бит кода из Редактирование форматирования даты меток по типу x в matplotlib Paul H.

import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)

Я изменил формат на (% H:% M) и отображаемое время правильно.

Все благодаря сообществу.

8
ответ дан GeorgeLPerkins 18 August 2018 в 12:14
поделиться

У меня возникли проблемы с использованием версии matplotlib: 2.0.2. Завершив пример сверху, я получил центрированный набор пузырей.

graph with centered stack of bubbles [/g0]

Я «исправил» проблему, добавив еще одну строку:

plt.plot([],[])

Весь фрагмент кода становится:

import datetime
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates


# make up some data
x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.plot([],[])
plt.scatter(x,y)

# beautify the x-labels
plt.gcf().autofmt_xdate()
myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)

plt.show()
plt.close()

Это создает изображение с пузырьками, распределенными по желанию.

graph with bubbles distributed over time [/g1]

4
ответ дан mkl 18 August 2018 в 12:14
поделиться
  • 1
    Благодарим вас за обновленную версию. – Aventinus 22 October 2017 в 12:16
  • 2
    Не работает на py2.6 для меня. Я получаю ValueError: минимальный предел просмотра -0.05500000000000001 меньше 1 и является недопустимым значением даты Matplotlib. Это часто происходит, если вы передаете значение, отличное от даты и времени, для оси, которая имеет единицы времени и времени. Размер фигуры 432x288 с 1 осью & gt; – AimForClarity 14 August 2018 в 10:58

Вы также можете построить парную метку, пары значений, используя pyplot.plot (после разбора их из строкового представления). (Протестировано с версиями matplotlib 1.2.0 и 1.3.1.)

Пример:

import datetime
import random
import matplotlib.pyplot as plt

# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()

plt.show()

Результирующее изображение:

Line Plot [/g2]


Вот то же самое, что и график рассеяния:

import datetime
import random
import matplotlib.pyplot as plt

# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()

plt.show()

Производит изображение, подобное этому:

62
ответ дан moooeeeep 18 August 2018 в 12:14
поделиться
  • 1
    как заставить его работать на участок рассеяния? – andilabs 8 February 2014 в 23:59
  • 2
    @andi он должен работать так же, как в моем примере (сменить plot на scatter). – moooeeeep 10 February 2014 в 10:02
  • 3
    Я не понимаю, почему это 5-й вопрос, с которым я столкнулся, когда у меня нет TRIED , используя график рассеяния - он не работает. Type Error - invalid type promotion. – dwanderson 5 October 2016 в 16:21
  • 4
    @dwanderson Тогда, может быть, вы делаете что-то неправильно. Я добавил пример для графика рассеяния с объектами datetime.datetime по оси x для моего сообщения. – moooeeeep 6 October 2016 в 07:26
  • 5
    @AimForClarity Работает для меня с matplotlib.__version__ 2.2.2. Тем не менее, график рассеяния имеет некоторые слишком широкие пределы х, установленные по умолчанию. Этот ответ, похоже, обеспечивает обходное решение, отличное от ручной настройки plt.xlim(...): stackoverflow.com/a/46467896/1025391 – moooeeeep 14 August 2018 в 14:08
Другие вопросы по тегам:

Похожие вопросы: