我有一个由国家/地区的汽车模型组成的数据框,其关联值如下所示
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"))
但是有人知道我如何让颜色取决于此数据框中的“汽车”或“国家/地区”列吗?还是有人知道与直方图不同的可视化方式?
答案 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 库