ggplot2:按字母顺序在图例中排序,而不是按照数据集中的出现顺序排序

时间:2014-01-28 10:48:28

标签: r csv ggplot2 legend

我正在制作AESRD 2013 - SCO Bitumen - 7y.csv in this folder的ggplot2线图。该文件根据我的意愿在网站上自动创建。这些是显示一些生产值的几个时间序列,每个生产值根据“编译”列命名。所以我根据“编译”分组。

在同一文件夹中可用的文件plotter.r中查看我的代码摘录(见上文)。

# "dt" is the dataframe derived from the csv file. 
# "thinned" is some vector of x-values that tells where to draw the special symbols.

p = ggplot(dt, aes(Date, Value, colour= Compilation, group = Compilation, size = plotParameter), guide=FALSE)
p = p + geom_point(data=dt[thinned,],aes(as.Date(Date), Value, colour= Compilation, shape = Compilation), size = 5)
p = p + scale_shape_manual(values = seq(0,20))
p = p + geom_line(guide = FALSE)
p = p + scale_colour_manual(values=cbPalette) #cbPalette is already defined
p = p + scale_size(range=c(0.5, 2), guide=FALSE)
p = p + scale_y_continuous(labels = comma)
p = p + ylab("Barrels per day") + xlab("")
p = p + theme(legend.text = element_text(size = 8, hjust = 5, vjust= -5)) 
plot(p)

这是令人讨厌的事情:传奇重新排序我的编辑 按字母顺序 enter image description here

我故意设计了我的csv文件,以便每个编译以特定的逻辑顺序显示(首先是最重要的系列,然后是按照某些性能参数的顺序)。因此,图例的正确顺序只是根据unique(dt$Compilation)

到目前为止,我的步骤是将列Order引入csv文件并进行实验(不成功),并以各种方式更改我的代码。没有成功。

当然,我已经用Google搜索并检查了Stackoverflow上的大多数可用线程。我遇到了因子分解和重新排序,但除了它们出现在数据集中的顺序之外,我的编辑没有“逻辑”顺序。 *叹*

有人能指点 来插入 吗?

(加分点:如何摆脱符号图例中的水平线?)

2 个答案:

答案 0 :(得分:6)

在两个比例(breaksscale_color_manual)中应用scale_shape_manual。如果我们只做一个,它们就不匹配了,ggplot会把它们分成两个传说,而不是合并它们

一个这样的例子是:

> library(ggplot2)
> ggplot(mtcars, aes(wt, mpg, shape=factor(cyl))) + geom_point() + theme_bw()
> library(ggplot2)
> bp <- ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot()
> bp

enter image description here

bp + scale_fill_discrete(breaks=c("trt1","ctrl","trt2"))

enter image description here

要反转

bp + scale_fill_discrete(breaks = rev(levels(PlantGrowth$group)))

也试试

bp + scale_fill_discrete(breaks = unique(levels(PlantGrowth$group)))

答案 1 :(得分:3)

要解决排序问题:您可能希望在绘图前通过调用dt$Compilation来确定dt <- transform(dt, Compilation=factor(Compilation, levels=unique(Compilation)))的因子级别。

说到水平线:你想要p = p + guides(size=FALSE)吗?