首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R数据中心的CPU利用率热图

R数据中心的CPU利用率热图
EN

Stack Overflow用户
提问于 2015-01-25 20:03:19
回答 1查看 323关注 0票数 0

我从数据中心的100台服务器上得到了数据。读数是具有3列Timehost nameCPU Utilization的时间的数据帧格式。读数是由监测系统每10分钟产生一次。我需要绘制一个CPU使用率的热图,在热图中使用time在X轴上,% of servers在Y轴上,CPU utilization范围。

例如:如果服务器总数为5。输入数据如下

代码语言:javascript
复制
Time            CPU Hostname
1/25/2015 10:15  19%    H1
1/25/2015 10:15  90%    H2
1/25/2015 10:15  90%    H3
1/25/2015 10:15  50%    H4
1/25/2015 10:15  25%    H5
1/25/2015 10:25  30%    H1
1/25/2015 10:25  85%    H2
1/25/2015 10:25  30%    H3
1/25/2015 10:25  21%    H4
1/25/2015 10:25  21%    H5

所需的输出是一个堆叠图,用于在热图中描述以下图形。

例如,在10:15中,2服务器处于80-100%利用率范围内,因此值为40%

代码语言:javascript
复制
Range   10:15   10:25
0-20    20%      0%
20-40   20%      80%
40-60   20%      0%
60-80   0%       0%
80-100  40%      20%

需要关于R中的函数的帮助来绘制这种热图。我尝试过使用xts,但我不清楚如何应用xts包的用例。

EN

回答 1

Stack Overflow用户

发布于 2015-01-25 20:55:47

你只需要:

将值放入您需要的组中查找%

  • cut group
  • expand
  • geom_tile

your heatmap

以下代码的许多组件都在许多SO帖子中:

代码语言:javascript
复制
library(dplyr)
library(ggplot2)
library(tidyr)
library(scales)

dat <- read.table(text="Time,CPU,Hostname
1/25/2015 10:15,19%,H1
1/25/2015 10:15,90%,H2
1/25/2015 10:15,90%,H3
1/25/2015 10:15,50%,H4
1/25/2015 10:15,25%,H5
1/25/2015 10:25,30%,H1
1/25/2015 10:25,85%,H2
1/25/2015 10:25,30%,H3
1/25/2015 10:25,21%,H4
1/25/2015 10:25,21%,H5", header=TRUE, sep=",", stringsAs=FALSE)


total_hosts <-length(unique(dat$Hostname))

dat %>%
  mutate(Time=as.POSIXct(Time, format="%m/%d/%Y %H:%M"),
         Day=format(Time, format="%Y-%m-%d"),
         HM=format(Time, format="%H:%M"),
         CPU=as.numeric(gsub("%", "", CPU)),
         `CPU Range`=as.character(cut(CPU, 
                                breaks=c(0,20,40,60,80,100), 
                                labels=c("0-20", "20-40", "40-60", 
                                         "60-80", "80-100")))) %>%
  group_by(Day, `CPU Range`, HM) %>%
  summarise(Pct=n()/total_hosts) %>%
  merge(expand(., `CPU Range`, HM, Day), all.y=TRUE) -> dat

gg <- ggplot(dat, aes(x=HM, y=`CPU Range`))
gg <- gg + geom_tile(aes(fill=Pct), color="#7f7f7f")
gg <- gg + scale_fill_distiller(palette="RdPu", na.value="white", 
                                label=percent, name="% Hosts")
gg <- gg + coord_equal()
gg <- gg + labs(x=NULL)
gg <- gg + theme_bw()
gg <- gg + theme(panel.border=element_blank())
gg <- gg + theme(panel.grid=element_blank())
gg

我将Day留在了数据框中,以防您想要/需要通过它进行facet_wrap或聚合。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28136152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档