R - ggplot2,几个问题,多个相关图

2024-04-02

我在堆栈上问的第一个问题,我对 R 还很陌生,所以请原谅任何冒犯礼仪的行为。我正在使用 ggplot2 绘制 2 个堆积面积图。数据是来自 Oracle 数据库的等待事件。这是一个性能调整图表。我有几个问题。

  1. 下面的两个图没有正确排列,很可能是由于图例中文本的宽度所致。有一个简单的解决方案吗?
  2. 这两个图确实相关,上面的图显示了“CPU”和“用户 I/O”等等待类,下面的图显示了这些类中特定等待事件的详细信息。我希望底部的颜色基于等待类,与顶部相同,只是特定事件的颜色深浅不同。如果您不喜欢这个概念,我也愿意接受其他选择。有很多信息需要传达。我将事件数量限制为 12 个,以适应配色方案,但如果可以的话,还有更多。
  3. 我想在 X 上显示更精细的时间刻度,或者甚至将非工作时间(下午 6 点至上午 8 点)涂成灰色,以传达更好的一天中的时间感。
  4. 有没有人们常用的超过12种颜色的配色方案?通过布鲁尔查看,这是最大值。我知道我可以创建自己的,只是好奇。

这是我的代码:

library(ggplot2)
library(RColorBrewer)
library(gridExtra)

DF_AAS <- read.csv('http://dl.dropbox.com/u/4131944/Permanent/R-Questions/AAS-Plot/DATA_FRAME_AAS.csv', head=TRUE,sep=",",stringsAsFactors=TRUE)
DF_AAS <- within(DF_AAS, snap_time <- as.POSIXlt(snap_times2,
                                          format = "%Y-%m-%d %H:%M:%S"))
DF_AAS[c('snap_times2')] <- NULL

DF_AAS_EVENT <- read.csv('http://dl.dropbox.com/u/4131944/Permanent/R-Questions/AAS-Plot/DF_AAS_EVENT.csv', head=TRUE,sep=",",stringsAsFactors=TRUE)
DF_AAS_EVENT <- within(DF_AAS_EVENT, snap_time <- as.POSIXlt(snap_times2,
                                                 format = "%Y-%m-%d %H:%M:%S"))
DF_AAS_EVENT[c('snap_times2')] <- NULL

plot_aas_wait_class <- ggplot()+
  geom_area(data=DF_AAS, aes(x = snap_time, y = aas,
                                    fill = wait_class),stat = "identity", position = "stack",alpha=.9)+
                                      scale_fill_brewer(palette="Paired",breaks = sort(levels(DF_AAS$wait_class)))+
                                      scale_y_continuous(breaks = seq(0, max(DF_AAS$aas)+(max(DF_AAS$aas)*.2), 5))+
                                      opts(panel.background = theme_rect(colour = "#aaaaaa"))


plot_aas_event <- ggplot()+
  geom_area(data=DF_AAS_EVENT, aes(x = snap_time, y = aas,
                                   fill = wait_class_event),stat = "identity", position = "stack")+
                                     scale_fill_brewer(palette="Paired",breaks = DF_AAS_EVENT$wait_class_event)+
                                     scale_y_continuous(breaks = seq(0, max(DF_AAS_EVENT$aas)+(max(DF_AAS_EVENT$aas)*.2), 5))+
                                     opts( panel.background = theme_rect(colour = "#aaaaaa"))

grid.arrange(arrangeGrob(plot_aas_wait_class, plot_aas_event),heights=c(1/2,1/2),ncol=1)

对齐问题最简单的解决方案可能是移动图例:

library(scales)
plot_aas_wait_class <- ggplot()+
  geom_area(data=DF_AAS, aes(x = snap_time, y = aas,fill = wait_class),stat = "identity", position = "stack",alpha=.9)+
  scale_fill_brewer(palette="Paired",breaks = sort(levels(DF_AAS$wait_class)))+
  scale_y_continuous(breaks = seq(0, max(DF_AAS$aas)+(max(DF_AAS$aas)*.2), 5))+
  opts(panel.background = theme_rect(colour = "#aaaaaa")) +  
  opts(legend.position = "bottom",legend.direction = "horizontal") + 
  guides(fill = guide_legend(nrow = 2))

plot_aas_event <- ggplot()+
  geom_area(data=DF_AAS_EVENT, aes(x = snap_time, y = aas,fill = wait_class_event),stat = "identity", position = "stack")+
  scale_fill_brewer(palette="Paired",breaks = DF_AAS_EVENT$wait_class_event)+
  scale_y_continuous(breaks = seq(0, max(DF_AAS_EVENT$aas)+(max(DF_AAS_EVENT$aas)*.2), 5))+
  opts( panel.background = theme_rect(colour = "#aaaaaa")) +  
  opts(legend.position = "bottom",legend.direction = "horizontal") + 
  guides(fill = guide_legend(ncol = 2))


grid.arrange(arrangeGrob(plot_aas_wait_class, plot_aas_event),heights=c(1/2,1/2),ncol=1)

为了增加 x 轴上的分辨率,我会使用类似的东西:

+ scale_x_datetime(breaks = date_breaks("2 hours"))

或者任何你想要的中断。

对特定区域进行着色通常是通过geom_rect和设置alpha = 0.25或者其他的东西。这需要使用矩形的起点和终点创建一个单独的数据框(使用Inf and -Infy 坐标)传递给geom_rect.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R - ggplot2,几个问题,多个相关图 的相关文章

