【问题标题】:R ggplot2: Classify continuous data in discrete classes in tiled graphR ggplot2:在平铺图中对离散类中的连续数据进行分类
【发布时间】:2015-12-18 18:07:17
【问题描述】:

我有一个填充的 ggplot 等高线图,在 100x100 网格上描绘了连续的 R 平方值。默认情况下,图例以类似梯度的连续方式描述值,这是由于数据的连续性造成的。

然而,我想按类别对数据进行分类和可视化,每个类别涵盖 0.05 R 平方值的范围(即类别 1 = 0.00-0.05,类别 2 = 0.05-0.10 等)。我尝试了几个命令,例如 scale_fill_brewer 和 scale_fill_gradient2。后者实际上确实生成了某种离散类,但类标签描述了中断值而不是类范围。 Scale_fill_brewer 返回将连续数据强制转换为离散比例的错误,这是有道理的,尽管我不知道如何解决它。

为了让事情变得更复杂,我更喜欢使用多样化的调色板来更容易地识别特定的类。此外,我有许多具有不同最大 R 平方值的不同等高线图。所以理想情况下,代码是通用的,也可以很容易地用于其他绘图。

到目前为止,这是我拥有的代码:

library(scales)
library(ggplot2)
p1 <- ggplot(res, aes(x=Var1, y=Var2, fill=R2)) +
  geom_tile
p1 +
 theme(axis.text.x=element_text(angle=+90)) +
 geom_vline(xintercept=c(seq(from = 1, to = 101, by = 5)),color="#8C8C8C") +
 geom_hline(yintercept=c(seq(from = 1, to = 101, by = 5)),color="#8C8C8C") +
 labs(list(title = "Contour plot of R^2 values for all possible correlations between Simple Ratio indices & Nitrogen Content", x = "Wavelength 1 (nm)", y = "Wavelength 2 (nm)")) +
 scale_x_discrete(breaks = c("b450","b475","b500","b525","b550","b575","b600","b625","b650","b675","b700","b725","b750","b775","b800","b825","b850","b875","b900","b925","b950")) +
 scale_y_discrete(breaks = c("b450","b475","b500","b525","b550","b575","b600","b625","b650","b675","b700","b725","b750","b775","b800","b825","b850","b875","b900","b925","b950")) +
 scale_fill_continuous(breaks = c(seq(from = 0, to = 0.7, by = 0.05)), low = "black", high = "green")

此时的输出如下所示:

【问题讨论】:

  • 是否也可以以通用方式应用 cut 函数,即允许为我生成的每个等高线图调用它,并自动调整每个特定的 R 平方值范围情节?

标签: r ggplot2 classification contour fill


【解决方案1】:

您可能会使用什么 scale_fill_gradientn() 未经测试,因为您未能提供可重现的示例

library(scales)
library(ggplot2)
ggplot(res, aes(x=Var1, y=Var2, fill=R2)) +
  geom_tile() + 
  scale_fill_gradientn(
      colours = terrain.colors(15), 
      breaks = seq(from = 0, to = 0.7, by = 0.05)
  )

【讨论】:

  • 谢谢,蒂埃里!代码就像一个魅力。尽管数据保持连续而不是离散,但彩虹调色板毕竟显着增强了“热点”区域的识别。还有一项任务我无法完成,即推导出具有最高(R 平方)值的图块的值和索引 (x,y)。此外,我想检索一个列表,其值和索引为所有具有最高值的图块的 5%,但第一步已经证明现在已经足够复杂了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
相关资源
最近更新 更多