2014-10-31 103 views
1

我想在r中爲不同的伊利諾伊縣繪製種族數據的條形圖,但我遇到了相當多的麻煩。這是我的數據:http://pastebin.com/rGKykjDb。我是r的初學者。當我嘗試轉換數據時,會將其轉爲無法繪製的字符向量。似乎創建條形圖的唯一方法是通過列而不是行。我希望我的圖表看起來與此類似。 http://i.stack.imgur.com/oY3ew.png我也試過看着這個帖子在stackoverflow R - Creating Scatter Plot from Data Frame但是當我試圖重新它只是給了我錯誤。 感謝您給出的任何建議。在R中繪製行

> cleanpop2 <-read.csv(file="test.csv",head=TRUE,sep=",") 

> cleanpop2 
    Subject Total.population White 
1  Illinois   12843166 9518017 
2  Adams    67120 63402 
3 Champaign   201332 155064 
4   Cook   5200950 3011135 
5  DeKalb   105201 89430 



cleanpop4<-t(cleanpop2) 

      [,1]  [,2]  
Subject   "Illinois" "Adams " 
Total.population "12843166" " 67120" 
White   "9518017" " 63402" 
Black   "1968117" " 2807" 
American.Indian "82449" "257" 

情節(cleanpop4) 警告消息: 1:在xy.coords(X,Y,xlabel,ylabel,登錄):的NA受到脅迫 2中引入:在xy.coords(X, Y,xlabel,ylabel,日誌):通過強制推出來港

有什麼辦法,我轉的數據,而不必所有的變量變成字符串?

+0

你能編輯並提供一些你試過使用的代碼嗎?如果不是,我擔心你的帖子會被關閉。 – 2014-10-31 03:41:38

+0

顯示您迄今爲止嘗試過的代碼,並準確描述您嘗試過的內容。你不能只在Stack Overflow上訂購代碼;我們在這裏幫助,而不是爲你做這項工作。 – MrFlick 2014-10-31 03:41:39

+0

好吧我現在要這樣做 – 2014-10-31 03:52:52

回答

-2

也許使用T()調用圖()前轉數據

transposed

+0

我曾試過這樣做。但它將我的轉置列轉換爲列表或字符。這不能被繪製:( – 2014-10-31 03:47:56

+0

也是如何做到這一點? – 2014-10-31 03:48:44

+0

這看起來像一個不錯的情節,請提供您用來創建它的代碼 – 2014-10-31 08:36:08

4

你並不需要轉:

library(ggplot2); library(reshape2) 
mm = melt(ddf, id='Subject') 
ggplot(mm)+geom_bar(aes(x=Subject, y=value, fill=variable), stat='identity', position='dodge') 

enter image description here

我寧願以下版本:

mm = melt(ddf[,c(1,3,4)], id='Subject') 
ggplot(mm)+geom_bar(aes(x=Subject, y=value, fill=variable), stat='identity')+theme(axis.text.x=element_text(angle=45, size=10, hjust=1, vjust=1)) 

enter image description here

黑色+白色表示總數,所以總數不需要單獨繪製。

數據:

Subject Total.population White Black 
1  Illinois   12843166 9518017 1968117 
2  Adams    67120 63402 2807 
3 Champaign   201332 155064 27618 
4   Cook   5200950 3011135 1324942 
5  DeKalb   105201 89430 7587 
6  DuPage   918764 755485 47283 
7   Kane   516499 398001 31689 
8  Kankakee   113502 90815 18513 
9  Kendall   115304 100710 8045 
10  Lake   704596 550999 55635 
11  LaSalle   113840 109492 3289 
12  McHenry   309192 278556 4675 
13  McLean   169832 147449 14435 
14  Macon   110715 90616 20670 
15  Madison   269271 243739 24413 
16  Peoria   186311 144563 36156 
17 Rock_Island   147517 122385 16074 
18 St._Clair   270419 179878 86497 
19 Sangamon   197822 168318 26498 
20 Tazewell   135433 133023 1936 
21 Vermilion    81551 68839 11804 
22  Will   678697 535990 80527 
23 Williamson    66369 62802 3526 
24 Winnebago   295127 246123 41281 

如果你仍然想轉數據使用:

data.frame(t(ddf)) 
         X1  X2  X3  X4  X5  X6 ... 
Subject   Illinois Adams Champaign  Cook DeKalb DuPage ... 
Total.population 12843166 67120 201332 5200950 105201 918764 ... 
White    9518017 63402 155064 3011135 89430 755485 ... 
Black    1968117  2807  27618 1324942  7587 47283 ... 
... 
... 
+0

看起來像你打敗了我,這是偉大的意見,OP,關於如何提供更好的可視化效果,因爲它沒有多餘的信息。 – n8sty 2014-10-31 05:20:35

+0

@ n8sty,rnso謝謝大家的建議!接下來,我將google在你的代碼中的庫並嘗試獲得更好的瞭解發生了什麼。 – 2014-10-31 05:37:38

1
require(ggplot2) 
require(reshape2) 
require(dplyr) 

data <- 
    read.csv(...) # read in your data here 

data <- 
    reshape(data, 
      varying = c('Total.population', 'White', 'Black'), 
      v.names = 'population', 
      timevar = 'group', 
      times = c('Total.population', 'White', 'Black'), 
      direction = 'long' 
     ) 

ggplot(data = data, 
     aes(x = Subject, 
      y = population) 
     ) + 
    geom_bar(aes(fill = group), 
      position= 'dodge', 
      stat = 'identity' 
      ) 

導致英寸。 。 。

enter image description here

您可能希望以某種方式來過濾數據,因爲人口的按組的大小是相當不同的。