如何根据代表数据的曲线的高度通过渐变对绘图上的数据进行着色?

Posted

技术标签:

【中文标题】如何根据代表数据的曲线的高度通过渐变对绘图上的数据进行着色?【英文标题】:How to color data on the plot through the gradient depending on how high the curve representing the data is? 【发布时间】:2020-11-20 09:30:04 【问题描述】:

我有一个数据框格式的数据(34 个变量的 140 个观察值)。

数据示例:

   Time Variable Value
    0.3.   2.      0.001
    2.     2.      0.006
    5.     2.      0.007
    7.5.   2       0.01 
   ..........................
    0.3.   3.      0.003
    2.     3.      0.005
    5.     3.      0.009
    7.5.   3       0.02

如果我通过命令ggplot(data = melted, aes(x=Time, y=value, color=variable)) + geom_line() 绘制它,它看起来像这样。

如何为这些线条着色,例如,最高的线条是紫色,而最低的线条会通过恒定的渐变(如彩虹)变成红色?如何使用任何其他托盘并显示从最高到最低曲线的渐变?如何把漂亮的传说放在情节上?

非常感谢!

【问题讨论】:

请尝试为您的问题提供一个最小的工作示例,并专注于一个特定的问题。见minimal reproducible example 【参考方案1】:

示例数据集如下所示:

Time <- 1:100

df <- rbind(data.frame(Time = Time,variable = 1,value = as.numeric(Time>20)),
            data.frame(Time = Time,variable = 3,value = as.numeric(Time>20)*2),
            data.frame(Time = Time,variable = 2,value = as.numeric(Time>20)*3))

看起来是这样的:

然后创建一个变量 maxvalue 来给出每个组的最大值,并使用连续渐变着色:

library(dplyr)
library(ggplot2)
df %>%
  group_by(variable) %>%
  mutate(maxval = max(value,na.rm = T))%>%
  ggplot(., aes(x=Time, y=value, color=maxval,group = maxval)) + 
  geom_line()+
  scale_color_viridis_c(option = "C")+
  theme_bw()

关于渐变的各种选项,请参阅https://ggplot2.tidyverse.org/reference/scale_gradient.html

【讨论】:

谢谢,但它不起作用。它说错误:geom_line 需要以下缺失的美学:x 和 y 你能解释一下这段代码的作用吗? 我需要一个示例数据集,您应该在问题中提供它。它可以是模仿真实数据的简单假数据 我提供了这个例子。请让我知道这是否足够,或者我应该做其他事情。谢谢! 查看我的编辑。您提供的示例不是一个正确的示例:我无法使用它来重现与您的相似的图表,因此我无法使用它来回答您的问题。我确实在我的回答中提供了一个示例数据集,请尝试为您未来的问题做类似的事情

以上是关于如何根据代表数据的曲线的高度通过渐变对绘图上的数据进行着色?的主要内容,如果未能解决你的问题,请参考以下文章

优化 UITableViewCell 上的绘图

用Matplotlib绘制渐变的彩色曲线

用Matplotlib绘制渐变的彩色曲线

用Matplotlib绘制渐变的彩色曲线

excel在模拟曲线时的R值是如何计算的,代表啥意思?

matlab绘图