2017-03-22 27 views
1

ggplot2ファセットにラベルを割り当てようとしています。私はこれが文字の問題だと思っているので、私はデータセット内のラベルとまったく同じものを使用していますので、少し時間がかかります。謝ります。エラー:行列の行数が一致する必要があります(ggplotファセット)

set.seed(123) 

names <- c("acquisitionsmergers", "analystratings", "assets", "balanceofpayments", 
"bankruptcy", "civilunrest", "corporateresponsibility", "credit", 
"creditratings", "crime", "dividends", "earnings", "equityactions", 
"exploration", "government", "indexes", "industrialaccidents", 
"insidertrading", "investorrelations", "laborissues", "legal", 
"marketing", "orderimbalances", "partnerships", "pricetargets", 
"productsservices", "publicopinion", "regulatory", "revenues", 
"security", "stockprices", "taxes", "technicalanalysis", "transportation", 
"warconflict") 

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") 

df <- data.frame(item = rep(names, each=5), value=rnorm(5*35,5,2), date = rep(seq(as.Date("2000/1/1"), by = "month", length.out = 5),35)) 

その後、

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

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) 

ありがとう:私は、このような一致があることを確認することなどいくつかのことを、確認しました!

答えて

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") 

UPDATE

最初のコメントでの質問に対処するため、ラベルの要因は、ユニークな順序として採用されていますか?つまり、データフレーム内の元の「アイテム」ベクトルは、ラベルと同じ順序になるようにソートする必要がありますか?

回答

item

ベクター中のレベルの順序と同じでなければならないlabelsベクター内のレベルの順序。以下は

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の内側に貼り付けコピーされます。

別の方法は、dplyrを使用してitemのレベルの名前を変更するには、以下の、あると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 <- 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)) 
+0

パーフェクト、感謝すべきプロットするmylabelsを編集する場合 あなたのアプローチが正常に動作します!いくつかのこと:まず、ラベル要素がユニークな順序として取られていますか?つまり、データフレーム内の元の「アイテム」ベクトルは、ラベルと同じ順序になるようにソートする必要がありますか?第2に、これはバグであるように見えますが、これはggplot2ページでファイルする必要がありますか? – Almacomet

+0

@Almacomet 最新の回答を確認してください – aelwan

関連する問題