I am trying to plot the graph using ggplot2
So I have the following dataframe:
iter se perf name 1 V1 0.6463573 12.8 e 2 V2 0.3265986 16.8 e 3 V3 0.2333333 19.1 e 4 V4 0.1000000 19.9 e 5 V5 0.0000000 20.0 e 6 V1 0.7483315 12.6 f 7 V2 0.6333333 16.3 f 8 V3 0.6798693 18.8 f 9 V4 0.2236068 19.5 f 10 V5 0.1000000 19.9 f
and I am trying to plot it in the format similar to this page (under Line graphs).
So here is the code for plotting:
pd <- position_dodge(.1) ggplot(df, aes(x=iter, y=perf, colour=name)) + geom_errorbar(aes(ymin=perf-se, ymax=perf+se), width=.1, position=pd) + geom_line(position=pd) + geom_point(position=pd)+ ylim(0, 20)
and it is working nicely: , except that I want these dots to be connected. I tried to add group=1
or group=name
to this part aes(x=iter, y=perf, colour=name)
but it did not help.
I also get these warnings:
ymax not defined: adjusting position using y instead ymax not defined: adjusting position using y instead geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?
After looking in the internet, I found that the first two are due to position_dodge, but I think it is because of the ggplot, the third one is actually because of my disconnected points.
Any ideas how to connect them?
Default grouping in ggplot2If x or y are categorical variables, the rows with the same level form a group. Users often overlook this type of default grouping. If aesthetic mapping, such as color , shape , and fill , map to categorical variables, they subset the data into groups.
geom_line() connects them in order of the variable on the x axis. geom_step() creates a stairstep plot, highlighting exactly when changes occur. The group aesthetic determines which cases are connected together.
The group aesthetic controls which rows of the data get grouped together for geom like geom_line() and geom_smooth() which use multiple rows to create one “thing” on the plot. When using geom_line() and color is discrete, group is automatically set to match it, so you get, for example, one line of each color.
To change line width, just add argument size=2 to geom_line().
You need to adjust the group aesthetic, replace :
geom_line(position=pd)
by
geom_line(position=pd,aes(group=name))
check whether the data type is factor by using is.factor(x)
, if it is TRUE
, then use as.integer
function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With