Aligning data label to the center of bar chart in ggplot2 - r

I need help to align the data labels for my bar graph in ggplot to the center of each bar just above the bar. Also month in the X axis are repeating. Kindly find my ggplot code for my shiny app below,
ggplot(data = chart_m, aes(x = `Reporting Month`, y = `Total tags generating alert`, fill = HSL)) +
geom_bar(stat = "identity", position = 'dodge') +
geom_text(aes(label = `Total tags generating alert`), position = position_dodge(width = .9), vjust = -.1, size = 6) +
scale_x_date(labels = date_format("%b-%y")) +
theme_grey()
For your reference i have attached the image. I need all the data labels to be aligned to each of the bar in the center.
expected output
Any inputs appreciated.
Regards,
Mohan

Related

ggplot - stacked bar-plot: Show mean of bars on top of each stacked bar

This is a screenshot of part of my stacked bar-plot. I would like to have the mean values of each of the bars on top of each of the stacked bars
I have tried to include another df with my means through geom_text in the code.
However, since the dfs differ in size it did not work I think. I also tried to directly include the mean through calculating it with the geom_text function. What are your suggestions?
ggplot(Df_class, aes(x = series, y = Class, group = Month, color = Month + label = Class)) + geom_col(position = "stack",show.legend = T) +
labs(x = "BG ID", y = "Class Total",title ="Class Total") +
theme(axis.text = element_text(colour = "black", size = rel(0.45))) +
geom_text(aes(Df_class_mean$Mean_Class, size = 3, nudge_y = 0, vjust = 0.45))

R ggplot2 - align theme grid with axis tick lines

I have a ggplot2 barchart for which I changed the axis ticks. However, the panel grid is adding additional lines that I do not want. How do I remove them?
My problems:
I only want the vertical grid lines that match the x-axis ticks.
The position dodge preserve is not working correctly due to having a group and a fill.
My code:
ggplot(byyear, aes(x = year, y = count, group = venue, colour = venue, fill = type)) +
geom_bar(stat = "identity", position=position_dodge(preserve = "single")) +
# BORDER SO I CAN DISTINGUISH THEM
scale_colour_manual(name = "Venue", values = c("#FFFFFF", "#FFFFFF")) +
# MAKE ALL YEARS APPEAR
scale_y_continuous(labels = number_format(accuracy = 1)) +
scale_x_continuous(breaks = unique(byyear$year)) +
theme(legend.position="bottom",
axis.text.x = element_text(angle = 90, hjust = 1))
The data is of the structure:
year,venue,type,count
2010,venue1,type1,163
2010,venue1,type2,18
2011,venue1,type1,16
...
The plot that I'm obtaining is the following (I removed the legend on the plot)

Adjust the starting position of bar plots in ggplot [duplicate]

This question already has answers here:
Force the origin to start at 0
(4 answers)
Closed 2 years ago.
I was wondering if there is a way for me to adjust the location where the notches of the axis meet the edge of the bar plot. If you see in the image below all the notches of the x-axis line up in the center of the bar, I would like them to line up with the left edge of the bar! Is this possible?
Edit: Heres what my code looks like
hr6_xy = data.frame(hr6_bins, hr6_Occur)
hr6_plot = ggplot(hr6_xy, aes(hr6_bins, hr6_Occur)) +
geom_bar(stat = "identity",
color = 'black', fill = 'pink', width = 1)
hr6_plot = hr6_plot + theme_bw()
hr6_plot = hr6_plot + ggtitle("hr6 (68 sites)")
hr6_plot = hr6_plot + xlab("Distance to TSS from Motif Center, kb")
hr6_plot = hr6_plot + ylab("Occurances")
hr6_plot
Two ways I can think of:
(a) shift the position of the bars with position_nudge
ggplot(data = iris, aes(y=Sepal.Length, x = Species)) +
geom_bar(stat = "summary", width = 0.8,
position = position_nudge(x = 0.4))
(b) shift the position of the ticks on the x-axis with scale_x_continuous
ggplot(data = iris, aes(y=Sepal.Length, x = as.numeric(Species))) +
geom_bar(stat = "summary", width = 0.8) +
scale_x_continuous(breaks = c(0.6, 1.6, 2.6),
labels = levels(iris$Species))

Custom different sizes of labels in a stacked bar chart (ggplot2)

I want to customize different sizes for the labels inside a stacked barchart using ggplot2.
For example, a size 4 in the green bar, a size 3 in the light green, a size 2 in the yellow and so on. Below there is a link with an image of the plot. I cant figure out how to do it.
This is the code
ggplot(data, aes(x = as.factor(id), y=value, fill = cat, label = value)) +
geom_bar(stat = "identity", alpha=0.5) +
geom_text(size = 2.5, position = position_stack(vjust = 0.7)) +
scale_fill_manual(values=c("#1E8E6B", "#6FBC84", "#FEEF51", "#EF6541", "#E81329"))
I want for example
As #teunbrand mentioned, put your size= into aes() so that ggplot2 uses that as an aesthetic mapped to cat, and then use scale_size_manual() to set the sizes just like you already have done with the fill=.
ggplot(data, aes(x = as.factor(id), y=value, fill = cat, label = value)) +
geom_bar(stat = "identity", alpha=0.5) +
geom_text(aes(size = cat), position = position_stack(vjust = 0.7)) +
scale_fill_manual(values=c("#1E8E6B", "#6FBC84", "#FEEF51", "#EF6541", "#E81329")) +
scale_size_manual(values=c(4,3,2.5,2,1.5))
You can change the sizes however you wish or set values with a seq() function.

