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ı:
Arsa gauden yaklaşımı:
Aşağıdakilere dikkat edin:
- 2009-Aralık 2010-Mart;
table(dates$Date)
gauden arsa boşlukları veri2009-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
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
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
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.
Anlayış std::atom::compare_exchange_we...
Yan yana araziler ggplot2 ile...
Anlayış NSString karşılaştırma...
Anlayış mesafeli ibeacon...
Anlayış MVC Deseni...