Код построения предполагает, что каждый столбец в штриховом исполнении заслуживает собственной метки. Вы можете переопределить это предположение, указав свой собственный форматировщик:
ax.xaxis.set_major_formatter(formatter)
pandas.tseries.converter.TimeSeries_DateFormatter
, который Pandas использует для форматирования дат в «хорошем» сюжете, хорошо работает с графическими строками когда значения x являются датами. Однако с графиком bar значения x (по крайней мере, полученные TimeSeries_DateFormatter.__call__
) являются целыми числами , начиная с нуля . Если вы попытаетесь использовать TimeSeries_DateFormatter
со строкой, все метки, таким образом, начнутся в эпоху, 1970-1-1 UTC, так как это дата, которая соответствует нулю. Таким образом, форматтер, используемый для линейных графиков, к сожалению, бесполезен для барных графиков (по крайней мере, насколько я вижу).
Самый простой способ, который я вижу для создания желаемого форматирования, - это создать и установить ярлыки явно:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.ticker as ticker
start = pd.to_datetime("5-1-2012")
idx = pd.date_range(start, periods= 365)
df = pd.DataFrame({'A':np.random.random(365), 'B':np.random.random(365)})
df.index = idx
df_ts = df.resample('W', how= 'max')
ax = df_ts.plot(kind='bar', x=df_ts.index, stacked=True)
# Make most of the ticklabels empty so the labels don't get too crowded
ticklabels = ['']*len(df_ts.index)
# Every 4th ticklable shows the month and day
ticklabels[::4] = [item.strftime('%b %d') for item in df_ts.index[::4]]
# Every 12th ticklabel includes the year
ticklabels[::12] = [item.strftime('%b %d\n%Y') for item in df_ts.index[::12]]
ax.xaxis.set_major_formatter(ticker.FixedFormatter(ticklabels))
plt.gcf().autofmt_xdate()
plt.show()
Для тех, кто ищет простой пример штрихового графика с датами:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
dates = pd.date_range('2012-1-1', '2017-1-1', freq='M')
df = pd.DataFrame({'A':np.random.random(len(dates)), 'Date':dates})
fig, ax = plt.subplots()
df.plot.bar(x='Date', y='A', ax=ax)
ticklabels = ['']*len(df)
skip = len(df)//12
ticklabels[::skip] = df['Date'].iloc[::skip].dt.strftime('%Y-%m-%d')
ax.xaxis.set_major_formatter(mticker.FixedFormatter(ticklabels))
fig.autofmt_xdate()
# fixes the tracker
# https://matplotlib.org/users/recipes.html
def fmt(x, pos=0, max_i=len(ticklabels)-1):
i = int(x)
i = 0 if i < 0 else max_i if i > max_i else i
return dates[i]
ax.fmt_xdata = fmt
plt.show()
Проверьте оглавления для моих книг. И Изучение Perl и Промежуточный Perl разработаны, чтобы преподавать программистам язык Perl. Мы покрываем 80% Perl, что большинство людей использует все время и разработало это с лет и лет обучающих людей Perl. Каждая книга разработана как учебное руководство, и существуют упражнения в конце каждой главы. Я также записал Изучение Рабочей книги Студента Perl для обеспечения дополнительных упражнений. Perl Программирования является хорошей ссылкой, также.
существует на самом деле очень немного правил, что необходимо знать для "получения" Perl, и большинство людей не разбирается в этих правилах только путем рассмотрения кода. Некоторые вещи учить новые Perlers, которые происходят из другого языка:
Удача:)
поскольку другие сказали:
use strict;
use warnings;
, возможно
use diagnostics;
для программистов Java:
use autodie; #or Fatal
американский лось/мышь English.pm
Perl:: Критик
perltidy
На основе моего опыта на рабочем месте я рекомендовал бы начать с документации Perl (уже покрытый здесь) и провел бы некоторое время, показывая студенту как к тестовому коду на командной строке. Действительно удивительно, как быстро кто-то может взять язык, когда они могут попробовать что-то на лету и сделать исправления, пока они не разбираются в нем.
Я пошел бы для разнообразия заключения в кавычки операторов (от perlop):
Customary Generic Meaning Interpolates
'' q{} Literal no
"" qq{} Literal yes
`` qx{} Command yes*
qw{} Word list no
// m{} Pattern match yes*
qr{} Pattern yes*
s{}{} Substitution yes*
tr{}{} Transliteration no (but see below)
<<EOF here-doc yes*
* unless the delimiter is ''.
список может быть подавляющим (особенно, когда Вы добавляете в альтернативных разделителях), но чрезвычайно полезный. Это также помогает при чтении кода начиная с немногих (если таковые имеются!) языки имеют множество кавычек, которые имеет Perl.
Я был просто нанят в этот точный сценарий. Я - C++ и Java-разработчик и никогда не касался Perl до моего текущего задания. Вещами, которые заняли время для привыкания также, был особенный выбор синтаксиса Perl [$ _], $this = что если..., и наблюдение леса для деревьев (что-либо содержащее/^# +\d/элементы). Другими вещами был просто результат дома программирования, я работаю в [запутывающие операторы OO, $self и помещение 1; в конце файлов модуля].
Теперь, когда я был здесь некоторое время, я вижу элементы стиля, который Perl дал мне даже в моих нерабочих проектах. Вы приближаетесь к задачам, особенно массирование данных, по-другому и похоже на реальный твердый инструмент на моей панели инструментов.
Все, что быть сказанным, мне вручили кодовую базу приблизительно 35 000 строк, книги верблюда и сказал, что я не мог использовать CPAN. Это были продуктивные шесть месяцы. ^^
Самая важная вещь, которую можно показать им, состоит в том, как получить доступ к документации, и как найти его (perldoc perltoc
, perldoc -q $keyword
, perldoc -f $function
и т.д.).
Perl идет с замечательной документацией, включая материал учебного стиля и ссылку. Создание этого доступного для вновь прибывшего является самой эффективной вещью, которую можно сделать для них.
Я - программист Java, который недавно должен был взять Perl. Первая часть, найденная самой твердой привыкнуть к, была всем специальным предложением, созданным в переменных как $ _ $ ~ $' и так далее. Пока Вы не привыкаете им, трудно отслеживать, которых делает что.
И, конечно, использование регулярных выражений.
Например, я должен поддержать код и когда я видел строку ниже впервые, это немного сбивало с толку. Как программист Java это похоже на мусор.
next unless "$_" !~ /^#/;
AdjustmentXMP
. Данные находятся в XML (конкретно XMP) формат. Значения касаются неповернутого изображения.
– William Denniss
15 October 2012 в 22:11
Вероятно, не точно, что Вы ищете. Извинения заранее.
я не указал бы на общие черты, если это не действительно необходимо.
Perl работает в своем собственном мире. Вы могли программировать Perl в стиле Java, если Вам нравится, но какой смысл?
самый важный урок я извлек уроки из Perl (и мои обучающие программы Perl) "Существует больше чем Один Способ Сделать Это". Таким образом, я думаю лучший способ узнать, что Perl охватывает свое отношение к программированию и поддержке каждого программиста, поскольку он находит его путь.
примерами, которые Вы делаете, функции списка и т.д., являются вещи, которые прибывают естественно с использованием - можно только понять их питание, как только Вы получаете Perl "способ вещей".
Просто мои два цента.
Perl Программирования (созданный в соавторстве #22483 - хорошая работа Randal, у меня был мой для близости в 10 лет) был большим введением к Perl. Начиная с regex, режущий и ставя на карту массивы, ассоциативные массивы и т.д. Плюс whys и как имеет создание отчетов в Perl и ссылке на функцию.
я не уверен, в каком количестве это изменяется, он - третий выпуск, но я основывал бы курс о нем и использовал бы его в качестве учебника. Это довольно кратко и к точке. Плюс тогда Ваш курс соответствует Вашей документации.
Для C++/Java/C# кодеры два различия, которые я подчеркиваю очень решительно заранее, то, что:
№ 1: В Perl почти все имеет значение, просто не всегда, что Вы хотите. Хорошие примеры включают:
№ 2: В Perl можно составить его, как Вы продвигаетесь. В других работах можно сказать "в хеше 'w', ключ 'x' индексирует анонимный массив, где поле 'y' содержит 'z'" , и интерпретатор создаст и размер все переменные для Вас, когда Вы идете.
Просто шутка, но независимо от того, что Вы делаете, показывает, что вещи как это СЛУЖАТ!;)
use integer;@A=split//,<>;sub R{for$i(0..80){next if$A[$i];my%t=map{$_/9
==$i/9||$_%9==$i%9||$_/27==$i/27&&$_%9/3==$i%9/3?$A[$_]:0=>1}0..80;R($A[
$i]=$_)for grep{!$t{$_}}1..9;return$A[$i]=0}die@A}R
Я могу только добавить, что кто-то происходящий из менее выразительные языки не мог бы понять выражения хеша или хешировать и выстроить выражения части. Кажется, что каждый язык имеет библиотеку PCRE в эти дни.
, О, и добавить к moritz идее, я обучил своих коллег на просто этом.
Плюс, я включал некоторую инструкцию относительно Данных:: Самосвал, Скаляр:: Util, Список:: Util и некоторые очень полезные модули как этот.
И почему не в этом отношении, проверьте Damian Лучшие практики Perl и поймайте несколько более мощных предложений.
Другим удивительным аспектом является контекст. Факт, который функционирует или даже переменные, ведет себя по-другому в зависимости от того, ссылаются ли на них в списке или скаляре (или пусто), контекст был важной деталью для стажеров Perl.
я обычно настаиваю на "более высоком уровне", созданном в функциях (карта, grep, соединение встык, разделите). Из-за TMTOWTDI многие программисты только помнят более знакомые аспекты Perl (как циклы C-стиля, substr и индекс) и используют исключительно их.
После того, как они будут знакомы с языком, Промежуточный Perl и , Усовершенствованное Программирование Perl может дать им дальнейшее понимание мира Perl
Откровенно говоря, я просто дал бы им Camel. Это - такая читаемая и интересная книга, они будут в порядке в мгновение ока. Я все еще смеюсь о 'Perl, содержит правду, чтобы быть самоочевидным', и это должны быть десять лет, с тех пор как я сначала считал его.
Я запустил бы, говоря им всегда использовать волшебную молитву:
use strict;
use warnings;
Они не должны знать почему (все же).
Затем, я представил бы их perldoc и показал бы им основы использования его (-f и флаги-q, perldoc жемчуг и perldoc perltoc, и т.д.) Они должны знать, где посмотреть, когда у них есть вопросы.
Я говорил бы о скаляре по сравнению с контекстом списка.
Я представил бы их типам основных данных (скаляры, массивы и хеши) и как символы следуют за контекстом, не типом данных!
Представить $_
и @_
. Очень важно понять $_
потому что это используется в таком количестве мест, часто неявно. @_
важно для записи подпрограмм. Другие переменные пунктуации используются намного менее часто и могут ожидать.
Представьте их регулярным выражениям и привыкните их для идеи regexes быть первоклассными объектами в Perl.
Я кратко показал бы им "диагональный" синтаксис Perl. Идиомы как next unless /foo/
замечательны, после того как Вы добираетесь, используют их, но кажутся очень посторонними при прибытии из других языков, особенно "ортогональных".
Вы не должны говорить о ссылках сразу же. Позвольте тому ожиданию, пока они не готовы сделать вещи, которые требуют структур данных. Функции как map
и grep
может ожидать, также.
Создайте прочную основу на основных принципах. Позвольте им взять маленькие шаги некоторое время, затем смешаться в большем количестве расширенных функций и идиом.
Это - единственная деталь, не полный ответ на Ваш вопрос, но для меня, метка кого-то, кто действительно стал ориентированным на Perl, является кем-то, кто заменяет эту идиому:
for (my $i = 0; $i < @a; $i++)
{
&do_something_with($array[$i]);
}
с этой идиомой:
foreach my $a (@array)
{
&do_something_with($a);
}
Преподают им списки как списки, не так же, как массивы. Преподавайте потрясающие структуры данных. Преподавайте списки, хеши, списки хешей, хешей списков, хешей хешей. Это - то, где самый большой шаг в питании входит по большинству стандартных языков со строгим контролем типов. (Иронически в магазине Java я присоединился в этом году, мы бросаем вокруг тонн arbitarily глубоко вложенных структур HashMap. Слишком многие, на самом деле; я - приведение доводов в пользу того в пользу выполнения немного меньше из него! Но в Perl, этот вид вещи жизненно важен.)
Я думаю, что "приложение-приманка" Perl CPAN †¦
Типичные кавычки после просмотра CPAN впервые:
"У Вас есть библиотека для ЧТО ?"
" Искореняют HTML , должно быть лучшее имя функции когда-либо!"
"Вы можете подводить итог текст в Perl?"
, Как только программисты видят, как легкий должен сделать твердые вещи, они продаются.
Я владею и справляюсь Обучение Perl Австралия . Я преподавал Perl в течение приблизительно восьми лет и информатику больше десятилетия. У меня есть твердые мнения о не только Perl, но также и об обучении и представлении в целом. Я записал сотни страниц текста о Perl - который я не буду повторять здесь - поэтому, что я собираюсь дать Вам, не совет относительно обучающего Perl; это - метасовет вместо этого.
Во-первых, если Ваше время и бюджет позволяют, рассматривают отправку Вашего сотрудника на профессиональном учебном курсе Perl. Специализированные курсы имеют преимущество, что они не идут с прерываниями работы, они не идут с политикой рабочего места, и они делают , идут с кем-то, кто очень знаком с людьми трудностей, имеют при изучении Perl. Удостоверьтесь, что у Вас есть тренер, который знает их материал и является активным членом сообщества Perl; это означает, что они должны быть в состоянии ответить на любой вопрос, брошенный в них или направить корреспондента к соответствующей ссылке, где они могут узнать больше. Да, я выполняю бизнес обучения Perl, таким образом, я в большой степени самоуверен здесь.
, Если по любой причине Вы не можете пойти со специализированным курсом, затем получите книгу, которую это специально предназначено, чтобы преподавать людям, как программировать в Perl и обходе через это. Легко пропустить вещи или попытаться представить вещи в неправильном порядке или (не дай бог) преподавать дурные привычки, и все те могут сделать Вашу жизнь трудной. Часто люди, пишущие книги, разработанные для обучения Perl, являются теми же людьми, у которых есть успешные компании обучения Perl. Если бы Вы хотите купить книгу, я рекомендовал бы последнюю версию Изучение Perl. Если бы Вы хотите загрузить книгу, я рекомендовал бы захватить примечания хода Perl Программирования от Обучение Perl веб-сайт Австралии .
Обе из этих книг идут с упражнениями, и это приносит мне к моей последней части метасовета. Удостоверьтесь любой, кто узнает, что Perl делает упражнения . Очень легко, когда осваивание любого нового навыка к думает , Вы знаете то, что продолжается, но узнайте, что при проведении в жизнь вещей это более твердо, чем это смотрит. Это особенно имеет место с Perl, где концепции программирования как "контекст" могут применяться, которые редки на других языках. Обычно упражнения специально предназначены, чтобы преподавать определенный навык или выделить определенную ловушку; понимание этих вещей во время изучения намного легче, чем понимание их накануне крайнего срока проекта.