2012-05-07 3 views
5

私は、着色だけで区別するのが難しいいくつかの時間点を持つ線図を持っていますので、グラフ上の時間点にラベルを付けることができますが、ラベルを読むのが難しいような方法で。 「スタックのラベルや、それらが重複していないことを確認することができますいくつかの方法(スクリプト)への道があるかどうgeom_textを使用してgeom_pointにテキストを整理する

プロットは現在、次のようになり、

current plot

は、私は疑問に思います。このような何か、

 - - >

任意の助けいただければ幸いです。ここで

は、私はプロットを生成するために使用されるコードは、あなたが訪問の数値に応じてラベルの垂直位置を変更することができ、

require(ggplot2) 
require(plyr) 
require(reshape) 

# create sample data 
set.seed(666) 
dfn <- data.frame(
Referral = seq(as.Date("2007-01-15"), len= 26, by="23 day"), 
VISIT01 = seq(as.Date("2008-06-15"), len= 24, by="15 day")[sample(30, 26)], 
VISIT02 = seq(as.Date("2008-12-15"), len= 24, by="15 day")[sample(30, 26)], 
VISIT03 = seq(as.Date("2009-01-01"), len= 24, by="15 day")[sample(30, 26)], 
VISIT04 = seq(as.Date("2009-03-30"), len= 24, by="60 day")[sample(30, 26)], 
VISIT05 = seq(as.Date("2010-11-30"), len= 24, by="6 day")[sample(30, 26)], 
VISIT06 = seq(as.Date("2011-01-30"), len= 24, by="6 day")[sample(30, 26)], 
Discharge = seq(as.Date("2012-03-30"), len= 24, by="30 day")[sample(30, 26)], 
Patient = factor(1:26, labels = LETTERS), 
openCase = rep(0:1, 100)[sample(100, 26)]) 

# set today's data for cases that do not have an Discharge date 
dfn$Discharge[ is.na(dfn$Discharge) ] <- as.Date("2014-01-30") 

mdfn <- melt(dfn, id=c('Patient', 'openCase'), variable_name = "Visit") 
names(mdfn)[4] <- 'Year' # rename 

# order data in mdfn by 'Referral' in dfn 
mdfn$Patient <- factor(mdfn$Patient,levels = 
(dfn$Patient[order(dfn$Referral)]),ordered = TRUE) 

# subset a dataset to avoid 'Discharge' for cases that are not closed 
mdfn2 <- subset(mdfn,!(Visit=="Discharge" & Year > as.Date("2014-01-01"))) 

# the plot as it looks now 
ggplot(mdfn, aes(Year, Patient)) + 
    geom_blank() + 
    geom_line(data = mdfn[mdfn$openCase == 0,], colour = "black") + 
    geom_line(data = mdfn[mdfn$openCase == 1,], colour = "grey") + 
    geom_point(data = mdfn2, aes(colour = Visit), size = 4, shape = 124) + 
    geom_text(data=mdfn2, mapping=aes(x=Year, y=Patient, 
    label=substr(Visit, 1, 7), colour=Visit), size=2, 
    vjust=-.4, hjust=-.1, angle = 00) 
+1

不足している機能、欠けているデータではなく、再現可能。 –

+0

私はそれを行う方法がわかりませんが、本当にラベルが必要ですか?既にその情報を伝えている伝説があります。 –

+1

[Rのインテリジェントポイントラベル配置]の複製が可能です(http://stackoverflow.com/questions/7611169/intelligent-point-label-placement-in-r) – joran

答えて

11

です。

キーがある:

y=(as.numeric(Patient)+0.25*as.numeric(Visit)%%3)-0.12 

これは、現在生成:
3つの異なるレベルを使用すると、各レベルが四半期で区切られ
を増加または減少させることができる訪問の値(%% 3)に記載します最初のラベル
(0.25)Y標識との間の距離の0.12
水平線以下の第0.12

上記

であります3210 enter image description here

require(ggplot2) 
require(plyr) 
require(reshape) 
# create sample data 
set.seed(666) 
dfn <- data.frame(
    Referral = seq(as.Date("2007-01-15"), len= 26, by="23 day"), 
    VISIT01 = seq(as.Date("2008-06-15"), len= 24, by="15 day")[sample(30, 26)], 
    VISIT02 = seq(as.Date("2008-12-15"), len= 24, by="15 day")[sample(30, 26)], 
    VISIT03 = seq(as.Date("2009-01-01"), len= 24, by="15 day")[sample(30, 26)], 
    VISIT04 = seq(as.Date("2009-03-30"), len= 24, by="60 day")[sample(30, 26)], 
    VISIT05 = seq(as.Date("2010-11-30"), len= 24, by="6 day")[sample(30, 26)], 
    VISIT06 = seq(as.Date("2011-01-30"), len= 24, by="6 day")[sample(30, 26)], 
    Discharge = seq(as.Date("2012-03-30"), len= 24, by="30 day")[sample(30, 26)], 
    Patient = factor(1:26, labels = LETTERS), 
    openCase = rep(0:1, 100)[sample(100, 26)]) 

# set today's data for cases that do not have an Discharge date 
dfn$Discharge[ is.na(dfn$Discharge) ] <- as.Date("2014-01-30") 

mdfn <- melt(dfn, id=c('Patient', 'openCase'), variable_name = "Visit") 
names(mdfn)[4] <- 'Year' # rename 

# order data in mdfn by 'Referral' in dfn 
mdfn$Patient <- factor(mdfn$Patient,levels = 
    (dfn$Patient[order(dfn$Referral)]),ordered = TRUE) 

# subset a dataset to avoid 'Discharge' for cases that are not closed 
mdfn2 <- subset(mdfn,!(Visit=="Discharge" & Year > as.Date("2014-01-01"))) 

# the plot as it looks now 
ggplot(mdfn, aes(Year, Patient)) + 
    geom_blank() + 
    geom_line(data = mdfn[mdfn$openCase == 0,], colour = "black") + 
    geom_line(data = mdfn[mdfn$openCase == 1,], colour = "grey") + 
    geom_point(data = mdfn2, aes(colour = Visit), size = 4, shape = 124) + 
    geom_text(data=mdfn2, mapping=aes(x=Year, y=(as.numeric(Patient)+0.25*as.numeric(Visit)%%3)-0.12, 
            label=substr(Visit, 1, 7), colour=Visit), size=2, 
      hjust=-.1, angle = 00) 
+0

エレガントで印象的な。今は、3つの時点がお互いに近く、ラベルがライン上に置かれないようにするためには、何をすべきかを理解する必要があります。ありがとう。 –

+0

テキストはオンラインになっていません。異なる高さレベルが必要な場合は、%%の後に続く数字を大きくし、シフトのサイズを小さくする(現在は0.25)ため、テキストを小さくする必要があります。 –

+0

これが実際のデータではなく、これが実際のデータでは機能しない場合は、匿名化した後に実際のデータを提供すると思います。http://stackoverflow.com/a/10458688/742447 –

関連する問題