按渐变给 geom_histogram 着色
Coloring a geom_histogram by gradient
我正在尝试绘制一个 geom_histogram,其中条形由渐变着色。
这就是我想要做的:
library(ggplot2)
set.seed(1)
df <- data.frame(id=paste("ID",1:1000,sep="."),val=rnorm(1000),stringsAsFactors=F)
ggplot(df,aes_string(x="val",y="..count..+1",fill="val"))+geom_histogram(binwidth=1,pad=TRUE)+scale_y_log10()+scale_fill_gradient2("val",low="darkblue",high="darkred")
但是得到:
知道如何通过定义的渐变为其着色吗?
不确定是否可以按 val
填充,因为直方图的每个条形代表一组点。
但是,您可以使用 cut
按分类箱进行填充。例如:
ggplot(df, aes(val, fill = cut(val, 100))) +
geom_histogram(show.legend = FALSE)
仅供参考。
如果我想要手动选择渐变的颜色,我的建议是:
数据:
library(ggplot2)
set.seed(1)
df <- data.frame(id=paste("ID",1:1000,sep="."),val=rnorm(1000),stringsAsFactors=F)
颜色:
bins <- 10
cols <- c("darkblue","darkred")
colGradient <- colorRampPalette(cols)
cut.cols <- colGradient(bins)
cuts <- cut(df$val,bins)
names(cuts) <- sapply(cuts,function(t) cut.cols[which(as.character(t) == levels(cuts))])
剧情:
ggplot(df,aes(val,fill=cut(val,bins))) +
geom_histogram(show.legend=FALSE) +
scale_color_manual(values=cut.cols,labels=levels(cuts)) +
scale_fill_manual(values=cut.cols,labels=levels(cuts))
不是手动分箱,另一种选择是通过映射 ..x..
(或 factor(..x..)
在离散比例的情况下)或 after_stat(x)
关于 fill
美学。
手动计算 bin 的一个问题是,我们最终得到每个 bin 的多个组,必须为其计算计数(即使计数在大多数情况下为零)并且堆叠在每个 bin 的顶部其他在直方图中。特别是,如果像 中所示那样向直方图中添加计数标签,就会出现问题,因为在这种情况下,每个 bin 都有多个标签。
library(ggplot2)
set.seed(1)
df <- data.frame(id = paste("ID", 1:1000, sep = "."), val = rnorm(1000), stringsAsFactors = F)
ggplot(df, aes(x = val, y = ..count.. + 1, fill = ..x..)) +
geom_histogram(binwidth = .1, pad = TRUE) +
scale_y_log10() +
scale_fill_gradient2(name = "val", low = "darkblue", high = "darkred")
#> Warning: Duplicated aesthetics after name standardisation: pad
我正在尝试绘制一个 geom_histogram,其中条形由渐变着色。
这就是我想要做的:
library(ggplot2)
set.seed(1)
df <- data.frame(id=paste("ID",1:1000,sep="."),val=rnorm(1000),stringsAsFactors=F)
ggplot(df,aes_string(x="val",y="..count..+1",fill="val"))+geom_histogram(binwidth=1,pad=TRUE)+scale_y_log10()+scale_fill_gradient2("val",low="darkblue",high="darkred")
但是得到:
知道如何通过定义的渐变为其着色吗?
不确定是否可以按 val
填充,因为直方图的每个条形代表一组点。
但是,您可以使用 cut
按分类箱进行填充。例如:
ggplot(df, aes(val, fill = cut(val, 100))) +
geom_histogram(show.legend = FALSE)
仅供参考。
如果我想要手动选择渐变的颜色,我的建议是:
数据:
library(ggplot2)
set.seed(1)
df <- data.frame(id=paste("ID",1:1000,sep="."),val=rnorm(1000),stringsAsFactors=F)
颜色:
bins <- 10
cols <- c("darkblue","darkred")
colGradient <- colorRampPalette(cols)
cut.cols <- colGradient(bins)
cuts <- cut(df$val,bins)
names(cuts) <- sapply(cuts,function(t) cut.cols[which(as.character(t) == levels(cuts))])
剧情:
ggplot(df,aes(val,fill=cut(val,bins))) +
geom_histogram(show.legend=FALSE) +
scale_color_manual(values=cut.cols,labels=levels(cuts)) +
scale_fill_manual(values=cut.cols,labels=levels(cuts))
不是手动分箱,另一种选择是通过映射 ..x..
(或 factor(..x..)
在离散比例的情况下)或 after_stat(x)
关于 fill
美学。
手动计算 bin 的一个问题是,我们最终得到每个 bin 的多个组,必须为其计算计数(即使计数在大多数情况下为零)并且堆叠在每个 bin 的顶部其他在直方图中。特别是,如果像
library(ggplot2)
set.seed(1)
df <- data.frame(id = paste("ID", 1:1000, sep = "."), val = rnorm(1000), stringsAsFactors = F)
ggplot(df, aes(x = val, y = ..count.. + 1, fill = ..x..)) +
geom_histogram(binwidth = .1, pad = TRUE) +
scale_y_log10() +
scale_fill_gradient2(name = "val", low = "darkblue", high = "darkred")
#> Warning: Duplicated aesthetics after name standardisation: pad