简体   繁体   English

ggplot2 上的堆积条形图显示错误数据

[英]Stacked bar chart on ggplot2 presenting wrong data

SOLVED: the issue was that the classes were set as characters rather than factor/numeric已解决:问题是类被设置为字符而不是因子/数字

I am trying to make a stacked bar chart from a long format data frame which I've created.我正在尝试从我创建的长格式数据框制作堆积条形图。 The bar chart does come up correctly format wise but the data is incorrect to what is in the data frame.条形图确实以正确的格式出现,但数据与数据框中的数据不正确。 Here is my data:这是我的数据:

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

This is the code for how I made the bar chart and a picture of it.这是我如何制作条形图和它的图片的代码。 As you can see the proportions in the chart are incorrect, eg The values for Penicillin use is very high compared the rest of the antibiotics but this isn't shown on my chart.如您所见,图表中的比例是不正确的,例如,与其他抗生素相比,青霉素的使用值非常高,但这并未显示在我的图表中。 I'm not sure what I've done incorrectly.我不确定我做错了什么。

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")

图形

Similar to @DaveGruenewald, I got the correct values using your code and data.与@DaveGruenewald 类似,我使用您的代码和数据获得了正确的值。 I noticed you had theme(legend.position = "top") while you showed a plot with legend on the side.我注意到你有 theme(legend.position = "top") 而你展示了一个带有图例的情节。 Is it the same code, for reference you can try what I have below.它是相同的代码,作为参考,您可以尝试我下面的代码。

What I used from your table above:我从上表中使用的内容:

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

Checking chart.new:检查 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 ...

Using the default colors:使用默认颜色:

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")

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM