如何根据元素ggplot r的值赋予直方图特定颜色的条形

时间:2019-03-17 19:14:00

标签: r ggplot2 histogram

我有一个由国家/地区的汽车模型组成的数据框,其关联值如下所示

Car      Country      Value
Audi A6  US           23
Audi A6  UK           12
Audi A6  DE           19
BMW X5   UK           8
BMW X5   DE           5
etc

现在,我想制作“值”列的直方图,并且我还想要指示条的颜色,例如指示该栏中是否存在大量Audi A6型号。

我知道如何使用ggplot制作直方图:

qplot(beta_0jk[data$Value], 
  geom="histogram", fill=I("lightblue"))

但是有人知道我如何让颜色取决于此数据框中的“汽车”或“国家/地区”列吗?还是有人知道与直方图不同的可视化方式?

2 个答案:

答案 0 :(得分:1)

这是您要找的东西吗?为了使所有宽度相同的条形图,我必须用额外的一行填充data,因为在Country == 'US'时没有Car == 'BMW X5'。数据准备管道%>%的灵感来自this answer

library(tidyverse)
library(ggplot2)


data %>% 
  spread(key = Car, value = Value, fill = NA) %>% 
  gather(key = Car, value = Value, -Country) %>% 
  ggplot(aes(x = Car, y = Value, fill = Country)) +
  geom_col(position = position_dodge())

数据。

data <- read.table(text = "
Car      Country      Value
'Audi A6'  US           23
'Audi A6'  UK           12
'Audi A6'  DE           19
'BMW X5'   UK           8
'BMW X5'   DE           5
", header = TRUE)

答案 1 :(得分:1)

最重要的是,我会强烈建议您查找R的备忘单,这些备忘单非常方便放置here

我个人习惯于编写ggplot函数的完整版本,因为当您对这个库更加熟悉时,它会变得更加清晰。

问题
首先,您需要了解直方图的概念,直方图在您没有价值并且想要计算某些特征的数量或密度时起作用。在您的情况下,您只需要简单的点来表示数据框中已经具有的值。 了解ggplot很容易。

美学
使用ggplot()函数时,它需要一些基本参数。

ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame())  

您提供的数据只是整个beta_0jk数据框。映射对应于您通过列定义的元素,因此您需要指定它们:

  

x -根据您的值分组的内容,我想说的是您希望“ Car”在此处指定型号
   y -应该清楚-“ Value”是您要测量的变量,因此您选择了它来表示y轴值
   col -还是GROUP,但其工作方式与x不同-为您指定的每个组使用不同的颜色。要使用它,必须确保您的列是因子

实施

ggplot2::ggplot(beta_0jk,ggplot2::aes(
  x = Car,
  y = Value,
  col = Country)
) + geom_jitter()

从这开始,并使用ggplot2备忘单可以使您获得理想的结果,因为说实话我不知道您想展示什么。我还建议查找 dplyr tidyr