【问题标题】:Plotting Categorical Values Histogram in R在 R 中绘制分类值直方图
【发布时间】:2022-08-10 05:21:50
【问题描述】:

我有来自两种仪器的数据。一列是分类值 - 传感器的状态(1 或 2 或 3),第二列是参考值 - 数值。我想为不同的参考范围绘制传感器(1 或 2 或 3)状态的直方图。例如:当参考值为 1-5 时,我想查看传感器 1 状态(1 或 2 或 3)的频率分布。同样,对于 6-10 个参考数据和高达 95-100 个参考值,我想要传感器状态的频率分布。任何帮助表示赞赏。我试图弄清楚传感器相对于参考有多好。以下是一些示例数据:

sample_data <-
structure(list(status = c(1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 
1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), conc = c(0.6, 0.6, 3, 1.8, 
0.4, 0.4, 0.6, 0.2, 1, 1.8, 2.2, 0.6, 0.6, 0.4, 2.2, 3.2, 0.6, 
0.6, 0.4, 0.6, 0.8, 1, 0.6, 0.2, 0.2, 1, 0.4, 0.6, 1, 1.2, 0.4, 
0.4, 0.4, 1, 0.4, 0.8, 0.2, 0.4, 0.6, 44.6, 6.8, 11, 600, 131.4, 
32.4, 32, 87.6, 102.6, 89.6, 56.4, 57.8, 57.8, 56, 56, 51.4, 
54.8, 56.4, 56.4, 56.4, 58.6, 56, 55.6, 54.4, 54.8, 55.8, 54.6, 
55.8, 55.6, 54.6, 55, 54.8, 55.4, 56.2, 55, 54.8, 54.2, 55.2, 
55.6, 53.8, 56.2, 55, 55.6, 54.2, 54.8, 56, 54, 54, 54.4, 54.6, 
54.4, 54.2, 53.8, 53.8, 54.2, 54.4, 55, 54.4, 54.6, 56, 57.4, 
54.6, 54.4, 54.6, 55.2, 55.4, 55.2, 54.2, 56, 52.2, 52.6, 53.2, 
51, 47.6, 49.2, 49.4, 48.2, 49.2, 49.2, 52.4, 52.4, 53.8, 52.2, 
49.2, 53.6, 55.2, 52.8, 53, 48.8, 51.2, 49.4, 49, 47.8, 47.4, 
46.8, 50.4, 47.6, 47.2, 48.8, 48.8, 47.6, 47.8, 48.4, 48.2, 46.8, 
45, 44.4, 43.4, 44.2, 45.8, 46.8, 47.4, 47.6, 45.4, 44.6, 44.6, 
43.6, 44.4, 46.6, 39.8, 43.4, 42.2, 42.4, 40.4, 42.8, 44, 39.8, 
41, 39.8, 38.4, 39.6, 40.2, 41, 40, 39.6, 38.6, 40.6, 40, 39.8, 
38.6, 39, 38, 37.6, 37.6, 39.6, 37.6, 37.8, 38.8, 39.2, 38.2, 
37.8, 35.8, 35.2, 36.2, 36.2, 37.4, 35.8, 35.6, 33.8, 35.2, 35.8, 
35.2, 35.2, 35.6, 36.2, 36, 36.2, 36.2, 36, 34.4, 34.2, 34, 34, 
34, 35, 34.2, 33.8, 31.2, 33.2, 32.4, 31.8, 32.4, 32.6, 31.8, 
31.4, 31.2, 31.8, 30.8, 32.2, 30.8, 31.2, 29.4, 30.6, 30.2, 29.6, 
29.8, 30.2, 30.2, 29.4, 30.2, 29.2, 29.8, 30, 30.4, 30.6, 29.8, 
29.4, 29.4, 28.8, 28.8, 27.4, 29.4, 29, 28, 28.2, 29.4, 29.2, 
28.6, 29.2, 26.8, 25.8, 25.4, 26.4, 25.8, 26, 27, 26, 27.6, 27.2, 
27.6, 27.2, 25.8, 25.4, 25.6, 25.4, 26.4, 25.8, 25.2, 25.2, 24.8, 
23.4, 24.4, 24, 24.6, 25, 25.2, 26.8, 23.2, 24, 24, 24.2, 23.8, 
23.6, 24.6, 23.6, 23.6, 22.6, 23.8, 23.4, 21.4, 23, 21.8, 21.8, 
22.6, 22.6, 22.6, 23.4, 23, 22, 24, 21.2, 21.4, 22.2, 22, 21.4, 
22, 21.8, 21.6, 21, 21.6, 21.2, 21.6, 21.6, 21.4, 21.2, 21, 21.2, 
21.2, 20.8, 21.2, 21.4, 20.6, 20, 20, 20.8, 21, 19.6, 19.2, 19.6, 
20.2, 20.2, 20.4, 19.8, 19, 19, 18.8, 19.2, 19.4, 18.6, 18.2, 
17.2, 17.8, 18.2, 17.8, 18, 17.4, 17, 16.8, 17.4, 17.8, 18.2, 
17.6, 17.8, 17, 16.8, 17, 17.2, 17, 16.4, 17, 17.8, 15.6, 15.8, 
17, 15.6, 17.2, 16.6, 16.2, 16.8, 17, 17, 16.8, 15.6, 16.4, 16.6, 
15.4, 15.6, 15.4, 14.6, 14.8, 15.4, 14.6, 14.6, 15, 15.8, 15, 
15.2, 15.2, 15.2, 14.6, 14.8, 15, 15.2, 14.4, 15, 15, 15, 15.2, 
14, 13.8, 14.6, 14.8, 14, 14.2, 14.4, 14.4, 14.2, 14.2, 14.6, 
14.4, 13.8, 13.6, 13, 13.6, 13.4, 13.6, 13, 14, 13.6, 12.4, 12.6, 
13.6, 13.8, 12.8, 12.8, 12.8, 13.6, 13.2, 13, 13.2, 13.2, 12, 
12.2, 11.6, 12.2, 11.8, 12, 12, 11.6, 12.2, 12.8, 14, 11.8, 11.6, 
12.8, 11, 11, 11, 11.6, 12, 11.8, 11, 11.4, 11.8, 12, 11.8, 11.6, 
11.6, 11.4, 11.2, 11.6, 11, 10.4, 11.2, 11, 10.4, 10, 9.8, 10.4, 
11, 11.2, 11, 11.4, 10.8, 10.8, 11, 10.8, 10.4, 10.8, 9.8, 10.2, 
10.4, 11.2, 10.6, 10, 9.6, 10.2, 9.6, 9.6, 9.8, 10.2, 10.4, 9.2, 
9.8, 9.6, 9.6, 9.2, 9.2, 9.8, 8.6, 9.2, 9.4, 9.2, 9, 9, 9, 9, 
9.4, 9.4, 9.4, 9.2, 9.2, 9.6, 8.4, 8.8, 8.6, 8.6, 8.8, 8.6, 8.8, 
8.4, 8.8, 8.8, 9, 9, 9, 9, 8.8, 8.2, 9, 8.8, 8.6, 8.2, 8.8, 8.6, 
8.6, 8.4, 7.8, 7.8, 8, 8, 8.2, 8.2, 7.8, 8, 8.2, 8.6, 8, 8, 7.6, 
7.6, 7.8, 7.6, 7.6, 7.6, 8, 8, 7.6, 7.6, 7.4, 7.6, 7.4, 7.6, 
7.8, 7.4, 7.8, 6.8, 6.8, 6.6, 7.2, 7.2, 6.8, 7, 6.4, 6.6, 6.6, 
7, 6.6, 6.8, 7, 7.2, 7, 6.8, 6.8, 7, 6.8, 6.8, 6.4, 6.4, 6.4, 
6.4, 6.4, 6.6, 6.6, 6.4, 6, 6.8, 6.6, 6.4, 6, 6.4, 5.6, 6.2, 
5.8, 6, 6.2, 6.2, 6.2, 6, 6.2, 5.6, 5.6, 5.8, 6, 5.8, 5.8, 5.8, 
6, 5.8, 5.8, 5.8, 5.8, 6, 5.8, 5.6, 5.4, 5.8, 5.6, 6, 5.6, 5.6, 
6, 5.8, 5.4, 5.4, 5.2, 5.6, 5.6, 5.6, 5.4, 5.4, 5.2, 5.2, 5, 
5.2, 5.4, 5, 5.2, 5, 4.8, 5.2, 5, 6, 5.2, 5, 5, 5, 5, 4.8, 4.8, 
4.8, 5, 4.4, 4.4, 4.8, 5, 4.8, 5.2, 5, 4.4, 4.6, 5, 4.6, 5, 4.8, 
5, 4.4, 4.4, 4.4, 4.6, 4.6, 4.4, 4.4, 4.6, 4.6, 4.6, 4.4, 4.4, 
4.6, 4.4, 4.2, 4, 4.4, 4.4, 4.4, 4.2, 4, 4.4, 4.2, 4.4, 4.4, 
4.2, 4.2, 4.4, 4.2, 4.2, 4, 4.2, 4, 4, 4.2, 4, 4, 3.6, 4, 4, 
3.8, 3.6, 4, 3.8, 4, 3.8, 3.8, 3.8, 4, 3.8, 3.8, 3.8, 4, 4, 3.6, 
3.6, 4, 3.8, 3.8, 3.6, 3.6, 3.8, 3.8, 3.6, 3.8, 3.6, 3.6, 3.4, 
3.6, 3.8, 3.4, 3.6, 3.6, 3.8, 3.4, 3.6, 3.6, 3.6, 3.6, 3.2, 3.4, 
3.4, 3.4, 3.2, 3.6, 3.4, 3.2, 3.4, 3.4, 3.4, 3.2, 3.2, 3.2, 3.4, 
3.2, 3.2, 3, 3.2, 3.4, 3.4, 3.2, 3.2, 3.2, 3.2, 3.2, 3, 3, 3.2, 
3.2, 2.8, 3.2, 3.2, 3, 3, 2.8, 2.8, 3, 3, 3, 3, 3, 2.8, 3, 3, 
2.8, 2.8, 2.8, 2.8, 2.8, 3, 2.8, 3, 2.6, 3.2, 2.8, 2.6, 2.8, 
2.8, 2.8, 2.8, 2.6, 2.8, 2.8, 2.4, 2.6, 2.6, 2.6, 2.8, 2.6, 2.2, 
2.4, 2.6, 2.4, 2.4, 2.6, 2.4, 2.4, 2.4, 2.4, 2.4, 2.6, 2.4, 2.4, 
2.4, 2.4, 2.6, 2.4, 2.6, 2.4, 2.4, 2.4, 2.4, 2.2, 2.4, 2.4, 2.4, 
2.4, 2.4, 2.4, 2.4, 2.4, 2.6, 2.2, 2.4, 2.2, 2.2, 2.2, 2.2, 2.4, 
2.2, 2.2, 2.2, 2.2, 2.2, 2, 2.2, 2.2, 2.2, 2, 2.4, 2.4, 2.2, 
2.2, 2.2, 2.4, 2.2, 2.2, 2.2, 2.2, 2, 2, 2.2, 2.2, 2.2, 2.2, 
2.2)), row.names = 18388:19288, class = \"data.frame\")
  • 直方图将连续数值变量分组以进行绘图。条形图显示了几组中每一组的观察频率。不幸的是,您提供的数据只有 sensor4_calcstatus==1 的值,因此所有 51 个值都属于一个类别。您问题的第二部分涉及将连续数值分组(例如使用cut() 函数),然后将这两个变量制成表格。你能提供大约 1/3 状态 1、1/3 状态 2 和 1/3 状态 3 的数据吗?
  • @dcarlson,感谢您指出这一点。我添加了更多示例数据。

标签: r dataframe plot histogram categorical-data


【解决方案1】:

首先,创建条形图:

barplot(table(sample_data$sensor4_calcstatus))

现在是频率表:

tbl <- table(cut(sample_data$ref_conc, breaks=seq(0, 100, by=5)), sample_data$sensor4_calcstatus)
tbl
#           
#              1   2   3
#   (0,5]    281   0   0
#   (5,10]   150  17   0
#   (10,15]    8  92   0
#   (15,20]    0  58   0
#   (20,25]    0  36  20
#   (25,30]    0   0  43
#   (30,35]    2   0  30
#   (35,40]    0   0  39
#   (40,45]    1   0  18
#   (45,50]    0   0  28
#   (50,55]    1   1  43
#   (55,60]    5   1  22
#   (60,65]    0   0   0
#   (65,70]    0   0   0
#   (70,75]    0   0   0
#   (75,80]    0   0   0
#   (80,85]    0   0   0
#   (85,90]    2   0   0
#   (90,95]    0   0   0
#   (95,100]   0   0   0
par(mfrow=c(3, 1))
for (i in 1:3) barplot(tbl[, i], space=0, main=paste("Group", i))

请注意,您有两个大于 100 的 ref_conc 值:131.4 和 600.0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多