我对ggplot2中的传说有疑问 . 我设法在同一图表中绘制三条线,并想要添加使用三种颜色的图例 . 这是使用的代码
library(ggplot2)
require(RCurl)
link<-getURL("https://dl.dropbox.com/s/ds5zp9jonznpuwb/dat.txt")
datos<- read.csv(textConnection(link),header=TRUE,sep=";")
datos$fecha <- as.POSIXct(datos[,1], format="%d/%m/%Y")
temp = ggplot(data=datos,aes(x=fecha, y=TempMax,colour="1")) +
geom_line(colour="red") + opts(title="TITULO") +
ylab("Temperatura (C)") + xlab(" ") +
scale_y_continuous(limits = c(-10,40)) +
geom_line(aes(x=fecha, y=TempMedia,colour="2"),colour="green") +
geom_line(aes(x=fecha, y=TempMin,colour="2"),colour="blue") +
scale_colour_manual(values=c("red","green","blue"))
temp
和输出
我想添加一个带有三种颜色的图例和变量的名称(TempMax,TempMedia和TempMin) . 我试过了
scale_colour_manual
但找不到确切的方法 .
遗憾的是,原始数据已从链接网站中删除,无法恢复 . 但它们来自具有此格式的meteo数据文件
"date","Tmax","Tmin","Tmed","Precip.diaria","Wmax","Wmed"
2000-07-31 00:00:00,-1.7,-1.7,-1.7,-99.9,20.4,20.4
2000-08-01 00:00:00,22.9,19,21.11,-99.9,6.3,2.83
2000-08-03 00:00:00,24.8,12.3,19.23,-99.9,6.8,3.87
2000-08-04 00:00:00,20.3,9.4,14.4,-99.9,8.3,5.29
2000-08-08 00:00:00,25.7,14.4,19.5,-99.9,7.9,3.22
2000-08-09 00:00:00,29.8,16.2,22.14,-99.9,8.5,3.27
2000-08-10 00:00:00,30,17.8,23.5,-99.9,7.7,3.61
2000-08-11 00:00:00,27.5,17,22.68,-99.9,8.8,3.85
2000-08-12 00:00:00,24,13.3,17.32,-99.9,8.4,3.49
3 回答
我倾向于发现如果我在多个geom中指定单独的颜色,我做错了 . 这是我绘制数据的方式:
剩下的就是一个简单的ggplot命令:
Example plot
由于@Etienne询问如何在不熔化数据的情况下这样做(这通常是首选方法,但我认识到可能存在一些不可能的情况),我提出以下备选方案 .
从原始数据的子集开始:
您可以通过以下方式获得所需的效果(这也会清除原始绘图代码):
我们的想法是通过将
colour
美学映射到一个常量字符串来为每一行赋予颜色 . 选择要在图例中显示的字符串是最简单的 . 在这种情况下它与绘制的y
变量的名称相同的事实并不重要;它可以是任何字符串集 . 这是非常重要的,这是在aes
电话内;您正在创建到此"variable"的映射 .scale_colour_manual
现在可以将这些字符串映射到适当的颜色 . 结果是在某些情况下,需要通过在手动缩放中命名值来明确级别和颜色之间的映射(感谢@DaveRGP指出这一点):
(给出与以前相同的数字) . 使用命名值,可以使用中断设置图例中的顺序,并且可以在值中使用任何顺序 .
我非常喜欢@Brian Diggs提出的解决方案 . 但是,在我的情况下,我在一个循环中创建线图而不是明确地给它们,因为我不知道apriori我将拥有多少个图 . 当我试图调整@Brian的代码时,我遇到了正确处理颜色的一些问题 . 原来我需要修改美学功能 . 如果有人遇到同样的问题,这里的代码对我有用 .
我和@Brian使用了相同的数据框:
在我的情况下,我动态生成
my.cols
和my.names
,但我不想让事情变得不必要地复杂,所以我在这里明确地给出它们 . 这三行使图例的排序和颜色分配更容易 .这是情节: