使用R中的abline函数绘制不同颜色的直方图

Histogram with different colours using the abline function in R

我想绘制一个具有不同颜色和图例的直方图。

假设数据如下:

df1<- rnorm(300,60,5)

我使用以下代码使用 abline 函数获取直方图和线条:

df1<-data.frame(df1)
attach(df1)
hist(M,at=seq(0,100, 2))
abline(v=80, col="blue")
abline(v=77, col="red")
abline(v=71, col="red")
abline(v=68, col="blue")
abline(v=63, col="blue")
abline(v=58, col="blue")
abline(v=54, col="blue")
abline(v=51, col="blue")
abline(v=457, col="blue")

现在我想得到下面的情节。我想删除线,但我做不到。所以我不需要台词。

这是使用 ggplot2dplyrtidyr 的一种方法。

首先您需要设置颜色。我用 mutatecase_when 来做到这一点。对于绘图本身,请务必记住,如果直方图 bin 未对齐,您可能会在同一条柱上获得不同的颜色。为避免这种情况,您可以使用 binwidth=1.

library(ggplot2)
library(dplyr)
library(tidyr)

df1 <- data.frame(data1=rnorm(300,60,5))
df1 <- df1 %>%
  mutate(color_name=case_when(data1<60              ~ "red",
                              data1>=60 & data1 <63 ~ "blue",
                              TRUE                  ~ "cyan")) 

ggplot(df1,aes(x=data1, fill=color_name)) +
  geom_histogram(binwidth = 1, boundary = 0, position="dodge") +
  scale_fill_identity(guide = "legend")

在评论中追加要求

使用 case_when 四种颜色:

df1 <- data.frame(data1=rnorm(300,60,5))
df1 <- df1 %>%
  mutate(color_name=case_when(data1<60              ~ "red",
                              data1>=60 & data1 <63 ~ "blue",
                              data1>=63 & data1 <65 ~ "orange",
                              TRUE                  ~ "cyan")) 
ggplot(df1,aes(x=data1, fill=color_name)) +
  geom_histogram(binwidth = 1, boundary = 0, position="dodge") +
  scale_fill_identity(guide = "legend")