R - ggplot2直方图条件填充颜色 [英] R - ggplot2 histogram conditional fill color
问题描述
我想制作一个直方图,其中填充颜色根据bin的低端变化。我不想) ),但不成功。
ggplot(cust,aes(x = cust_rev))+
geom_histogram black,fill =light blue,binwidth = 1/3)+
geom_histogram(data = subset(cust,cust_rev> 100000),
color =black ,binwidth = 1/3)+
scale_x_log10(labels = comma,breaks = powers(10,8))+
scale_y_continuous(labels = comma)+
xlab ))+ ylab(客户数)+
ggtitle(客户价值分布)
#data.frame错误(x = c(45291.1377418786,52770.7004919648,15748.975193128,
#:参数表示不同的行数:10000,3568
最简单的方法是使用条件添加另一列,并更新 aes
cust $ high_rev< - as.factor((cust [,2]> 100000) * 1)
ggplot(cust,aes(cust_rev,fill = high_rev))+
geom_histogram(color =black,binwidth = 1/3)+
scale_x_log10 label = comma,breaks = powers(10,8))+
scale_y_continuous(labels = comma)+
xlab(Customer Revenue)+ ylab ggtitle(客户价值分布)
如果你的心设置在某些特定的颜色,你可以使用 scale_fill_manual
函数。下面是一些有趣的鲜艳颜色的例子。
ggplot(cust,aes(cust_rev,fill = high_rev))+
geom_histogram(color =black,binwidth = 1/3)+
scale_x_log10(labels = comma,breaks = powers(10,8))+
scale_y_continuous(labels = comma)+
scale_fill_manual(values = c(green,purple))+
xlab(客户收入)+ ylab(客户数)+
ggtitle )
I would like to make a histogram where the fill color changes depending on the low end of the bin. I do not want a manual fill. This answer seems promising, but I could not transition it successfully to a histogram and two-value (not gradient) color scheme. I believe the solution may be some ifelse
logic within geom_histogram(fill= )
but I don't know how to access the bin starting value.
For example, in the below histogram, I would like to color revenue bins over $100,000 red to show the high-revenue customers.
library(ggplot2)
library(scales)
n <- 10000
cust <- data.frame(cust_id=1:n,cust_rev <- rexp(n,.00001))
# I want to use a log scale for my tick marks and bin breaks
powers <- function(base,exp) sapply(1:exp, function(exp) base^exp )
ggplot(cust, aes(cust_rev)) +
geom_histogram(color="black",fill="light blue", binwidth=1/3) +
scale_x_log10(labels=comma, breaks=powers(10,8)) +
scale_y_continuous(labels=comma) +
xlab("Customer Revenue") + ylab("Number of Customers") +
ggtitle("Distribution of Customer Value")
Also, I attempted a workaround with a second geom_histogram(), but was unsuccessful.
ggplot(cust, aes(x=cust_rev)) +
geom_histogram(color="black",fill="light blue", binwidth=1/3) +
geom_histogram(data=subset(cust,cust_rev>100000),
color="black",fill="red", binwidth=1/3) +
scale_x_log10(labels=comma, breaks=powers(10,8)) +
scale_y_continuous(labels=comma) +
xlab("Customer Revenue ($)") + ylab("Number of Customers") +
ggtitle("Distribution of Customer Value")
# Error in data.frame(x = c(45291.1377418786, 52770.7004919648, 15748.975193128,
# : arguments imply differing number of rows: 10000, 3568
Assistance most appreciated!
It would be easiest to just add another column with the condition and update the aes
to include the fill group.
cust$high_rev <- as.factor((cust[,2]>100000)*1)
ggplot(cust, aes(cust_rev, fill=high_rev)) +
geom_histogram(color="black", binwidth=1/3) +
scale_x_log10(labels=comma, breaks=powers(10,8)) +
scale_y_continuous(labels=comma) +
xlab("Customer Revenue") + ylab("Number of Customers") +
ggtitle("Distribution of Customer Value")
If you have your heart set on some specific colors you can use the scale_fill_manual
function. Here is an example with some fun bright colors.
ggplot(cust, aes(cust_rev, fill=high_rev)) +
geom_histogram(color="black", binwidth=1/3) +
scale_x_log10(labels=comma, breaks=powers(10,8)) +
scale_y_continuous(labels=comma) +
scale_fill_manual(values = c("green", "purple")) +
xlab("Customer Revenue") + ylab("Number of Customers") +
ggtitle("Distribution of Customer Value")
这篇关于R - ggplot2直方图条件填充颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!