错误:矩阵的行数必须匹配(ggplot facet)

时间:2017-03-22 02:50:55

标签: r ggplot2

我正在尝试为我的ggplot2方面分配标签。由于我认为这是一个字符问题,我使用的标签与我的数据集完全相同,所以它有点长,我道歉。

Error in cbind(labels = list(), list(`{`, if (!is.null(.rows) || !is.null(.cols)) { : 
  number of rows of matrices must match (see arg 2)

然后,

all(names(mylabels) %in% names)
length(mylabels) == length(names)

可生产

use yii\web\Controller;
use app\models\Hapus;
use yii\helpers\Json;


class HighchartsController extends Controller
{
     public function actionIndex()
    {



    $row = Hapus::find()->orderBy('Year ASC')->all();


    $rows = [];
    $rowsa = [];
    $rowsaa= [];

    foreach($row as $value){
        array_push($rows,$value->Year);
        array_push($rowsa,$value->Female);
        array_push($rowsaa,$value->Male);
    }




        $data['year'] = json_encode($rows);
        $data['female'] = json_encode($rowsa);
        $data['male'] = json_encode($rowsaa);




        return $this->render('index',$data);
    }


}

我之前使用过贴标机没有问题,所以我不确定为什么会抛出这个错误。我检查了一些事情,比如确保匹配:

{{1}}

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这个怎么样?

df$item <-  factor(df$item, 
                   labels = c("Acquisitions/Mergers","Analyst Ratings","Assets", "Balance of Payments","Bankruptcy", "Civil Unrest",
                              "Corporate Responsibility", "Credit", "Credit Ratings", "Crime", "Dividends", "Earnings", "Equity Actions",
                              "Exploration", "Government", "Indexes", "Industrial Accidents", "Insider Trading", "Investor Relations",
                              "Labor Issues", "Legal",  "Marketing", "Order Imbalances","Partnerships",  "Price Targets",
                              "Product Services",  "Public Opinion","Regulatory",  "Revenues","Security", "Stockprices",
                              "Taxes",  "Technical Analysis",  "Transportation", "War Conflict"))

ggplot(df, aes(x=date, y=value, color=item)) +
  geom_line() + 
  facet_wrap( ~ item, ncol=4, scales="free_y")

<强>更新

解决评论中的问题

首先 ,标注因素是否为唯一订单?换句话说,原来的&#34;项目&#34;应该对数据框中的向量进行排序,使其与标签的顺序相同吗?

<强>答案

labels向量中的等级顺序必须与item向量中的等级顺序相同。

以下是item

的等级
levels(df$item)
 [1] "acquisitionsmergers"     "analystratings"          "assets"                  "balanceofpayments"       "bankruptcy"             
 [6] "civilunrest"             "corporateresponsibility" "credit"                  "creditratings"           "crime"                  
[11] "dividends"               "earnings"                "equityactions"           "exploration"             "government"             
[16] "indexes"                 "industrialaccidents"     "insidertrading"          "investorrelations"       "laborissues"            
[21] "legal"                   "marketing"               "orderimbalances"         "partnerships"            "pricetargets"           
[26] "productsservices"        "publicopinion"           "regulatory"              "revenues"                "security"               
[31] "stockprices"             "taxes"                   "technicalanalysis"       "transportation"          "warconflict" 

我通常会将它们粘贴到labels内添加逗号,删除数字并根据需要更改名称。

下面还有另一种方法可以使用itemdplyr

更改forcats级别的名称
library(dplyr)
library(forcats)
df <- df %>% 
  mutate(item_update = item) %>%  # create new column called item_update to change the names of item levels
  mutate(item_update = fct_recode(item_update,
                                  "Acquisitions/Mergers" = "acquisitionsmergers" ,
                                  "Analyst Ratings" = "analystratings" ,
                                  "Assets" =  "assets",
                                  "Balance of Payments"  = "balanceofpayments",
                                  "Bankruptcy" = "bankruptcy",
                                  "Civil Unrest" = "civilunrest",
                                  "Corporate Responsibility" = "corporateresponsibility",
                                  "Credit" = "credit",
                                  "Credit Ratings" = "creditratings",
                                  "Crime" = "crime",
                                  "Dividends" = "dividends",
                                  "Earnings" = "earnings",
                                  "Equity Actions" = "equityactions",
                                  "Exploration" = "exploration",
                                  "Government" = "government",
                                  "Indexes" = "indexes",
                                  "Industrial Accidents" = "industrialaccidents",
                                  "Insider Trading" = "insidertrading",
                                  "Investor Relations" = "investorrelations",
                                  "Labor Issues" = "laborissues",
                                  "Legal" = "legal" ,
                                  "Marketing" = "marketing",
                                  "Order Imbalances" = "orderimbalances",
                                  "Partnerships" = "partnerships",
                                  "Price Targets" = "pricetargets",
                                  "Product Services" = "productsservices",
                                  "Public Opinion" = "publicopinion" ,
                                  "Regulatory" = "regulatory",
                                  "Revenues" = "revenues",
                                  "Security" = "security",
                                  "Stockprices" = "stockprices",
                                  "Taxes" = "taxes",
                                  "Technical Analysis" = "technicalanalysis",
                                  "Transportation" = "transportation" ,
                                  "War Conflict" = "warconflict"
                                  ))

我们可以将其绘制如下

ggplot(df, aes(x=date, y=value, color=item)) +
  geom_line() + 
  facet_wrap( ~ item_update, ncol=4, scales="free_y")

第二次 ,这似乎是一个错误,我应该用ggplot2页面提交?

<强>答案

这不是一个错误。 如果您将mylabels编辑为

,您的方法将正常运行
mylabels <- c(acquisitionsmergers = "Acquisitions/Mergers",
              analystratings = "Analyst Ratings",
              assets = "Assets",
              balanceofpayments = "Balance of Payments",
              bankruptcy = "Bankruptcy",
              civilunrest = "Civil Unrest",
              corporateresponsibility = "Corporate Responsibility",
              credit = "Credit",
              creditratings = "Credit Ratings",
              crime = "Crime",
              dividends = "Dividends",
              earnings = "Earnings",
              equityactions = "Equity Actions",
              exploration = "Exploration",
              government = "Government",
              indexes = "Indexes",
              industrialaccidents = "Industrial Accidents",
              insidertrading = "Insider Trading",
              investorrelations = "Investor Relations",
              laborissues = "Labor Issues",
              legal = "Legal",
              marketing = "Marketing",
              orderimbalances = "Order Imbalances",
              partnerships = "Partnerships",
              pricetargets = "Price Targets",
              productsservices = "Product Services",
              publicopinion = "Public Opinion",
              regulatory = "Regulatory",
              revenues = "Revenues",
              security = "Security",
              stockprices = "Stockprices",
              taxes = "Taxes",
              technicalanalysis = "Technical Analysis",
              transportation = "Transportation",
              warconflict = "War Conflict")

和情节

ggplot(df, aes(x=date, y=value, color=item)) +
  geom_line() + 
  facet_wrap( ~ item, ncol=4, scales="free_y", labeller = labeller(item = mylabels))