全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
20453 4
2015-10-28
悬赏 1 个论坛币 未解决
代码如下:
library(ggplot2)


raw_data <- t(matrix(c(
  31, 35,        86,        45,        106,        149,
  35, 33,        88,        42,        101,        144,
  28, 33,        78,        28,        107,        151,
  34, 32,        96,        39,        113,        170,
  31, 30,        70,        52,        100,        129,
  50, 37,        94,        28,        108,        163,
  36, 38,        82,        42,        109,        158,
  35, 29,        81,        38,        102,  146,
  35, 37,        86,        42,        105,        149
),6,9))

pos_max <- rep(0,9)

for (i in 1:9){
  pos_max[i]=max(raw_data[i,1:6])
}

sre <- sort(pos_max, index.return=TRUE)

sort_index <- sre$ix

type_name <- c('SO2','C0','N02','03_8h','PM10','PM2.5')

position <- c('奥体中心','草场门','迈皋桥','仙林大学城','浦口','瑞金路','山西路','玄武湖','中华门')

data <- rep(0,6*9)
type <- rep("",6*9)
pos <- rep("",6*9)

for(i in 1:9){
  for(j in 1:6){
    index <- (i-1)*6+j
    data[index] <- raw_data[i,j]
    type[index] <- type_name[j]
    pos[index] <- position[i]
  }
}

data_all <-  data.frame(
  data,
  type,
  pos
)

gp <- ggplot(data=data_all, aes(x=reorder(data_all$pos, data_all$data, max), y=data_all$data, fill=data_all$type)) + geom_bar(stat="identity")
for(i in 1:9){
  ik <- sort_index[i]
  for(j in 1:6){
    gp <- gp + annotate("text", x=i, y=sum(raw_data[ik,1:j])-raw_data[ik,j]/2, label=as.character(raw_data[ik,j]))
  }
}
gp

该代码出图,我想让它的y轴按照reorder(data_all$type, data_all$data, max)的顺序显示,请问代码应该如何调整?在不改动data.frame结构的前提下。


QQ图片20151028233358.png

原图尺寸 21.96 KB

代码生成图片

代码生成图片

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-10-28 23:37:42
library(ggplot2)


raw_data <- t(matrix(c(
  31, 35,        86,        45,        106,        149,
  35, 33,        88,        42,        101,        144,
  28, 33,        78,        28,        107,        151,
  34, 32,        96,        39,        113,        170,
  31, 30,        70,        52,        100,        129,
  50, 37,        94,        28,        108,        163,
  36, 38,        82,        42,        109,        158,
  35, 29,        81,        38,        102,  146,
  35, 37,        86,        42,        105,        149
),6,9))

pos_max <- rep(0,9)

for (i in 1:9){
  pos_max=max(raw_data[i,1:6])
}

sre <- sort(pos_max, index.return=TRUE)

sort_index <- sre$ix

type_name <- c('SO2','C0','N02','03_8h','PM10','PM2.5')

position <- c('奥体中心','草场门','迈皋桥','仙林大学城','浦口','瑞金路','山西路','玄武湖','中华门')

data <- rep(0,6*9)
type <- rep("",6*9)
pos <- rep("",6*9)

for(i in 1:9){
  for(j in 1:6){
    index <- (i-1)*6+j
    data[index] <- raw_data[i,j]
    type[index] <- type_name[j]
    pos[index] <- position
  }
}

data_all <-  data.frame(
  data,
  type,
  pos
)

gp <- ggplot(data=data_all, aes(x=reorder(data_all$pos, data_all$data, max), y=data_all$data, fill=data_all$type)) + geom_bar(stat="identity")
for(i in 1:9){
  ik <- sort_index
  for(j in 1:6){
    gp <- gp + annotate("text", x=i, y=sum(raw_data[ik,1:j])-raw_data[ik,j]/2, label=as.character(raw_data[ik,j]))
  }
}

gp


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-10-28 23:41:13
代码有问题,重新贴了下。请教各位如何能让各个点的顺序按照x=reorder(data_all$type, data_all$data, max)的顺序来绘图?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-11-6 14:05:00
dabap 发表于 2015-10-28 23:41
代码有问题,重新贴了下。请教各位如何能让各个点的顺序按照x=reorder(data_all$type, data_all$data, max) ...
你解决排序的问题了吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-11-7 17:04:26
代码中黑色的字体是干嘛的,很乱
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群