绘制R中的行

时间:2014-10-31 03:35:31

标签: r plot bar-chart

我试图在r中绘制不同伊利诺伊州的种族数据条形图,但我遇到了很多麻烦。这是我的数据:http://pastebin.com/rGKykjDb。我是r的初学者。当我尝试转置数据时,它会将其转换为无法绘制的字符向量。似乎创建条形图的唯一方法是通过列而不是行。我希望我的图表看起来与此类似。 http://i.stack.imgur.com/oY3ew.png我也曾尝试在stackOverflow R - Creating Scatter Plot from Data Frame上查看这篇文章,但当我尝试重新发布时,它只是给了我错误。 感谢您给出的任何建议。

> 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,log)中:强制引入的NA        2:在xy.coords(x,y,xlabel,ylabel,log)中:强制引入的NA

有没有办法让我在不将所有变量变成字符串的情况下转置数据?

3 个答案:

答案 0 :(得分: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 ...
...
...

答案 1 :(得分: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

您可能希望以某种方式过滤数据,因为按群组的人口数量差别很大。

答案 2 :(得分:-2)

在调用plot()

之前,可以使用t()转置数据

transposed