如何在 R 的散点图中为 class 着色?
How to give color to a class in scatter plot in R?
我的数据以 csv 格式存储。我想根据 activity 对这些数据进行着色,这意味着 4 种不同的活动应该具有 4 种不同的颜色。
ACTIVITY LAT LONG
Resting 21.14169444 70.79052778
Feeding 21.14158333 70.79313889
Resting 21.14158333 70.79313889
Walking 21.14163889 70.79266667
Walking 21.14180556 70.79222222
Sleeping 21.14180556 70.79222222
我尝试了以下代码,但没有用:
ACTIVITY.cols <- cut(ACTIVITY, 5, labels = c("pink", "green", "yellow","red","blue"))
plot(Data$Latitude,Data$Longitude, col = as.character(ACTIVITY.cols)
和
plot(Data$Latitude,Data$Longitude, col=c("red","blue","green","yellow")[Data$ACTIVITY]
使用ggplot2包更快更漂亮
library(ggplot2)
ggplot("your dataframe") + geom_point(aes(x = Latitude, y = Longitude, colour = factor(ACTIVITY)))
下面是我的做法,使用命名向量来定义颜色:
set.seed(1);
N <- 30;
df <- data.frame(activity=sample(c('Resting','Feeding','Walking','Sleeping'),N,replace=T),lat=runif(N,0,100),long=runif(N,0,100));
cols <- c(Resting='red',Feeding='blue',Walking='green',Sleeping='yellow');
par(mar=c(5,4,4,6)+0.1,xaxs='i',yaxs='i');
plot(df$lat,df$long,xlim=c(0,100),ylim=c(0,100),col=cols[as.character(df$activity)],main='Activity Locations',xlab='Latitude',ylab='Longitude');
legend(103,80,names(cols),col=cols,pch=1,xpd=T);
正在使用
txt <- "ACTIVITY LAT LONG
Resting 21.14169444 70.79052778
Feeding 21.14158333 70.79313889
Resting 21.14158333 70.79313889
Walking 21.14163889 70.79266667
Walking 21.14180556 70.79222222
Sleeping 21.14180556 70.79222222"
dat <- read.table(text = txt, header = TRUE)
一个选项是使用 ACTIVITY
变量作为索引来索引长度为 nlevels(ACTIVITY)
的颜色向量。
cols <- c("red","green","blue","orange")
plot(LAT ~ LONG, data = dat, col = cols[dat$ACTIVITY], pch = 19)
legend("topleft", legend = levels(dat$ACTIVITY), col = cols, pch = 19, bty = "n")
这会产生
要了解其工作原理,cols
已扩展为
> cols[dat$ACTIVITY]
[2] "green" "red" "green" "orange" "orange" "blue"
因为 ACTIVITY
是一个因子,但以数字形式存储为 1,2,...,n。
还有其他更高级别的解决方案,因此请考虑使用 ggplot2 包来简单地创建相同的绘图。
library("ggplot2")
plt <- ggplot(dat, aes(x = LONG, y = LAT, colour = ACTIVITY)) +
geom_point()
plt
产生
我的数据以 csv 格式存储。我想根据 activity 对这些数据进行着色,这意味着 4 种不同的活动应该具有 4 种不同的颜色。
ACTIVITY LAT LONG
Resting 21.14169444 70.79052778
Feeding 21.14158333 70.79313889
Resting 21.14158333 70.79313889
Walking 21.14163889 70.79266667
Walking 21.14180556 70.79222222
Sleeping 21.14180556 70.79222222
我尝试了以下代码,但没有用:
ACTIVITY.cols <- cut(ACTIVITY, 5, labels = c("pink", "green", "yellow","red","blue"))
plot(Data$Latitude,Data$Longitude, col = as.character(ACTIVITY.cols)
和
plot(Data$Latitude,Data$Longitude, col=c("red","blue","green","yellow")[Data$ACTIVITY]
使用ggplot2包更快更漂亮
library(ggplot2)
ggplot("your dataframe") + geom_point(aes(x = Latitude, y = Longitude, colour = factor(ACTIVITY)))
下面是我的做法,使用命名向量来定义颜色:
set.seed(1);
N <- 30;
df <- data.frame(activity=sample(c('Resting','Feeding','Walking','Sleeping'),N,replace=T),lat=runif(N,0,100),long=runif(N,0,100));
cols <- c(Resting='red',Feeding='blue',Walking='green',Sleeping='yellow');
par(mar=c(5,4,4,6)+0.1,xaxs='i',yaxs='i');
plot(df$lat,df$long,xlim=c(0,100),ylim=c(0,100),col=cols[as.character(df$activity)],main='Activity Locations',xlab='Latitude',ylab='Longitude');
legend(103,80,names(cols),col=cols,pch=1,xpd=T);
正在使用
txt <- "ACTIVITY LAT LONG
Resting 21.14169444 70.79052778
Feeding 21.14158333 70.79313889
Resting 21.14158333 70.79313889
Walking 21.14163889 70.79266667
Walking 21.14180556 70.79222222
Sleeping 21.14180556 70.79222222"
dat <- read.table(text = txt, header = TRUE)
一个选项是使用 ACTIVITY
变量作为索引来索引长度为 nlevels(ACTIVITY)
的颜色向量。
cols <- c("red","green","blue","orange")
plot(LAT ~ LONG, data = dat, col = cols[dat$ACTIVITY], pch = 19)
legend("topleft", legend = levels(dat$ACTIVITY), col = cols, pch = 19, bty = "n")
这会产生
要了解其工作原理,cols
已扩展为
> cols[dat$ACTIVITY]
[2] "green" "red" "green" "orange" "orange" "blue"
因为 ACTIVITY
是一个因子,但以数字形式存储为 1,2,...,n。
还有其他更高级别的解决方案,因此请考虑使用 ggplot2 包来简单地创建相同的绘图。
library("ggplot2")
plt <- ggplot(dat, aes(x = LONG, y = LAT, colour = ACTIVITY)) +
geom_point()
plt
产生