我试图在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
有没有办法让我在不将所有变量变成字符串的情况下转置数据?
答案 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')
我更喜欢以下版本:
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))
黑色+白色表示总计,因此总计不需要单独绘制。
数据:
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'
)
结果如何。 。 。
您可能希望以某种方式过滤数据,因为按群组的人口数量差别很大。
答案 2 :(得分:-2)
在调用plot()
之前,可以使用t()转置数据