如何使用ggplot2而不是R中的默认绘图绘制三个点线

时间:2013-12-01 06:31:50

标签: r ggplot2 points

我有三个矩阵,我想用ggplot2绘制图形。我有以下数据。

library(cluster)
require(ggplot2)
require(scales)
require(reshape2)

data(ruspini)
x <- as.matrix(ruspini[-1])


w <- matrix(W[4,])

df <- melt(data.frame(max_Wmk, min_Wmk, w, my_time = 1:10), id.var = 'my_time')

ggplot(df, aes(colour = variable, x = my_time, y = value)) +
  geom_point(size = 3) +
  geom_line() +
  scale_y_continuous(labels = comma) +
  theme_minimal()

我想使用漂亮的ggplot2将这三个图添加到一个图中。 而且,我想让不同值的点有不同的颜色。

1 个答案:

答案 0 :(得分:3)

我不太确定你在追求什么,这是一个猜测

您的数据......

max <- c(175523.9, 33026.97, 21823.36, 12607.78, 9577.648, 9474.148, 4553.296, 3876.221, 2646.405, 2295.504)
min <- c(175523.9, 33026.97, 13098.45, 5246.146, 3251.847, 2282.869, 1695.64, 1204.969, 852.1595, 653.7845)
w <- c(175523.947, 33026.971, 21823.364, 5246.146, 3354.839, 2767.610, 2748.689,   1593.822, 1101.469, 1850.013)

对基础绘图代码稍作修改,使其正常工作......

plot(1:10,max,type='b',xlab='Number',ylab='groups',col=3)
points(1:10,min,type='b', col=2)
points(1:10,w,type='b',col=1)

这是你的意思吗?

enter image description here

如果您想使用ggplot2重现此内容,可以执行以下操作...

# ggplot likes a long table, rather than a wide one, so reshape the data, and add the 'time' variable explicitly (ie. my_time = 1:10)
require(reshape2)
df <- melt(data.frame(max, min, w, my_time = 1:10), id.var = 'my_time')

# now plot, with some minor customisations...
require(ggplot2); require(scales)
ggplot(df, aes(colour = variable, x = my_time, y = value)) +
  geom_point(size = 3) +
  geom_line() +
  scale_y_continuous(labels = comma) +
  theme_minimal()

enter image description here

在编辑问题并更改示例数据后,

更新,这是适合新示例数据的编辑:

这是你的示例数据(这里有简化和速度提升的范围,但这是另一个问题):

library(cluster)
require(ggplot2)
require(scales)
require(reshape2)

data(ruspini)
x <- as.matrix(ruspini[-1])

wss <- NULL
W=matrix(data=NA,ncol=10,nrow=100)

for(j in 1:100){
  k=10  
  for(i in 1: k){
    wss[i]=kmeans(x,i)$tot.withinss    
  }
  W[j,]=as.matrix(wss)
}

max_Wmk <- matrix(data=NA, nrow=1,ncol=10)

for(i in 1:10){
  max_Wmk[,i]=max(W[,i],na.rm=TRUE)
}

min_Wmk <- matrix(data=NA, nrow=1,ncol=10)
for(i in 1:10){
  min_Wmk[,i]=min(W[,i],na.rm=TRUE)
}

w <- matrix(W[4,])

以下是将三个对象转换为向量所需的操作,以便您可以按预期创建数据框:

max_Wmk <- as.numeric(max_Wmk)
min_Wmk <- as.numeric(min_Wmk)
w <- as.numeric(w)

现在像以前一样重塑和策划......

df <- melt(data.frame(max_Wmk, min_Wmk, w, my_time = 1:10), id.var = 'my_time')

ggplot(df, aes(colour = variable, x = my_time, y = value)) +
  geom_point(size = 3) +
  geom_line() +
  scale_y_continuous(labels = comma) +
  theme_minimal()

这是结果:

enter image description here