随机推荐

  • NgxMatDatetimePicker 不可分配给 MatDatepickerBase 类型

    今天我使用创建了一个新的 Angular 项目角度 11 0 0 然后我安装了 angular material components datetime picker这是我的 package json 文件中读取的内容的一部分 angula
  • 如何传递对象参数来获取 Web api 中的方法?

    如何将对象参数传递给 get 方法 我搜索了很多 例如如何将参数传递给asp net web api get方法 https stackoverflow com questions 45766147 how to pass paramete
  • Insert 语句中的记录数 (Oracle)

    我想报告 Oracle 插入语句中插入的记录数 我是从语句插入的 因此我可以运行两次选择并进行计数 但我宁愿将其全部保留在一个语句中 有办法吗 在 PL SQL 中执行 INSERTSQL ROWCOUNT给出插入的行数 在 C 中执行 I
  • 使用 Angular 材质按列过滤谓词表

    我想使用谓词过滤器按列过滤我的 mat table 结果 我已经使用了一个简单的过滤器 但它过滤了所有列中的所有数据 我搜索类似的主题 但我不知道如何使用它 我尝试对所有列重复我的代码 但不起作用 请参阅下面的代码
  • 如何在 iPhone 通讯录中搜索特定电话号码?

    我正在开发一个使用 bonjour 连接到另一部 iPhone 的应用程序 它的功能之一是当我连接到其他设备时 它会自动检查我是否有其他人的电话号码 所以我的问题是如何检查我的地址簿中其他设备提供的电话号码 这是从我的地址簿方法之一中提取的
  • 如何以编程方式获取 Linux 中设备/分区的 uuid?

    我对 Linux 编程非常陌生 我的问题是 有没有办法以编程方式读取 Linux 中设备或分区的 UUID 是否有用于用户空间应用程序的 C C API 我发现了一些命令sudo vol id uuid dev sda1 sudo blki
  • Windows Docker mongo 容器不适用于卷挂载

    我有以下 docker 命令 docker run v c data data db mongo 我从 docker mongo 收到以下错误响应 MongoDB starting pid 1 port 27017 dbpath data
  • iOS 谷歌地图更改默认标记拖动行为

    我正在研究 Google 地图 api 目前 当我们尝试拖动标记时 我们必须按住几秒钟 然后 mapView 上升几个点 然后我们才能拖动标记 我想改变这种行为 我可以覆盖minimumPressDuration of UILongPres
  • 无法捕获视图层内的蒙版

    因此 我使用以下代码将图像蒙版应用到 UIView 层 CALayer maskLayer CALayer layer UIImage maskImage self image image maskLayer contents id mas
  • 进行 Maven 构建时 Jackson 依赖版本被覆盖

    我有一个完美运行的项目 我能够成功构建和部署 昨天 作为开发的一部分 我必须在我的项目中为 Jackson jar 添加以下 Maven 依赖项 然后mvn clean install开始失败
  • 如果我们有 GIL,为什么我们还需要线程锁?

    我相信这是一个愚蠢的问题 但我仍然找不到它 其实最好分成两个问题 1 我是否正确 我们可以有很多线程 但由于 GIL 在某一时刻只有一个线程正在执行 2 如果是这样 为什么我们还需要锁 我们使用锁来避免两个线程尝试读 写某个共享对象的情况
  • Pandas 内部合并/连接返回所有行

    我试图根据两个数据帧中存在的列来合并两个数据帧 仅保留两个数据集的交集 期望的结果是 foo bar foobar x y z x j i x y z j i a 1 2 a 9 0 a 1 2 9 0 b 3 4 b 9 0 b 3 4
  • Android 语音识别服务在 <= Ice Cream Sandwich 上速度慢得多

    我有一个正在实现 RecognitionListener 的服务 如下所示 Android 语音识别作为 Android 4 1 和 4 2 上的服务 https stackoverflow com questions 14940657 a
  • 静音时的 CSCore 环回录音

    我在用着CSCore WasapiLoopbackCapture录制系统声音 但当系统没有声音时 根本不录音 例如 在播放音乐并录制音乐时 输出文件的持续时间小于曲目的持续时间 我希望它即使在系统中没有声音时也能继续录制 但我没有找到任何属
  • DisplayFormat 数据注释不起作用

    我的模型类中有以下数据注释 Required ErrorMessage Required DisplayFormat ApplyFormatInEditMode true DataFormatString 0 MM dd yyyy publ
  • Safari 中的 css 颜色渲染不同

    我正在尝试为我的网络应用程序选择颜色 但意识到与 Firefox 或 Chrome 相比 Safari 呈现样式表的方式存在巨大差异 屏幕截图中的红色应该是 ff3366 但 safari 似乎选择渲染 ff0036 我不知道为什么我找不到
  • 在 Javascript 中处理多个按键事件的最佳方法是什么?

    游戏中按空格键会进行角色射击 出现确认框时按空格键会使该框消失 高分形式按空格键会在输入框中添加一个空格 在此示例中 同一键有多个事件 但一次仅触发一个事件 是否有通用 或特定于Javascript 方法或编程方式将事件添加到某个键 以便它
  • 将包含对象的数组转换为不带 foreach 的关联数组

    我有一个类似的数组 json decode 的结果 array 2 0 gt object stdClass 1 3 key gt string 6 sample startYear gt string 4 2000 endYear gt
  • Highchart 动态创建 - 无法正确渲染

    我正在使用动态函数制作高图绘图 在调用函数后它根本不会渲染 稍后如果我调整窗口大小 它会渲染数据吗 有什么具体原因吗 我的功能 var chart document ready function function randomData le
  • R - ggplot2,几个问题,多个相关图

    我在堆栈上问的第一个问题 我对 R 还很陌生 所以请原谅任何冒犯礼仪的行为 我正在使用 ggplot2 绘制 2 个堆积面积图 数据是来自 Oracle 数据库的等待事件 这是一个性能调整图表 我有几个问题 下面的两个图没有正确排列 很可能