2014-09-04 24 views
0

在Y和X對Z類別的情節中,我希望類別可以由不同科羅爾的點表示,除了一個類別,我想將其顯示爲連接點的線。R - 圖表Y,X在類別Z上,一些類別在其他類別中被劃分爲行

下面是數據和我有什麼至今:

library(ggplot2);library(reshape);library(scales);library(directlabels) 
dat <- read.csv("https://dl.dropboxusercontent.com/u/4329509/Fdat_graf.csv") 
dat_long <- melt(dat, id="ano") 
p <- qplot(ano,value, data=dat_graf_long, colour=variable)+ 
scale_y_log10(breaks=c(.1,1,10,100,500,1000),labels = comma) + 
scale_x_continuous(breaks=seq(from=1960, to=2010, by=10)) + 
theme_bw() 
direct.label(p) 

我想對於「Lei_de_Moore」類別由一條線來表示,如本例(在Stata完成):

enter image description here

另外,我想改變一些東西(也許我應該問TEM不同的主題?):

  • 更改圖形顏色的樣式更「生動」,如Stata 示例
  • 更改Y aixis。我只是想在非科學 表示形式的普通數字。我用標籤=「逗號」,但我不想昏迷 本身。理想情況下,我希望逗號爲小數位 分隔符。

編輯:我問過(這個帖子:Legend as text alongside points for each category and with same collor)如何嵌入傳說此圖中的另一個問題

+0

您是否刪除了先前的相同問題? (你應該。) – 2014-09-04 20:00:21

+0

謝謝,我編輯了這個問題(和這一個),以避免冗餘。我認爲,作爲單獨的問題,他們會對其他人更有用。讓我知道你和其他人是否仍然認爲它應該被刪除。 – LucasMation 2014-09-04 20:31:16

回答

0

如果使用ggplot你可以混合geoms和僅傳遞數據到不同的子集geoms。在這裏,您可以通過dat_longgeom_point之間的所有內容,但variableLei_de_Moore的行除外,然後在不同的調用中僅將那些行dat_long行傳遞至geom_line

p <- ggplot(dat_long, aes(ano, value, color=variable)) + 
    geom_point(data=dat_long[dat_long$variable != 'Lei_de_Moore',]) + 
    geom_line(data=dat_long[dat_long$variable == 'Lei_de_Moore',]) + 
    scale_y_log10(breaks=c(.1,1,10,100,500,1000),labels = comma) + 
    scale_x_continuous(breaks=seq(from=1960, to=2010, by=10)) + 
    theme_bw() 

對於顏色,看看RColorBrewer包裝調色板。安裝軟件包並使用?brewer.pal以查看更多選項。例如,這可能工作:

p <- p + scale_color_brewer(palette="Set1") 

對於y軸標籤,你可能不得不一起破解一些東西。看看this question。所以你可以這樣做:

fmt <- function(){ 
    f <- function(x) sub(".", ",", as.character(round(x,1)), fixed=T) 
    f 
} 


p <- ggplot(dat_long, aes(ano, value, color=variable)) + 
    geom_point(data=dat_long[dat_long$variable != 'Lei_de_Moore',]) + 
    geom_line(data=dat_long[dat_long$variable == 'Lei_de_Moore',]) + 
    scale_y_log10(breaks=c(.1,1,10,100,500,1000), labels=fmt()) + 
    scale_x_continuous(breaks=seq(from=1960, to=2010, by=10)) + 
    theme_bw() + 
    scale_color_brewer(palette="Set1")