Remove geom_text labels on every layer of stack
I have the following data.frame with which i want to make a ggplot:
> topmicegrn
Topic Antigen n tc
0 BCP 0.350533878 25193
0 HEL 0.344341682 25193
0 OVA 0.194974795 25193
0 RSV 0.110149645 25193
1 BCP 0.453020134 298
1 HEL 0.228187919 298
1 OVA 0.318791946 298
10 BCP 0.979310345 145
10 OVA 0.013793103 145
10 HEL 0.006896552 145
...
The plot looks like this atm:
ggplot(topmicegrn, aes(Topic, n, label=tc)) +
geom_bar(stat = "identity", aes(fill = Antigen)) +
geom_text(stat='identity', position = 'stack') +
scale_fill_brewer(palette="YlGnBu") +
coord_flip()
Now, i would like to keep only the 'tc'-label at the end of each bar (so one label per 'Topic'), and get rid of the ones on every stack. I tried with geom_text(aes(group=Topic))
, but it results in the same plot as shown.
Also, not every 'Topic' contains every 'Antigen', and the ordering is quite messy(the 'Topic' column is a factor which i ordered in a specific order), so using these solutions does not work for me. Any ideas?
r ggplot2
add a comment |
I have the following data.frame with which i want to make a ggplot:
> topmicegrn
Topic Antigen n tc
0 BCP 0.350533878 25193
0 HEL 0.344341682 25193
0 OVA 0.194974795 25193
0 RSV 0.110149645 25193
1 BCP 0.453020134 298
1 HEL 0.228187919 298
1 OVA 0.318791946 298
10 BCP 0.979310345 145
10 OVA 0.013793103 145
10 HEL 0.006896552 145
...
The plot looks like this atm:
ggplot(topmicegrn, aes(Topic, n, label=tc)) +
geom_bar(stat = "identity", aes(fill = Antigen)) +
geom_text(stat='identity', position = 'stack') +
scale_fill_brewer(palette="YlGnBu") +
coord_flip()
Now, i would like to keep only the 'tc'-label at the end of each bar (so one label per 'Topic'), and get rid of the ones on every stack. I tried with geom_text(aes(group=Topic))
, but it results in the same plot as shown.
Also, not every 'Topic' contains every 'Antigen', and the ordering is quite messy(the 'Topic' column is a factor which i ordered in a specific order), so using these solutions does not work for me. Any ideas?
r ggplot2
add a comment |
I have the following data.frame with which i want to make a ggplot:
> topmicegrn
Topic Antigen n tc
0 BCP 0.350533878 25193
0 HEL 0.344341682 25193
0 OVA 0.194974795 25193
0 RSV 0.110149645 25193
1 BCP 0.453020134 298
1 HEL 0.228187919 298
1 OVA 0.318791946 298
10 BCP 0.979310345 145
10 OVA 0.013793103 145
10 HEL 0.006896552 145
...
The plot looks like this atm:
ggplot(topmicegrn, aes(Topic, n, label=tc)) +
geom_bar(stat = "identity", aes(fill = Antigen)) +
geom_text(stat='identity', position = 'stack') +
scale_fill_brewer(palette="YlGnBu") +
coord_flip()
Now, i would like to keep only the 'tc'-label at the end of each bar (so one label per 'Topic'), and get rid of the ones on every stack. I tried with geom_text(aes(group=Topic))
, but it results in the same plot as shown.
Also, not every 'Topic' contains every 'Antigen', and the ordering is quite messy(the 'Topic' column is a factor which i ordered in a specific order), so using these solutions does not work for me. Any ideas?
r ggplot2
I have the following data.frame with which i want to make a ggplot:
> topmicegrn
Topic Antigen n tc
0 BCP 0.350533878 25193
0 HEL 0.344341682 25193
0 OVA 0.194974795 25193
0 RSV 0.110149645 25193
1 BCP 0.453020134 298
1 HEL 0.228187919 298
1 OVA 0.318791946 298
10 BCP 0.979310345 145
10 OVA 0.013793103 145
10 HEL 0.006896552 145
...
The plot looks like this atm:
ggplot(topmicegrn, aes(Topic, n, label=tc)) +
geom_bar(stat = "identity", aes(fill = Antigen)) +
geom_text(stat='identity', position = 'stack') +
scale_fill_brewer(palette="YlGnBu") +
coord_flip()
Now, i would like to keep only the 'tc'-label at the end of each bar (so one label per 'Topic'), and get rid of the ones on every stack. I tried with geom_text(aes(group=Topic))
, but it results in the same plot as shown.
Also, not every 'Topic' contains every 'Antigen', and the ordering is quite messy(the 'Topic' column is a factor which i ordered in a specific order), so using these solutions does not work for me. Any ideas?
r ggplot2
r ggplot2
edited Nov 13 '18 at 13:25
hrbrmstr
60.6k687148
60.6k687148
asked Nov 13 '18 at 13:24
ElArkElArk
52
52
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Dataset is incomplete but this may work.
You seem to have tc duplicated across row, so need to filter out the duplicates.
You could do it by creating a second simpler dataframe with just that data
Here is one way that does it:
library(tidyverse)
topmicegrn <-
read.table(text=
"Topic Antigen n tc
0 BCP 0.350533878 25193
0 HEL 0.344341682 25193
0 OVA 0.194974795 25193
0 RSV 0.110149645 25193
1 BCP 0.453020134 298
1 HEL 0.228187919 298
1 OVA 0.318791946 298
10 BCP 0.979310345 145
10 OVA 0.013793103 145
10 HEL 0.006896552 145",
header = T, stringsAsFactors = F)
topmicegrn_tc <-
topmicegrn %>%
group_by(Topic) %>%
summarise(tc = max(tc))
ggplot(topmicegrn, aes(Topic, n)) +
geom_bar(stat = "identity", aes(fill = Antigen)) +
scale_fill_brewer(palette="YlGnBu") +
coord_flip() +
geom_text(data = topmicegrn_tc,
aes(x= Topic, y = 1, label= tc),
stat='identity', hjust = 1)
Created on 2018-11-13 by the reprex package (v0.2.1)
Sorry for the incomplete data. Your solution sadly won't work since not all 'Topics' contain the Antigen you filtered for. The tc's are duplicated since it's the only way to append them to the df. In other words: There is one tc per Topic, and i need that tc displayed at the top of the bar.
– ElArk
Nov 13 '18 at 18:33
instead of duplicating the 'tc' in the dataframe, create a separate dataframe withTopic
andtc
; then use that for thedata =
argument in geom_text. you may also need to addinherit.aes=FALSE
– Matt L.
Nov 13 '18 at 19:36
edit above should work- you may need to create the separate dataframe differently, depending on how you calculated tc.
– Matt L.
Nov 13 '18 at 19:41
will try that tomorrow, thank you!
– ElArk
Nov 13 '18 at 19:54
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282014%2fremove-geom-text-labels-on-every-layer-of-stack%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Dataset is incomplete but this may work.
You seem to have tc duplicated across row, so need to filter out the duplicates.
You could do it by creating a second simpler dataframe with just that data
Here is one way that does it:
library(tidyverse)
topmicegrn <-
read.table(text=
"Topic Antigen n tc
0 BCP 0.350533878 25193
0 HEL 0.344341682 25193
0 OVA 0.194974795 25193
0 RSV 0.110149645 25193
1 BCP 0.453020134 298
1 HEL 0.228187919 298
1 OVA 0.318791946 298
10 BCP 0.979310345 145
10 OVA 0.013793103 145
10 HEL 0.006896552 145",
header = T, stringsAsFactors = F)
topmicegrn_tc <-
topmicegrn %>%
group_by(Topic) %>%
summarise(tc = max(tc))
ggplot(topmicegrn, aes(Topic, n)) +
geom_bar(stat = "identity", aes(fill = Antigen)) +
scale_fill_brewer(palette="YlGnBu") +
coord_flip() +
geom_text(data = topmicegrn_tc,
aes(x= Topic, y = 1, label= tc),
stat='identity', hjust = 1)
Created on 2018-11-13 by the reprex package (v0.2.1)
Sorry for the incomplete data. Your solution sadly won't work since not all 'Topics' contain the Antigen you filtered for. The tc's are duplicated since it's the only way to append them to the df. In other words: There is one tc per Topic, and i need that tc displayed at the top of the bar.
– ElArk
Nov 13 '18 at 18:33
instead of duplicating the 'tc' in the dataframe, create a separate dataframe withTopic
andtc
; then use that for thedata =
argument in geom_text. you may also need to addinherit.aes=FALSE
– Matt L.
Nov 13 '18 at 19:36
edit above should work- you may need to create the separate dataframe differently, depending on how you calculated tc.
– Matt L.
Nov 13 '18 at 19:41
will try that tomorrow, thank you!
– ElArk
Nov 13 '18 at 19:54
add a comment |
Dataset is incomplete but this may work.
You seem to have tc duplicated across row, so need to filter out the duplicates.
You could do it by creating a second simpler dataframe with just that data
Here is one way that does it:
library(tidyverse)
topmicegrn <-
read.table(text=
"Topic Antigen n tc
0 BCP 0.350533878 25193
0 HEL 0.344341682 25193
0 OVA 0.194974795 25193
0 RSV 0.110149645 25193
1 BCP 0.453020134 298
1 HEL 0.228187919 298
1 OVA 0.318791946 298
10 BCP 0.979310345 145
10 OVA 0.013793103 145
10 HEL 0.006896552 145",
header = T, stringsAsFactors = F)
topmicegrn_tc <-
topmicegrn %>%
group_by(Topic) %>%
summarise(tc = max(tc))
ggplot(topmicegrn, aes(Topic, n)) +
geom_bar(stat = "identity", aes(fill = Antigen)) +
scale_fill_brewer(palette="YlGnBu") +
coord_flip() +
geom_text(data = topmicegrn_tc,
aes(x= Topic, y = 1, label= tc),
stat='identity', hjust = 1)
Created on 2018-11-13 by the reprex package (v0.2.1)
Sorry for the incomplete data. Your solution sadly won't work since not all 'Topics' contain the Antigen you filtered for. The tc's are duplicated since it's the only way to append them to the df. In other words: There is one tc per Topic, and i need that tc displayed at the top of the bar.
– ElArk
Nov 13 '18 at 18:33
instead of duplicating the 'tc' in the dataframe, create a separate dataframe withTopic
andtc
; then use that for thedata =
argument in geom_text. you may also need to addinherit.aes=FALSE
– Matt L.
Nov 13 '18 at 19:36
edit above should work- you may need to create the separate dataframe differently, depending on how you calculated tc.
– Matt L.
Nov 13 '18 at 19:41
will try that tomorrow, thank you!
– ElArk
Nov 13 '18 at 19:54
add a comment |
Dataset is incomplete but this may work.
You seem to have tc duplicated across row, so need to filter out the duplicates.
You could do it by creating a second simpler dataframe with just that data
Here is one way that does it:
library(tidyverse)
topmicegrn <-
read.table(text=
"Topic Antigen n tc
0 BCP 0.350533878 25193
0 HEL 0.344341682 25193
0 OVA 0.194974795 25193
0 RSV 0.110149645 25193
1 BCP 0.453020134 298
1 HEL 0.228187919 298
1 OVA 0.318791946 298
10 BCP 0.979310345 145
10 OVA 0.013793103 145
10 HEL 0.006896552 145",
header = T, stringsAsFactors = F)
topmicegrn_tc <-
topmicegrn %>%
group_by(Topic) %>%
summarise(tc = max(tc))
ggplot(topmicegrn, aes(Topic, n)) +
geom_bar(stat = "identity", aes(fill = Antigen)) +
scale_fill_brewer(palette="YlGnBu") +
coord_flip() +
geom_text(data = topmicegrn_tc,
aes(x= Topic, y = 1, label= tc),
stat='identity', hjust = 1)
Created on 2018-11-13 by the reprex package (v0.2.1)
Dataset is incomplete but this may work.
You seem to have tc duplicated across row, so need to filter out the duplicates.
You could do it by creating a second simpler dataframe with just that data
Here is one way that does it:
library(tidyverse)
topmicegrn <-
read.table(text=
"Topic Antigen n tc
0 BCP 0.350533878 25193
0 HEL 0.344341682 25193
0 OVA 0.194974795 25193
0 RSV 0.110149645 25193
1 BCP 0.453020134 298
1 HEL 0.228187919 298
1 OVA 0.318791946 298
10 BCP 0.979310345 145
10 OVA 0.013793103 145
10 HEL 0.006896552 145",
header = T, stringsAsFactors = F)
topmicegrn_tc <-
topmicegrn %>%
group_by(Topic) %>%
summarise(tc = max(tc))
ggplot(topmicegrn, aes(Topic, n)) +
geom_bar(stat = "identity", aes(fill = Antigen)) +
scale_fill_brewer(palette="YlGnBu") +
coord_flip() +
geom_text(data = topmicegrn_tc,
aes(x= Topic, y = 1, label= tc),
stat='identity', hjust = 1)
Created on 2018-11-13 by the reprex package (v0.2.1)
edited Nov 13 '18 at 19:40
answered Nov 13 '18 at 16:16
Matt L.Matt L.
887513
887513
Sorry for the incomplete data. Your solution sadly won't work since not all 'Topics' contain the Antigen you filtered for. The tc's are duplicated since it's the only way to append them to the df. In other words: There is one tc per Topic, and i need that tc displayed at the top of the bar.
– ElArk
Nov 13 '18 at 18:33
instead of duplicating the 'tc' in the dataframe, create a separate dataframe withTopic
andtc
; then use that for thedata =
argument in geom_text. you may also need to addinherit.aes=FALSE
– Matt L.
Nov 13 '18 at 19:36
edit above should work- you may need to create the separate dataframe differently, depending on how you calculated tc.
– Matt L.
Nov 13 '18 at 19:41
will try that tomorrow, thank you!
– ElArk
Nov 13 '18 at 19:54
add a comment |
Sorry for the incomplete data. Your solution sadly won't work since not all 'Topics' contain the Antigen you filtered for. The tc's are duplicated since it's the only way to append them to the df. In other words: There is one tc per Topic, and i need that tc displayed at the top of the bar.
– ElArk
Nov 13 '18 at 18:33
instead of duplicating the 'tc' in the dataframe, create a separate dataframe withTopic
andtc
; then use that for thedata =
argument in geom_text. you may also need to addinherit.aes=FALSE
– Matt L.
Nov 13 '18 at 19:36
edit above should work- you may need to create the separate dataframe differently, depending on how you calculated tc.
– Matt L.
Nov 13 '18 at 19:41
will try that tomorrow, thank you!
– ElArk
Nov 13 '18 at 19:54
Sorry for the incomplete data. Your solution sadly won't work since not all 'Topics' contain the Antigen you filtered for. The tc's are duplicated since it's the only way to append them to the df. In other words: There is one tc per Topic, and i need that tc displayed at the top of the bar.
– ElArk
Nov 13 '18 at 18:33
Sorry for the incomplete data. Your solution sadly won't work since not all 'Topics' contain the Antigen you filtered for. The tc's are duplicated since it's the only way to append them to the df. In other words: There is one tc per Topic, and i need that tc displayed at the top of the bar.
– ElArk
Nov 13 '18 at 18:33
instead of duplicating the 'tc' in the dataframe, create a separate dataframe with
Topic
and tc
; then use that for the data =
argument in geom_text. you may also need to add inherit.aes=FALSE
– Matt L.
Nov 13 '18 at 19:36
instead of duplicating the 'tc' in the dataframe, create a separate dataframe with
Topic
and tc
; then use that for the data =
argument in geom_text. you may also need to add inherit.aes=FALSE
– Matt L.
Nov 13 '18 at 19:36
edit above should work- you may need to create the separate dataframe differently, depending on how you calculated tc.
– Matt L.
Nov 13 '18 at 19:41
edit above should work- you may need to create the separate dataframe differently, depending on how you calculated tc.
– Matt L.
Nov 13 '18 at 19:41
will try that tomorrow, thank you!
– ElArk
Nov 13 '18 at 19:54
will try that tomorrow, thank you!
– ElArk
Nov 13 '18 at 19:54
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282014%2fremove-geom-text-labels-on-every-layer-of-stack%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown