SORU
27 Mayıs 2012, Pazar


Anlayış tarihleri ve R ggplot2 ile histogram çizimi

Ana Soru

Tarihler, etiketler ve sonları işleme ggplot2 ile bir histogram yapmak için çalışırken R beklenen istediğim gibi çalışmıyor neden anlamak ile ilgili sorunlar yaşıyorum.

Arıyorum:

  • Benim tarihler frekans histogram
  • Onay işaretleri eşleşen parmaklıklar altında ortalanmış
  • %Y-b biçiminde etiketler tarih
  • Uygun sınırlar; ızgara alanı ve dıştaki barlar kenar arasındaki boş alan küçültülmüş

uploaded my data to pastebin I bu tekrarlanabilir. Tabii bunu yapmak için en iyi yol değildi olarak birden fazla sütun oluşturdum:

> dates <- read.csv("http://pastebin.com/raw.php?i=sDzXKFxJ", sep=",", header=T)
> head(dates)
       YM       Date Year Month
1 2008-Apr 2008-04-01 2008     4
2 2009-Apr 2009-04-01 2009     4
3 2009-Apr 2009-04-01 2009     4
4 2009-Apr 2009-04-01 2009     4
5 2009-Apr 2009-04-01 2009     4
6 2009-Apr 2009-04-01 2009     4

Denedim:

library(ggplot2)
library(scales)
dates$converted <- as.Date(dates$Date, format="%Y-%m-%d")

ggplot(dates, aes(x=converted))   geom_histogram()
       opts(axis.text.x = theme_text(angle=90))

this graph verir. Ben buralarda avlanan ve ardından this SO dayalı denedim %Y-%b biçimlendirme yine de istedim:

ggplot(dates, aes(x=converted))   geom_histogram()
     scale_x_date(labels=date_format("%Y-%b"),
     breaks = "1 month")
     opts(axis.text.x = theme_text(angle=90))

stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

Bana this graph verir

  • Eksen etiket formatı x doğru
  • Frekans dağılımı şekil (binwidth sorunu?) değişti
  • Onay işaretleri parmaklıklar altında ortalanmış görünmüyor
  • Bu xlims de değişti

Çalıştım aracılığıyla örneğin ggplot2 documentation scale_x_date bölüm geom_line() görünür kırmak, etiket ve merkez keneler doğru zaman kullanıyorum onunla benim aynı x ekseni veri. Histogram farklı olduğunu anlamıyorum.


Güncellemeleri edgester ve gauden gelen cevaplara göre

Ben başlangıçta gauden cevabı benim sorunu çözmeye yardımcı oldu, ama şimdi daha yakından baktıktan sonra şaşkın olduğumu düşündüm. İki cevap arasındaki farklar' kodundan sonra elde edilen grafikler. not

Hem varsayalım:

library(ggplot2)
library(scales)
dates <- read.csv("http://pastebin.com/raw.php?i=sDzXKFxJ", sep=",", header=T)

Aşağıda @edgester cevabı dayanarak şu: bunu yapabildim

freqs <- aggregate(dates$Date, by=list(dates$Date), FUN=length)
freqs$names <- as.Date(freqs$Group.1, format="%Y-%m-%d")

ggplot(freqs, aes(x=names, y=x))   geom_bar(stat="identity")  
       scale_x_date(breaks="1 month", labels=date_format("%Y-%b"),
                    limits=c(as.Date("2008-04-30"),as.Date("2012-04-01")))  
       ylab("Frequency")   xlab("Year and Month")  
       theme_bw()   opts(axis.text.x = theme_text(angle=90))

Burada gauden cevabı dayalı denemem:

dates$Date <- as.Date(dates$Date)
ggplot(dates, aes(x=Date))   geom_histogram(binwidth=30, colour="white")  
       scale_x_date(labels = date_format("%Y-%b"),
                    breaks = seq(min(dates$Date)-5, max(dates$Date) 5, 30),
                    limits = c(as.Date("2008-05-01"), as.Date("2012-04-01")))  
       ylab("Frequency")   xlab("Year and Month")  
       theme_bw()   opts(axis.text.x = theme_text(angle=90))

Arsa edgester yaklaşımı:

edgester-plot

Arsa gauden yaklaşımı:

gauden-plot

