带2轴的BarPlot上的R叠加线图

时间:2019-03-08 06:02:20

标签: r

我有以下代码,它仅生成没有行的barplot。如何调整此代码以获取第二行? enter image description here

library(ggplot2)
p1 <- ggplot()
p1 <- p1 + geom_bar(data=subset(df, Year==2006), aes(x=factor(State),y=Rate), stat = "identity")
p1 <- p1 + xlab("State") + ylab("Rate") + theme(axis.text.x = element_text(angle = 60, hjust = 1)) 
p1 <- p1 +  geom_line(data = subset(df, Year==2006),  aes(x=factor(State),y=Total.Poverty/1000),colour = "blue") 
p1 <- p1 + scale_y_continuous(sec.axis = sec_axis(~.*1000, name = "Total Poverty"))
print(p1)

我看过ggplot2 overlay of barplot and line plot,但仍然不知道为什么情节没有显示线。

enter image description here

2 个答案:

答案 0 :(得分:0)

您应该提供一个最小的数据集来重现您的问题,所以我无法测试我的解决方案,但是我认为这是因为因子刻度上的一条线不起作用,所以您应该使用:

int main()  
{  
  int tab[COTE][COTE] = { 0 };  
  int compteur = 0, 
  joueur = 1,
  choix;  
  bool etat=false;
  printf("commande : ");
  choix = saisieInt();
  compteur++;

  while ( compteur < 9 || etat != true) {
///position where to place the piece///////////////////////////////
    int colonne = choix % 3;
    int ligne = choix / 3;
    tab[ligne][colonne - 1] = joueur;
///////////////////////////////////////////////

    printTab(tab);

///switch between the 2 players///////////////////////////////
    if (joueur == 1)
      joueur = 2;
    else
      joueur = 1;
///////////////////////////////////////////////

///check if one has a diagonal line //////////////////////////
    if (compteur >= 6) {
      int compteurdiag = 0;
      for (int i = 0; i < COTE; i++) {
        if (tab[i][i] == joueur) {
          compteurdiag++;
        }
        else {
          compteurdiag = 0;
        }
        if (compteurdiag == COTE)
          {
            etat = true;
          }
      }
    }
///////////////////////////////////////////////
//if (etat == false) {
    printf("compteur : %d commande : ", compteur);
    choix = saisieInt();
    compteur++;
//}
  }
  printf("compteur : %d termine\n", compteur);
}

void printTab(int t[COTE][COTE]) {
    int i, j;
    puts("\n|---|---|---|");
    for (i = 0; i < COTE; i++) {
        for (j = 0; j < COTE; j++) {
            printf("|%2d ", t[i][j]);
        }
        puts("|");
        for (j = 0; j < COTE; j++) {
            printf("|---");
        }
        puts("|");
    }
}


int saisieInt() {
    int valeur, n;
    n = scanf("%d", &valeur);
    while (n != 1  || valeur > 9) {
        printf("Attention, erreur de saisie\nRechoisissez : ");
        while (getchar() != '\n');
        n = scanf("%d", &valeur);
    }
    return(valeur);
}

相反。

答案 1 :(得分:0)

必须在代码中添加group = 1

library(ggplot2)
p1 <- ggplot()
p1 <- p1 + geom_bar(data=subset(df, Year==2006), aes(x=factor(State),y=Rate), stat = "identity")
p1 <- p1 + xlab("State") + ylab("Rate") + theme(axis.text.x = element_text(angle = 60, hjust = 1)) 
p1 <- p1 +  geom_line(data = subset(df, Year==2006),  aes(x=factor(State),y=Total.Poverty/1000),colour = "blue", group = 1) 
p1 <- p1 + scale_y_continuous(sec.axis = sec_axis(~.*1000, name = "Total Poverty"))
print(p1)