如何在同一个ggplot中显示两个不同Y轴的和和平均值

时间:2018-05-31 08:41:23

标签: r ggplot2

我需要一个带有两个Y轴的ggplot,这样主Y轴带有计数(我用函数stat=count计算)和次Y轴显示用stat_summary(fun.y="mean")计算的平均值

我用以下方法计算了集群的数量:

library(ggplot2)
ggplot(df,aes(x=cluster,fill=year, stat="count"))+ 
  geom_bar()

与群集中的分歧的平均值:

ggplot(df, aes(x=factor(cluster), y=divergence)) + stat_summary(fun.y="mean", geom="bar")

我分别有这两个ggplots。我想创建一个包含这两个函数的ggplot,count Primary Y axis (geom_bar)Mean secondary Y axis (geom_point and geom_line)divergence year cluster 0.34 2015 A 0.89 2015 A 1.22 2015 A 1.11 2015 B 0.67 2015 B 0.89 2015 B 1.12 2015 B 0.4 2015 B 0.67 2015 B 0.89 2015 B 0.56 2015 B 1.22 2015 B 1.12 2015 B 0.4 2015 B 0.67 2016 A 0.89 2016 A 0.11 2016 B 1.33 2016 C 1.11 2016 C 1 2016 C 0.89 2016 C 1 2016 C 0.45 2016 C 0.23 2016 C 0.89 2016 C 0.8 2017 A 0.6 2017 A 1.11 2017 A 0.34 2017 B 0.78 2017 B 2.1 2017 C 0.89 2017 C 0.89 2017 C 0.34 2017 C 1.55 2017 A 1.11 2017 A 1.11 2017 A 1 2017 A 0.34 2017 A 0.67 2017 A 0.56 2017 B 1 2017 C 0.34 2017 C 0.23 2017 C 1 2017 C 1.33 2017 C 0.78 2017 C 1.11 2017 B 0.78 2017 C 1 2017 C 0.67 2017 C 0.67 2017 A 0.56 2017 A 1 2017 B 0.34 2017 C 0.67 2017 B 0 2017 B 0.67 2017 B 0.67 2017 B 0.34 2017 B 0.45 2017 B 。有人帮我绘图。 非常感谢您的帮助

import { Directive, HostListener, ElementRef } from '@angular/core';

@Directive({
  selector: '[credit-card]'
})
export class CreditCardDirective {

@HostListener('input', ['$event'])
  onKeyDown(event: KeyboardEvent) {
    const input = event.target as HTMLInputElement;

    let trimmed = input.value.replace(/\s+/g, '');
    if (trimmed.length > 16) {
      trimmed = trimmed.substr(0, 16);
    }

    let numbers = [];
    for (let i = 0; i < trimmed.length; i += 4) {
      numbers.push(trimmed.substr(i, 4));
    }

    input.value = numbers.join(' ');

  }
}

1 个答案:

答案 0 :(得分:2)

我不清楚为什么你想要一个辅助轴,当每个轴上的刻度相同但我已经包括在内,你可以决定你认为它是否合适。

我假设您熟悉dplyr

首先,我创建了一个新数据集,其中只包含每个群集的平均值:

df_means <- df %>% group_by(cluster) %>% summarise(mean=mean(divergence)) 

接下来,我绘制了条形图以及新数据集的直线和点。 scale_y_continuous中的sec.axis参数可用于创建具有变换比例的辅助轴(在本例中为1:1)

ggplot()+
  geom_bar(data=df,aes(x=cluster,fill=year), stat="count") +
  geom_line(data=df_means,aes(x=cluster,y=mean, group=1,color='Average')) +
  geom_point(data=df_means,aes(x=cluster,y=mean,color='Average'))+
  scale_y_continuous("Count", sec.axis = sec_axis(trans =  ~. ,name = 
  'Average'))+
  theme(legend.title=element_blank())

enter image description here

更新:

感谢您上传其他数据,我明白为什么您现在想要辅助轴。您可以使用trans参数将变换应用于辅助轴 - 在这种情况下,我只是指定辅助轴是主要轴的十分之一。

然后,您需要对要显示在辅助轴上的线和点进行反向转换 - 在这种情况下乘以10。

ggplot()+
  geom_bar(data=df,aes(x=cluster,fill=year), stat="count") +
  geom_line(data=df_means,aes(x=cluster,y=mean*10, group=1,color='Average')) +
  geom_point(data=df_means,aes(x=cluster,y=mean*10,color='Average'))+
  scale_y_continuous("Count", sec.axis = sec_axis(trans =  ~ ./10 ,name = 
                                                'Average'))+
  theme(legend.title=element_blank())

enter image description here