Aşağıdakilere dikkat edin:

  • 2009-Aralık 2010-Mart; table(dates$Date) gauden arsa boşlukları veri 2009-12-01 2010-03-01 26 örnekleri örnekleri 19 olduğunu ortaya koymaktadır
  • edgester arsa 2008-Nisan 2012'de başlıyor ve Mayıs sonunda biter. Bu 2008-04-01 veri ve 2012-05-01 max bir tarih içinde en az bir değere göre doğrudur. Nedense gauden arsa 2008-Mar başlıyor ve hala bir şekilde 2012-sonuna kadar yönetir. Kutuları sayma ve ay etiketler, beni hayat için okuduktan sonra arsa bir ekstra var ya histogram bin eksik olan çözemiyorum!

Farkları burada herhangi bir düşünce? ayrı bir sayım oluşturma edgester yöntemi


İlgili Referanslar

Bir kenara olarak, aşağıda, yoldan geçenler tarafından yardım arıyor: tarih ve ggplot2 hakkında bilgi sahibi diğer yerlerde

  • Learnr* *32.wordpress, popüler R bir blog. Ben şimdi yanlış olduğunu düşünüyorum POSİXct biçimi, içine verilerimi almam gerekiyordu ve benim için zaman kaybı olduğunu belirtti.
  • Another learnr post ggplot2, ama benim durumum için gerçekten geçerli değildi bir zaman serisi oluşturur.
  • r-bloggers has a post on this, ama modası geçmiş gibi görünüyor. format= basit bir seçenek benim için işe yaramadı.
  • This SO question sonları ve etiketler ile oynuyor. Sürekli olarak Date benim vektör tedavi denedim ve işe yaradı. hiç sanmıyorum. Harfleri biraz tuhaf görünüyordu, böylece tekrar tekrar aynı metni kaplayan gibiydi. Dağıtım bir bakıma doğrudur ama garip bir sonu vardır. Benim girişimi kabul cevabı gibi oldu (result here) dayalı.

CEVAP
27 Mayıs 2012, Pazar


GÜNCELLEME

Sürüm 2: Kullanarak Tarih sınıf

Ben etiketleri hizalamak ve arsa limit ayarını göstermek için örnek güncelleştirin. Ben de as.Date gerçekten sürekli (aslında muhtemelen daha önce benim örnek veri için daha uygun olur) kullanıldığında çalışır göstermek.

Hedef Arsa v2

date-based histogram

Kod v2

Ve işte (biraz aşırı) yorumladı kodu:

library("ggplot2")
library("scales")

dates <- read.csv("http://pastebin.com/raw.php?i=sDzXKFxJ", sep=",", header=T)
dates$Date <- as.Date(dates$Date)

# convert the Date to its numeric equivalent
# Note that Dates are stored as number of days internally,
# hence it is easy to convert back and forth mentally
dates$num <- as.numeric(dates$Date)

bin <- 60 # used for aggregating the data and aligning the labels

p <- ggplot(dates, aes(num, ..count..))
p <- p   geom_histogram(binwidth = bin, colour="white")

# The numeric data is treated as a date,
# breaks are set to an interval equal to the binwidth,
# and a set of labels is generated and adjusted in order to align with bars
p <- p   scale_x_date(breaks = seq(min(dates$num)-20, # change -20 term to taste
                                   max(dates$num), 
                                   bin),
                      labels = date_format("%Y-%b"),
                      limits = c(as.Date("2009-01-01"), 
                                 as.Date("2011-12-01")))

# from here, format at ease
p <- p   theme_bw()   xlab(NULL)   opts(axis.text.x  = theme_text(angle=45,
                                                                  hjust = 1,
                                                                  vjust = 1))
p

Sürüm 1: POSİXct

2009 yılı başında, 2011 yılı sonu arasında 25**, toplama olmadan çizim ve sınırlarını x-eksen ayarı her şeyi yapan bir çözüm deneyin.

Hedef Arsa v1

plot with limits set in ggplot2

Kod v1

library("ggplot2")
library("scales")

dates <- read.csv("http://pastebin.com/raw.php?i=sDzXKFxJ", sep=",", header=T)
dates$Date <- as.POSIXct(dates$Date)

p <- ggplot(dates, aes(Date, ..count..))   
    geom_histogram()  
    theme_bw()   xlab(NULL)  
    scale_x_datetime(breaks = date_breaks("3 months"),
                     labels = date_format("%Y-%b"),
                     limits = c(as.POSIXct("2009-01-01"), 
                                as.POSIXct("2011-12-01")) )

p

Elbette, eksen etiket seçenekleri ile oynama ile yapabilirdi, ama bu komplo paketinde temiz kısa bir rutin ile çizme tamamlıyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Deany Boii

    Deany Boii

    27 Kasım 2007
  • Kim Barbin

    Kim Barbin

    3 Mayıs 2012
  • Thom Hall

    Thom Hall

    24 Kasım 2006