【问题标题】:Plotting Rows in R在 R 中绘制行
【发布时间】:2014-12-27 07:56:15
【问题描述】:

我正在尝试在 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) 中:强制引入的 NAs

有什么方法可以让我在不将所有变量都转换为字符串的情况下转置数据?

【问题讨论】:

  • 您能编辑并提供一些您尝试使用的代码吗?如果没有,我担心你的帖子会被关闭。
  • 显示到目前为止您尝试过的代码并准确描述您尝试过的内容。您不能只在 Stack Overflow 上订购代码;我们是来帮助你的,而不是为你工作。
  • 好的,我现在就这样做
  • 试试barplot(t(cleanpop2[-1]), beside = TRUE)
  • 谢谢@rawr 当我按比例转换数据时,它起作用了。但是当我用原始数据尝试它时它不起作用。 r 在比例方面效果更好吗?

标签: r plot bar-chart


【解决方案1】:

你不需要转置:

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 ...
...
...

【讨论】:

  • 看起来你打败了我,这是一个很好的建议,OP,关于如何提供比你最初要求的更好的可视化,因为它没有多余的信息。
  • @n8sty,谢谢大家的建议!接下来,我将搜索您代码中的库,并尝试更好地了解正在发生的事情。
【解决方案2】:
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'
            )

这会导致 . . . .

您可能希望以某种方式过滤您的数据,因为按组划分的人口数量非常不同。

【讨论】:

    【解决方案3】:

    也许在调用 plot() 之前使用 t() 来转置你的数据

    【讨论】:

    • 我已经尝试过这样做。但它会将我的转置列变成列表或字符。那无法绘制:(
    • 你是怎么做到的?
    • 剧情不错,请提供你创建它的代码
    猜你喜欢
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2016-08-07
    • 2017-06-27
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多