2016-04-01 3 views
-1

Таблица состоит из поля месяца/года, то есть «январь 2016 года». Как я использую изменить порядок boxplot для отображения оси X в хронологическом порядке (Jan 2016 ... Февраль 2016 .... Я попытался, используя следующий код:R boxplot: Как мне изменить порядок полей даты?

 boxplot(YR$S~reorder(format(YR$MY,'%M %Y'),YR$MY),outline =FALSE) 
<pre> 

IDX MY Day V Time G S W 
24 January 2015 1 G 1821 6 11 71 
25 January 2015 2 G 1600 9 15 1 
26 January 2015 5 G 1700 5 14 64 
27 January 2015 6 F 1805 3 14 4 
28 January 2015 7 G 1716 3 15 45 
29 January 2015 9 F 1910 3 8 38 

+1

Ответ будет зависеть от формата данные находятся внутри. Является ли столбец сформированным как дата, строка или коэффициент? Это поможет увидеть пример ваших данных, прежде чем выносить рекомендации. – Dave2e

+2

Можете ли вы предоставить небольшой образец данных, используя 'dput'? – steveb

+0

, если у вас просто есть пара, вы можете использовать 'boxplot (..., at = 5: 1)' – rawr

ответ

0

Как я уже упоминал выше, в зависимости от формата данных и как лучше бункер данные (т.е. ежемесячно в день) повлияет на рекомендацию. Ниже различные подходы, которые я хотел бы рассмотреть (не может быть лучшим способом, но он может получить работу):

#Sample data 
string<-rep(c("January 2016", "February 2016", "March 2016"), 3) 
day<-rep(c(1:3), each=3) 
value<-runif(9,10, 20) 
#data frame with string, int and float 
df<-data.frame(string, day, value) 

#Date as string 
boxplot(df$value~df$string, las=2, main="String") 
#undersirable - x - axis not in order 

#Date as a Date Class 
#convert to Date Class 
#xdate<-as.Date(paste(df$string, day), format= "%B %Y %d") 
#Need to convert everything to first of month to bin by month 
xdate<-as.Date(paste(df$string, 1), format= "%B %Y %d") 
b<-boxplot(df$value~xdate, las=2, main="Date", names=unique(months(xdate))) 
#Good - may need work on x axis labels 

#Date as a factor 
#convert to factor 
xfactor<-as.factor(df$string) 
#sets the factors in month order (drops the year suffix) 
xfactor<-factor(xfactor, levels = paste(month.name, "2016")) 
#remove unused levels 
xfactor<-droplevels(xfactor) 
boxplot(df$value~xfactor, las=2, main="factor") 
#Good - may need work on x axis labels depending in timeframe on interest 

Все три попытки имеют свои за и против, и в зависимости от исходного формата, сколько данных, частоту отчета, а конечные результаты определяют наилучший подход. Надеюсь, это поможет.

0

Преобразование вашего даты в класс Date, так что boxplot может выбрать подходящую непрерывную шкалу для оси х и заказать значения автоматически:

y <- YR$S 
oldloc <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "english") 
x <- as.Date(with(YR, paste(paste(MY, Day, sep = "-"))), format="%B-%Y-%d") 
Sys.setlocale("LC_TIME", oldloc) 
boxplot(y~x) 

Я поставил локалите на английский язык, так что R знает, как интерпретировать «январь» в иностранном языке uages ​​(на немецком языке, например, это «Januar»). Вы можете пропустить это, если вы настроены на английский язык уже ... используются

данных:

YR <- read.table(header=T, text=" 
MY Day V Time G S W 
February-2015 1 G 1821 6 11 71 
January-2015 2 G 1600 9 15 1 
January-2015 5 G 1700 5 14 64 
January-2015 6 F 1805 3 14 4 
January-2015 7 G 1716 3 15 45 
January-2015 9 F 1910 3 8 38") 
0

Спасибо всем за ваши ответы. Оказывается, что существует гораздо более короткий и простой способ. Библиотека «RLAB» имеет встроенную в коробке графике + биннинговую функция называется «bplot Вот пример copde:. (MY = месяц-год поле, S = число солнечных пятен)

library(Rlab) 
bplot(MY,S) 
Смежные вопросы