ggplot2 上的堆叠条形图显示错误数据
Stacked bar chart on ggplot2 presenting wrong data
已解决:问题是 类 被设置为字符而不是 factor/numeric
我正在尝试根据我创建的长格式数据框制作堆叠条形图。条形图确实以正确的格式显示,但数据与数据框中的内容不正确。这是我的数据:
1 Macrolides X3 2.85
2 Penicillins X3 6.64
3 Cephalosporins X3 1.70
4 Quinolones X3 1.36
5 Tetracyclines X3 1.19
6 Macrolides Belgium 2.62
7 Penicillins Belgium 16.28
8 Cephalosporins Belgium 1.59
9 Quinolones Belgium 2.69
10 Tetracyclines Belgium 2.10
11 Macrolides Bulgaria 2.49
12 Penicillins Bulgaria 8.05
13 Cephalosporins Bulgaria 2.32
14 Quinolones Bulgaria 1.99
15 Tetracyclines Bulgaria 1.71
16 Macrolides Cyprus 2.86
17 Penicillins Cyprus 14.43
18 Cephalosporins Cyprus 5.41
19 Quinolones Cyprus 4.10
20 Tetracyclines Cyprus 3.27
21 Macrolides Czech 3.25
22 Penicillins Czech 7.60
23 Cephalosporins Czech 1.62
24 Quinolones Czech 1.22
25 Tetracyclines Czech 2.27
26 Macrolides Denmark 2.34
27 Penicillins Denmark 10.29
28 Cephalosporins Denmark 0.03
29 Quinolones Denmark 0.51
30 Tetracyclines Denmark 1.70
31 Macrolides Estonia 2.06
32 Penicillins Estonia 4.22
33 Cephalosporins Estonia 0.88
34 Quinolones Estonia 0.81
35 Tetracyclines Estonia 1.89
36 Macrolides Finland 1.23
37 Penicillins Finland 6.61
38 Cephalosporins Finland 2.33
39 Quinolones Finland 0.88
40 Tetracyclines Finland 4.09
41 Macrolides France 2.63
42 Penicillins France 15.62
43 Cephalosporins France 2.67
44 Quinolones France 2.00
45 Tetracyclines France 3.16
46 Macrolides Germany 2.09
47 Penicillins Germany 4.10
48 Cephalosporins Germany 2.61
49 Quinolones Germany 1.51
50 Tetracyclines Germany 2.74
51 Macrolides Greece 8.55
52 Penicillins Greece 12.87
53 Cephalosporins Greece 8.91
54 Quinolones Greece 2.89
55 Tetracyclines Greece 2.31
56 Macrolides Hungary 2.42
57 Penicillins Hungary 6.69
58 Cephalosporins Hungary 1.92
59 Quinolones Hungary 1.97
60 Tetracyclines Hungary 1.38
61 Macrolides Iceland 1.40
62 Penicillins Iceland 12.08
63 Cephalosporins Iceland 0.62
64 Quinolones Iceland 1.02
65 Tetracyclines Iceland 5.05
66 Macrolides Ireland 3.63
67 Penicillins Ireland 10.65
68 Cephalosporins Ireland 1.21
69 Quinolones Ireland 0.91
70 Tetracyclines Ireland 2.60
71 Macrolides Italy 4.98
72 Penicillins Italy 14.55
73 Cephalosporins Italy 2.55
74 Quinolones Italy 3.45
75 Tetracyclines Italy 0.53
76 Macrolides Lativa 1.03
77 Penicillins Lativa 5.59
78 Cephalosporins Lativa 0.57
79 Quinolones Lativa 0.91
80 Tetracyclines Lativa 2.38
81 Macrolides Lithuania 1.44
82 Penicillins Lithuania 6.99
83 Cephalosporins Lithuania 0.80
84 Quinolones Lithuania 0.83
85 Tetracyclines Lithuania 1.38
86 Macrolides Luxembourg 3.46
87 Penicillins Luxembourg 13.96
88 Cephalosporins Luxembourg 4.18
89 Quinolones Luxembourg 2.94
90 Tetracyclines Luxembourg 2.04
91 Macrolides Malta 2.97
92 Penicillins Malta 9.80
93 Cephalosporins Malta 5.04
94 Quinolones Malta 1.79
95 Tetracyclines Malta 1.02
96 Macrolides Netherlands 1.31
97 Penicillins Netherlands 4.36
98 Cephalosporins Netherlands 0.04
99 Quinolones Netherlands 0.87
100 Tetracyclines Netherlands 2.66
101 Macrolides Norway 1.55
102 Penicillins Norway 6.77
103 Cephalosporins Norway 0.12
104 Quinolones Norway 0.54
105 Tetracyclines Norway 2.77
106 Macrolides Poland 2.89
107 Penicillins Poland 9.43
108 Cephalosporins Poland 2.44
109 Quinolones Poland 1.23
110 Tetracyclines Poland 2.10
111 Macrolides Portugal 3.37
112 Penicillins Portugal 12.08
113 Cephalosporins Portugal 1.81
114 Quinolones Portugal 2.97
115 Tetracyclines Portugal 0.71
116 Macrolides Slovenia 1.89
117 Penicillins Slovenia 9.67
118 Cephalosporins Slovenia 0.40
119 Quinolones Slovenia 1.10
120 Tetracyclines Slovenia 0.04
121 Macrolides Spain 1.88
122 Penicillins Spain 12.64
123 Cephalosporins Spain 1.56
124 Quinolones Spain 2.54
125 Tetracyclines Spain 0.70
126 Macrolides Sweden 0.43
127 Penicillins Sweden 7.09
128 Cephalosporins Sweden 0.20
129 Quinolones Sweden 0.77
130 Tetracyclines Sweden 3.33
131 Macrolides UK 2.71
132 Penicillins UK 8.60
133 Cephalosporins UK 0.55
134 Quinolones UK 0.46
135 Tetracyclines UK 4.15
这是我制作条形图的代码和它的图片。如您所见,图表中的比例不正确,例如与其他抗生素相比,青霉素的使用价值非常高,但这没有显示在我的图表上。我不确定我做错了什么。
barchart <- ggplot(data=chart.new, aes(x = Country, y = DailyDosage, fill = Group, group = Group)) +
geom_bar(stat = "identity") +
coord_flip() +
scale_fill_manual(values = cbPalette) +
labs(title = "Antibiotic Consumption by Group ") +
theme(legend.position = "top")
与@DaveGruenewald 类似,我使用您的代码和数据得到了正确的值。我注意到你有 theme(legend.position = "top") 而你展示了一个带有图例的情节。是不是一样的代码,作为参考,你可以试试我下面的。
我从上面的 table 中使用的内容:
chart.new=dput(chart.new)
structure(list(Group = structure(c(2L, 3L, 1L, 4L, 5L, 2L, 3L,
1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L,
4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L,
5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L,
2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L,
3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L,
1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L,
4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L,
5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L
), .Label = c("Cephalosporins", "Macrolides", "Penicillins",
"Quinolones", "Tetracyclines"), class = "factor"), Country = structure(c(27L,
27L, 27L, 27L, 27L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L,
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L,
6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 9L, 9L, 9L,
9L, 9L, 10L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L, 11L, 12L,
12L, 12L, 12L, 12L, 13L, 13L, 13L, 13L, 13L, 14L, 14L, 14L, 14L,
14L, 15L, 15L, 15L, 15L, 15L, 16L, 16L, 16L, 16L, 16L, 17L, 17L,
17L, 17L, 17L, 18L, 18L, 18L, 18L, 18L, 19L, 19L, 19L, 19L, 19L,
20L, 20L, 20L, 20L, 20L, 21L, 21L, 21L, 21L, 21L, 22L, 22L, 22L,
22L, 22L, 23L, 23L, 23L, 23L, 23L, 24L, 24L, 24L, 24L, 24L, 25L,
25L, 25L, 25L, 25L, 26L, 26L, 26L, 26L, 26L), .Label = c("Belgium",
"Bulgaria", "Cyprus", "Czech", "Denmark", "Estonia", "Finland",
"France", "Germany", "Greece", "Hungary", "Iceland", "Ireland",
"Italy", "Lativa", "Lithuania", "Luxembourg", "Malta", "Netherlands",
"Norway", "Poland", "Portugal", "Slovenia", "Spain", "Sweden",
"UK", "X3"), class = "factor"), DailyDosage = c(2.85, 6.64, 1.7,
1.36, 1.19, 2.62, 16.28, 1.59, 2.69, 2.1, 2.49, 8.05, 2.32, 1.99,
1.71, 2.86, 14.43, 5.41, 4.1, 3.27, 3.25, 7.6, 1.62, 1.22, 2.27,
2.34, 10.29, 0.03, 0.51, 1.7, 2.06, 4.22, 0.88, 0.81, 1.89, 1.23,
6.61, 2.33, 0.88, 4.09, 2.63, 15.62, 2.67, 2, 3.16, 2.09, 4.1,
2.61, 1.51, 2.74, 8.55, 12.87, 8.91, 2.89, 2.31, 2.42, 6.69,
1.92, 1.97, 1.38, 1.4, 12.08, 0.62, 1.02, 5.05, 3.63, 10.65,
1.21, 0.91, 2.6, 4.98, 14.55, 2.55, 3.45, 0.53, 1.03, 5.59, 0.57,
0.91, 2.38, 1.44, 6.99, 0.8, 0.83, 1.38, 3.46, 13.96, 4.18, 2.94,
2.04, 2.97, 9.8, 5.04, 1.79, 1.02, 1.31, 4.36, 0.04, 0.87, 2.66,
1.55, 6.77, 0.12, 0.54, 2.77, 2.89, 9.43, 2.44, 1.23, 2.1, 3.37,
12.08, 1.81, 2.97, 0.71, 1.89, 9.67, 0.4, 1.1, 0.04, 1.88, 12.64,
1.56, 2.54, 0.7, 0.43, 7.09, 0.2, 0.77, 3.33, 2.71, 8.6, 0.55,
0.46, 4.15)), class = "data.frame", row.names = c(NA, 135L))
正在检查chart.new:
str(chart.new)
'data.frame': 135 obs. of 3 variables:
$ Group : Factor w/ 5 levels "Cephalosporins",..: 2 3 1 4 5 2 3 1 4 5 ...
$ Country : Factor w/ 27 levels "Belgium","Bulgaria",..: 27 27 27 27 27 1 1 1 1 1 ...
$ DailyDosage: num 2.85 6.64 1.7 1.36 1.19 ...
使用默认颜色:
ggplot(data=chart.new ,aes(x = Country, y = DailyDosage, fill = Group, group = Group))+
geom_bar(stat = "identity")+ coord_flip() +
labs(title = "Antibiotic Consumption by Group ")+
theme(legend.position = "top")
已解决:问题是 类 被设置为字符而不是 factor/numeric
我正在尝试根据我创建的长格式数据框制作堆叠条形图。条形图确实以正确的格式显示,但数据与数据框中的内容不正确。这是我的数据:
1 Macrolides X3 2.85
2 Penicillins X3 6.64
3 Cephalosporins X3 1.70
4 Quinolones X3 1.36
5 Tetracyclines X3 1.19
6 Macrolides Belgium 2.62
7 Penicillins Belgium 16.28
8 Cephalosporins Belgium 1.59
9 Quinolones Belgium 2.69
10 Tetracyclines Belgium 2.10
11 Macrolides Bulgaria 2.49
12 Penicillins Bulgaria 8.05
13 Cephalosporins Bulgaria 2.32
14 Quinolones Bulgaria 1.99
15 Tetracyclines Bulgaria 1.71
16 Macrolides Cyprus 2.86
17 Penicillins Cyprus 14.43
18 Cephalosporins Cyprus 5.41
19 Quinolones Cyprus 4.10
20 Tetracyclines Cyprus 3.27
21 Macrolides Czech 3.25
22 Penicillins Czech 7.60
23 Cephalosporins Czech 1.62
24 Quinolones Czech 1.22
25 Tetracyclines Czech 2.27
26 Macrolides Denmark 2.34
27 Penicillins Denmark 10.29
28 Cephalosporins Denmark 0.03
29 Quinolones Denmark 0.51
30 Tetracyclines Denmark 1.70
31 Macrolides Estonia 2.06
32 Penicillins Estonia 4.22
33 Cephalosporins Estonia 0.88
34 Quinolones Estonia 0.81
35 Tetracyclines Estonia 1.89
36 Macrolides Finland 1.23
37 Penicillins Finland 6.61
38 Cephalosporins Finland 2.33
39 Quinolones Finland 0.88
40 Tetracyclines Finland 4.09
41 Macrolides France 2.63
42 Penicillins France 15.62
43 Cephalosporins France 2.67
44 Quinolones France 2.00
45 Tetracyclines France 3.16
46 Macrolides Germany 2.09
47 Penicillins Germany 4.10
48 Cephalosporins Germany 2.61
49 Quinolones Germany 1.51
50 Tetracyclines Germany 2.74
51 Macrolides Greece 8.55
52 Penicillins Greece 12.87
53 Cephalosporins Greece 8.91
54 Quinolones Greece 2.89
55 Tetracyclines Greece 2.31
56 Macrolides Hungary 2.42
57 Penicillins Hungary 6.69
58 Cephalosporins Hungary 1.92
59 Quinolones Hungary 1.97
60 Tetracyclines Hungary 1.38
61 Macrolides Iceland 1.40
62 Penicillins Iceland 12.08
63 Cephalosporins Iceland 0.62
64 Quinolones Iceland 1.02
65 Tetracyclines Iceland 5.05
66 Macrolides Ireland 3.63
67 Penicillins Ireland 10.65
68 Cephalosporins Ireland 1.21
69 Quinolones Ireland 0.91
70 Tetracyclines Ireland 2.60
71 Macrolides Italy 4.98
72 Penicillins Italy 14.55
73 Cephalosporins Italy 2.55
74 Quinolones Italy 3.45
75 Tetracyclines Italy 0.53
76 Macrolides Lativa 1.03
77 Penicillins Lativa 5.59
78 Cephalosporins Lativa 0.57
79 Quinolones Lativa 0.91
80 Tetracyclines Lativa 2.38
81 Macrolides Lithuania 1.44
82 Penicillins Lithuania 6.99
83 Cephalosporins Lithuania 0.80
84 Quinolones Lithuania 0.83
85 Tetracyclines Lithuania 1.38
86 Macrolides Luxembourg 3.46
87 Penicillins Luxembourg 13.96
88 Cephalosporins Luxembourg 4.18
89 Quinolones Luxembourg 2.94
90 Tetracyclines Luxembourg 2.04
91 Macrolides Malta 2.97
92 Penicillins Malta 9.80
93 Cephalosporins Malta 5.04
94 Quinolones Malta 1.79
95 Tetracyclines Malta 1.02
96 Macrolides Netherlands 1.31
97 Penicillins Netherlands 4.36
98 Cephalosporins Netherlands 0.04
99 Quinolones Netherlands 0.87
100 Tetracyclines Netherlands 2.66
101 Macrolides Norway 1.55
102 Penicillins Norway 6.77
103 Cephalosporins Norway 0.12
104 Quinolones Norway 0.54
105 Tetracyclines Norway 2.77
106 Macrolides Poland 2.89
107 Penicillins Poland 9.43
108 Cephalosporins Poland 2.44
109 Quinolones Poland 1.23
110 Tetracyclines Poland 2.10
111 Macrolides Portugal 3.37
112 Penicillins Portugal 12.08
113 Cephalosporins Portugal 1.81
114 Quinolones Portugal 2.97
115 Tetracyclines Portugal 0.71
116 Macrolides Slovenia 1.89
117 Penicillins Slovenia 9.67
118 Cephalosporins Slovenia 0.40
119 Quinolones Slovenia 1.10
120 Tetracyclines Slovenia 0.04
121 Macrolides Spain 1.88
122 Penicillins Spain 12.64
123 Cephalosporins Spain 1.56
124 Quinolones Spain 2.54
125 Tetracyclines Spain 0.70
126 Macrolides Sweden 0.43
127 Penicillins Sweden 7.09
128 Cephalosporins Sweden 0.20
129 Quinolones Sweden 0.77
130 Tetracyclines Sweden 3.33
131 Macrolides UK 2.71
132 Penicillins UK 8.60
133 Cephalosporins UK 0.55
134 Quinolones UK 0.46
135 Tetracyclines UK 4.15
这是我制作条形图的代码和它的图片。如您所见,图表中的比例不正确,例如与其他抗生素相比,青霉素的使用价值非常高,但这没有显示在我的图表上。我不确定我做错了什么。
barchart <- ggplot(data=chart.new, aes(x = Country, y = DailyDosage, fill = Group, group = Group)) +
geom_bar(stat = "identity") +
coord_flip() +
scale_fill_manual(values = cbPalette) +
labs(title = "Antibiotic Consumption by Group ") +
theme(legend.position = "top")
与@DaveGruenewald 类似,我使用您的代码和数据得到了正确的值。我注意到你有 theme(legend.position = "top") 而你展示了一个带有图例的情节。是不是一样的代码,作为参考,你可以试试我下面的。
我从上面的 table 中使用的内容:
chart.new=dput(chart.new)
structure(list(Group = structure(c(2L, 3L, 1L, 4L, 5L, 2L, 3L,
1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L,
4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L,
5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L,
2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L,
3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L,
1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L,
4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L,
5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L, 2L, 3L, 1L, 4L, 5L
), .Label = c("Cephalosporins", "Macrolides", "Penicillins",
"Quinolones", "Tetracyclines"), class = "factor"), Country = structure(c(27L,
27L, 27L, 27L, 27L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L,
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L,
6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 9L, 9L, 9L,
9L, 9L, 10L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L, 11L, 12L,
12L, 12L, 12L, 12L, 13L, 13L, 13L, 13L, 13L, 14L, 14L, 14L, 14L,
14L, 15L, 15L, 15L, 15L, 15L, 16L, 16L, 16L, 16L, 16L, 17L, 17L,
17L, 17L, 17L, 18L, 18L, 18L, 18L, 18L, 19L, 19L, 19L, 19L, 19L,
20L, 20L, 20L, 20L, 20L, 21L, 21L, 21L, 21L, 21L, 22L, 22L, 22L,
22L, 22L, 23L, 23L, 23L, 23L, 23L, 24L, 24L, 24L, 24L, 24L, 25L,
25L, 25L, 25L, 25L, 26L, 26L, 26L, 26L, 26L), .Label = c("Belgium",
"Bulgaria", "Cyprus", "Czech", "Denmark", "Estonia", "Finland",
"France", "Germany", "Greece", "Hungary", "Iceland", "Ireland",
"Italy", "Lativa", "Lithuania", "Luxembourg", "Malta", "Netherlands",
"Norway", "Poland", "Portugal", "Slovenia", "Spain", "Sweden",
"UK", "X3"), class = "factor"), DailyDosage = c(2.85, 6.64, 1.7,
1.36, 1.19, 2.62, 16.28, 1.59, 2.69, 2.1, 2.49, 8.05, 2.32, 1.99,
1.71, 2.86, 14.43, 5.41, 4.1, 3.27, 3.25, 7.6, 1.62, 1.22, 2.27,
2.34, 10.29, 0.03, 0.51, 1.7, 2.06, 4.22, 0.88, 0.81, 1.89, 1.23,
6.61, 2.33, 0.88, 4.09, 2.63, 15.62, 2.67, 2, 3.16, 2.09, 4.1,
2.61, 1.51, 2.74, 8.55, 12.87, 8.91, 2.89, 2.31, 2.42, 6.69,
1.92, 1.97, 1.38, 1.4, 12.08, 0.62, 1.02, 5.05, 3.63, 10.65,
1.21, 0.91, 2.6, 4.98, 14.55, 2.55, 3.45, 0.53, 1.03, 5.59, 0.57,
0.91, 2.38, 1.44, 6.99, 0.8, 0.83, 1.38, 3.46, 13.96, 4.18, 2.94,
2.04, 2.97, 9.8, 5.04, 1.79, 1.02, 1.31, 4.36, 0.04, 0.87, 2.66,
1.55, 6.77, 0.12, 0.54, 2.77, 2.89, 9.43, 2.44, 1.23, 2.1, 3.37,
12.08, 1.81, 2.97, 0.71, 1.89, 9.67, 0.4, 1.1, 0.04, 1.88, 12.64,
1.56, 2.54, 0.7, 0.43, 7.09, 0.2, 0.77, 3.33, 2.71, 8.6, 0.55,
0.46, 4.15)), class = "data.frame", row.names = c(NA, 135L))
正在检查chart.new:
str(chart.new)
'data.frame': 135 obs. of 3 variables:
$ Group : Factor w/ 5 levels "Cephalosporins",..: 2 3 1 4 5 2 3 1 4 5 ...
$ Country : Factor w/ 27 levels "Belgium","Bulgaria",..: 27 27 27 27 27 1 1 1 1 1 ...
$ DailyDosage: num 2.85 6.64 1.7 1.36 1.19 ...
使用默认颜色:
ggplot(data=chart.new ,aes(x = Country, y = DailyDosage, fill = Group, group = Group))+
geom_bar(stat = "identity")+ coord_flip() +
labs(title = "Antibiotic Consumption by Group ")+
theme(legend.position = "top")