使用ggplot2(或其他)绘制两个变量

时间:2017-12-12 19:07:02

标签: r ggplot2 visualization

我有一个名为fruits_by_number的数据集,如下所示:

category   Number
Apple     4
Banana    5 
Orange    2
Pear      0

我想制作一个图表,在x轴上有条形符号表示水果类别,在y轴上有条形图作为高度。

我试过这个:

qplot(x = category , y = number, data = fruits_by_number, geom = "dot")

我的第一个问题是:如何代替"dot"我要求酒吧?

我的第二个问题是:即使我得到一个酒吧,因为在(实际)数据集中,水果名称大约为30,在x轴图例的下方,我得到了一个大麻烦。

我看到了这个:

qplot(data = movies_df,Runtime,fill = Genre,bins = 30)

this website上有这张图片:

this image

这与我想要的东西很接近。

我尝试将fill替换为dodge,但它不起作用。

你能帮我看看如何制作一个图表,水果类别将按颜色排列在右边(如图中所示),然后我会有颜色非高度重叠的条形高度等于数字吗?

PS1:如果我遵循这个建议:

p <- ggplot(data = trans_units_by_subject, aes(x = category, y = sumUnits_t, fill = category))
p + geom_bar(stat = "identity")

我仍然在x轴下面得到如下描述:enter image description here

3 个答案:

答案 0 :(得分:3)

我建议您使用ggplot()而不是qplot()。我相信它更易于管理,你可以通过情节选项更好地发挥。尝试这样的事情:

p <- ggplot(data = fruits_by_number, aes(x = category, y = Number, fill = category))
p + geom_bar(stat = "identity")

这将生成一个条形图,其中X轴将是水果类别,Y轴将是数字,您将为图中的每个水果填充颜色,包括其图例。我必须告诉你,在这种图形中使用颜色填充(不包括任何美学功能)是多余的,因为所有的水果都会在X轴上有标签。

另外,当你有两个因素和每个因素有几个级别时,你会使用“闪避”。例如,您的数据框中有一个额外因子“年龄”:Apple(新/旧),梨(新/旧)。所以你可以使用这样的东西:

p <- ggplot(data = fruits_by_number, aes(x = category, y = Number, fill = Age))
p + geom_bar(stat = "identity", position = "dodge")

生成的绘图将只有两种颜色的因子Age(New / Old),并且条形将被分开。在您放置的示例中,默认选项是position =“stack”,因此您将有堆叠条。

如果您仍想使用颜色且没有x轴标签,请使用以下内容:

p <- ggplot(data = fruits_by_number, aes(x = category, y = Number, fill = category))
p <- p + geom_bar(stat = "identity") 
p <- p + theme(axis.text.x = element_blank())
p

尝试不同的调色板

查看此页:

http://ggplot2.tidyverse.org/reference/geom_bar.html http://ggplot2.tidyverse.org/reference/theme.html

答案 1 :(得分:2)

我建议将你的情节侧身调整以容纳30个类别。使用上面的数据,

require(ggplot2)

ggplot(fruits_by_number) + 
  geom_bar(aes(x = category, 
               y = Number, 
               fill = category), 
           stat = "identity") + 
  coord_flip()

上面的fill为条形添加颜色(删除它以使它们颜色相同),数据是,

fruits_by_number <- 
read.table(text='
category   Number
Apple     4
Banana    5 
Orange    2
Pear      0', 
header=T)

答案 2 :(得分:1)

以下是使用内置数据集的可能解决方案:

mtcars %>%
mutate(CARS = factor(1:32)) %>%
ggplot(aes(CARS,mpg, fill = CARS)) +
geom_bar(stat = "identity")

enter image description here