r - 如何使用一个变量连续填充 ggplot2 条形图

标签 r ggplot2

我正在为我的数据 movies 使用库 ggplot2movies

请记住,我指的是 mpaa 评级和用户评级,这是两个不同的事物。如果您不想加载 ggplot2movies 库,这里是相关数据的示例:

> head(subset(movies[,c(5,17)], movies$mpaa!=""))
# A tibble: 6 x 2
  rating mpaa 
   <dbl> <chr>
1    5.3 R    
2    7.1 PG-13
3    7.2 PG-13
4    4.9 R    
5    4.8 PG-13
6    6.7 PG-13

我在这里制作了一个条形图,显示具有任何 mpaa 评级的电影的频率:

ggplot(data=subset(movies, movies$mpaa!=""), aes(mpaa)) +
  geom_bar()

enter image description here

现在我想根据 imdb 用户评分在条形图中填充颜色。我不想使用 factor(rating) 因为评级列中有大量不同的值。但是,当我尝试使用 Assigning continuous fill color to geom_bar 中的连续填充时我得到了相同的图表。

ggplot(data=subset(movies, movies$mpaa!=""), aes(mpaa, fill=rating)) +
  geom_bar()+ 
  scale_fill_continuous(low="blue", high="red")

我认为这与我的条形图基于单个变量的频率而不是具有计数列的数据框这一事实有关。我可以制作一个新的 mpaa 类别及其计数的数据框,但我更想知道如何使用原始 movies 数据集和单个 ggplot 来绘制此图。

编辑:使用 aes(mpaa, group = rating, fill = rating) 给出了一个几乎正确的图表,除了条形图和图例被交换了。 enter image description here

最佳答案

您可以通过以下方式反转图例:+ guides(fill=guide_colourbar(reverse=TRUE)),但是,颜色渐变似乎信息量不大。另一种选择是将 rating 分成离散的范围,如下例所示,它更清楚地表明了每个 mpaa 类别中的评级分布。然而,由于条形高度不同,尚不清楚平均评级或评级分布如何因 mpaa 类别而异。

library(tidyverse)
library(ggplot2movies)
theme_set(theme_classic())

movies %>% 
  filter(mpaa != "") %>% 
  mutate(rating = fct_rev(cut(rating, seq(0,ceiling(max(rating)),2)))) %>% 
  ggplot(aes(mpaa, fill=rating)) +
    geom_bar(colour="white", size=0.2) + 
    scale_fill_manual(values=c(hcl(240,100,c(30,70)), "yellow", hcl(0,100,c(70,30))))

enter image description here

也许箱线图或 fiddle 图会提供更多信息。在下面的箱线图示例中,由于 varwidth=TRUE 参数,框宽度与评分电影数量的平方根成正比(我对此并不狂热,因为平方根转换很难解释,但我想我会把它作为一个选项放在那里)。在 fiddle 图中,每个 fiddle 的面积与每个 mpaa 类别中的电影数量成正比(由于 scale="count" 参数)。我还将每个类别中的电影数量放在 x 轴标签中,并用蓝色标记每个 mpaa 类别的平均评分。

p = movies %>% 
  filter(mpaa != "") %>% 
  group_by(mpaa) %>% 
  mutate(xlab = paste0(mpaa, "\n(", format(n(), big.mark=","), ")")) %>% 
  ggplot(aes(xlab, rating)) +
    labs(x="MPAA Rating\n(number of movies)", 
         y="Viewer Rating") +
    scale_y_continuous(limits=c(0,10))

pl = list(geom_boxplot(varwidth=TRUE, colour="grey70"),
          geom_violin(colour="grey70", scale="count",
                      draw_quantiles=c(0.25,0.5,0.75)),
          stat_summary(fun.y=mean, geom="text", aes(label=sprintf("%1.1f", ..y..)), 
                         colour="blue", size=3.5))  

gridExtra::grid.arrange(p + pl[-2], p + pl[-1], ncol=2)

enter image description here

关于r - 如何使用一个变量连续填充 ggplot2 条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53582025/

相关文章:

r ggplot 动态使用 plotmath 表达式

r - 用重复点绘制数据

r - 尝试对多个数据帧重复相同的代码

r - 保存绘图而不显示它

r - R 密度误差 bw.SJ

r - 具有分组依据和分面的堆积条形图

r - 如何将列重写(复制)到现有的SQLite数据库中

r - 为什么 strsplit ("A, B . C",c (", ",". ")) 不删除 ". "?

r - 使用 ggplot 绘制 parking 场占用的 parking 位

r - 如何在 ggplot2 R 中绘制一条回归线,但按不同因素绘制颜色点?