width and gap of geom_bar (ggplot2)

I want to make bar plots using ggplot. After plotting when i do export > copy to clipboard and then try to adjust the size of my plot, the gaps between the bars change as I change the size of the plot (the gaps between the bars change its position).
I hope I am clear on this. I have used the following code:
ggplot(df, aes(Day, Mean)) +
geom_histogram(stat = "identity", position = "stack") +
theme(axis.text = element_text(size=12, colour = 'black')) +
ylim(0, 50) + xlim(0, 365)
I have tried using both geom_bar and geom_histogram, both seems to give the same plot. And the gaps between the bars changes as I adjust the size.
P.S. I have to plot 365 bars, each one representing one day of a year.
Feel free to edit the question, if you think that i am unclear.
This is the plot produced with the code. You can clearly see the uneven gaps in between.
here is the data:
data
Edit
data
df <- data.frame(Mean=c(0,0,0,0,0,0,0.027272727,0,0.409090909,0.009090909,0,0,0,0,0,0.054545455,0.036363636,0.118181818,0.327272727,0.254545455,0,0,1.609090909,1.636363636,0,0.181818182,1.2,0.090909091,0.409090909,0.418181818,1.018181818,0.409090909,0.127272727,0.072727273,0.054545455,1.2,0.127272727,0.290909091,0,0.518181818,0.254545455,0.454545455,1.545454545,1.1,1.763636364,0,0.136363636,0.7,0.445454545,1.954545455,0.018181818,0,2.618181818,0,0,3.518181818,7.645454545,2.709090909,5.909090909,0.9,1.109090909,2.354545455,0.418181818,0.272727273,0,0,1.636363636,0,2.927272727,0.472727273,1,0,2.109090909,0.490909091,0.827272727,2.663636364,4.8,0.554545455,6.3,3.936363636,2.218181818,0.045454545,0,7.109090909,0,3.745454545,3.009090909,8.818181818,6,21.99090909,2.845454545,3.918181818,1.4,12.32727273,1.136363636,4.345454545,1.018181818,2.927272727,12.53636364,2.618181818,0.709090909,5.645454545,5.345454545,3.181818182,2.681818182,13.96363636,3.990909091,9.9,12.54545455,8.545454545,11.43636364,6.281818182,1.836363636,11.4,4.827272727,16.14545455,3.581818182,1.972727273,3.4,4.472727273,18.86363636,5,11.4,5.790909091,3.745454545,1.072727273,2.581818182,5.063636364,12.42727273,9.2,10.85454545,15.18181818,5.963636364,22.53636364,5.027272727,7,4.572727273,7.190909091,15.42727273,7.3,23.48181818,30.87272727,19.62727273,6.463636364,16.20909091,9.509090909,5.1,8.127272727,5.890909091,11.84545455,10.14545455,4.518181818,15.23636364,22.41818182,21.62727273,7.245454545,19.56363636,33.94545455,26.98181818,9.027272727,11.28181818,20.44545455,27.52727273,23.25454545,28.77272727,20.04545455,30.68181818,28.32727273,12.38181818,13.54545455,18.17272727,12.97272727,38.14545455,20.2,14.30909091,39.44545455,34.4,34.49090909,23.32727273,29.37272727,50.68181818,23.2,16.28,35.02,49,18.86,30.96,37.83,33.01,44.31,25.51,33.76,15.05,24.8,8.99,15.72,41.31,41.47,28.12,44.22,30.63,37.35,15.72,12.86,21.89,18.02,6.32,4.73,24.16,29.12,11.58,24.25,22.69,15.7,24.36,20.05,17.19,26.71,17.84,16.53,9.3,5.11,10.97,19.95,5.65,29.88,34.95,24.14,32.09,9.85,17.49,13.72,7.97,26.21,24.9,26.45,14.1,9.52,18.64,13.43,15.17,26.61,9.84,24.9,16.42,19.58,17.58,22.96,39.61,22.83,15.49,23.64,16.71,3.96,10.17,19.04,28.42,16.64,4.95,9.73,13.45,11.67,8.02,8.71,8.31,17.65,8.41,7.19,11.94,5.15,5.54,5.21,0.88,0.96,6.18,9.46,10.24,17.29,8.95,16.51,6.31,11.4,5.05,8.28,0.26,0,6.19,1.02,0.99,0.94,1.87,0,0.21,3.32,3.33,7.82,2.65,5.21,0.49,1.59,0.05,2.25,0,0,1.09,0.42,0,0.05,0.02,0,0.18,0,0.02,0.05,0.09,0.01,1.01,0,0,2.38,0.42,0.65,0,0,0,0.4,0,0,0,0,0.18,0,0,0,0,0,0.63,0,0,0,0.1,0,0,0,0,0,1.35,0,0,0,0,0,1.62,0.2,0,0,0,1.3,0,0,0,0,0.89,4.55,0), Day=seq(1, 365, 1))
Setting the width to a small value and specifying the color gives me the desired result with gaps between all bars:
ggplot(df, aes(x = Day, y = Mean)) +
geom_bar(stat = "identity", width = 0.1, color = "black") +
theme_bw() +
theme(axis.text = element_text(size = 12))
the resulting plot:
If you want no gaps, use width = 1:
ggplot(df, aes(x = Day, y = Mean)) +
geom_bar(stat = "identity", width = 1) +
theme_bw(base_size = 12)
the resulting plot:
Same problem but with side-by-side bars will be resolved using the width within the position element:
geom_bar(width=0.1, position = position_dodge(width=0.2))

Resources