R - 图表Y,X表示类别Z,某些类别表示其他类别作为行

时间:2014-09-04 19:48:59

标签: r ggplot2 line categories point

在Y和X的类别Z的图中,我希望类别由不同collor的点表示,除了一个类别,我希望将其显示为连接点的线。

以下是迄今为止的数据和内容:

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。我只想要非科学的普通数字 符号形式。我使用labels =“逗号”,但我不想昏迷 本身。理想情况下,我希望逗号为小数位 分离器。

编辑:我问过另一个关于如何为此图表嵌入图例的问题(这篇文章:Legend as text alongside points for each category and with same collor

1 个答案:

答案 0 :(得分:0)

如果您使用ggplot并且只将一部分数据传递给不同的geom,则可以混合使用geoms。在这里,您可以将dat_long中的所有内容传递到geom_pointvariableLei_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")