这是关于SO的第一个问题,我希望有人可以帮我解答。
我正在使用R
和data<-read.csv("/data.csv")
从csv中读取数据,并得到类似的内容:
Group x y size Color
Medium 1 2 2000 yellow
Small -1 2 1000 red
Large 2 -1 4000 green
Other -1 -1 2500 blue
每个组颜色可能会有所不同,它们在生成csv
文件时由公式指定,但这些颜色都是可能的颜色(组的数量也可能不同)。
我一直在尝试使用ggplot()
:
data<-read.csv("data.csv")
xlim<-max(c(abs(min(data$x)),abs(max(data$x))))
ylim<-max(c(abs(min(data$y)),abs(max(data$y))))
data$Color<-as.character(data$Color)
print(data)
ggplot(data, aes(x = x, y = y, label = Group)) +
geom_point(aes(size = size, colour = Group), show.legend = TRUE) +
scale_color_manual(values=c(data$Color)) +
geom_text(size = 4) +
scale_size(range = c(5,15)) +
scale_x_continuous(name="x", limits=c(xlim*-1-1,xlim+1))+
scale_y_continuous(name="y", limits=c(ylim*-1-1,ylim+1))+
theme_bw()
除了颜色
外,一切都是正确的我注意到右侧的图例按字母顺序排列组(大,中,其他,小),但颜色保留在csv
文件顺序中。
这是情节的截图。
有人能告诉我我的代码中缺少什么来解决这个问题吗?其他方法可以达到同样的效果。
答案 0 :(得分:14)
help("scale_colour_manual")
建议的一种方法是使用命名字符向量:
col <- as.character(data$Color)
names(col) <- as.character(data$Group)
然后将比例的values
参数映射到此向量
# just showing the relevant line
scale_color_manual(values=col) +
完整代码
xlim<-max(c(abs(min(data$x)),abs(max(data$x))))
ylim<-max(c(abs(min(data$y)),abs(max(data$y))))
col <- as.character(data$Color)
names(col) <- as.character(data$Group)
ggplot(data, aes(x = x, y = y, label = Group)) +
geom_point(aes(size = size, colour = Group), show.legend = TRUE) +
scale_color_manual(values=col) +
geom_text(size = 4) +
scale_size(range = c(5,15)) +
scale_x_continuous(name="x", limits=c(xlim*-1-1,xlim+1))+
scale_y_continuous(name="y", limits=c(ylim*-1-1,ylim+1))+
theme_bw()
输出继电器:
数据
data <- read.table("Group x y size Color
Medium 1 2 2000 yellow
Small -1 2 1000 red
Large 2 -1 4000 green
Other -1 -1 2500 blue",head=TRUE)