温度与本垒打的堆积条形图

时间:2017-03-07 03:12:38

标签: r ggplot2

我正在尝试对我的情节进行一些更改,但我很难这样做。

(1)我想分别以红色,黄色和蓝色填充温暖,平稳和冷色。

(2)我试图让y轴读取" Count"并将其水平书写。

(3)在图例中,我希望标题是温度,而不是变量

任何帮助进行这些更改都会受到赞赏以及其他建议,以使情节看起来更好。

df <- read.table(textConnection(
      'Statistic  Warm Avg Cold
      Homers(Away) 1.151 1.028 .841
      Homers(Home) 1.202 1.058 .949'), header = TRUE)

    library(ggplot2)
    library(reshape2)

    df <- melt(df, id = 'Statistic')
    ggplot(
      data = df,
      aes(
        y = value, 
        x = Statistic, 
        group = variable, 
        shape = variable, 
        fill = variable
      )
    ) +
      geom_bar(stat = "identity")

2 个答案:

答案 0 :(得分:1)

通过尝试将数据重新整形为长格式,您处于正确的位置。我的偏好是使用gather包中的tidyr。您还可以在收集步骤中创建变量名称Temperatures和Count。

下一步是将3类温度转化为一个因子,从冷,平均到温暖排序。

现在你可以画了。您希望position = "dodge"并排获得条形图,因为将值堆叠在一个条形图中是没有意义的。使用scale_fill_manual填充您指定的颜色。

您可以通过操纵axis.title.y来旋转y轴标题。

所以将所有这些放在一起(加上黑/白主题):

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

df %>% 
gather(Temperatures, Count, -Statistic) %>% 
mutate(Temperatures = factor(Temperatures, c("Cold", "Avg", "Warm"))) %>%
ggplot(aes(Statistic, Count)) + 
  geom_col(aes(fill = Temperatures), position = "dodge") +
  scale_fill_manual(values = c("blue", "yellow", "red")) + 
  theme_bw() +
  theme(axis.title.y = element_text(angle = 0, vjust = 0.5))

结果: enter image description here 在这种情况下,我会怀疑Count是否是一个合理的变量名称。

答案 1 :(得分:1)

你快到了。要将特定颜色映射到特定因子级别,您可以使用 scale_fill_manual 并创建自己的比例:

scale_fill_manual(values=c("Warm"="red", "Avg"="yellow", "Cold"="blue")) +

在ggplot中更改y轴图例也很容易:

ylab("Count") +

要更改图例标题,您可以使用:

labs(fill='TEMPERATURE') +

给我们:

ggplot(df, aes(y = value, x = Statistic, group= variable, fill = variable)) +
geom_bar(stat = "identity") +
scale_fill_manual(values=c("Warm"="red", "Avg"="yellow", "Cold"="blue")) +
labs(fill='TEMPERATURE') +
ylab("Count") +
xlab("") +
theme_bw() +
theme(axis.title.y = element_text(angle = 0, vjust = 0.5))

enter image description here