If by graphs you mean the thing that is typically used in the sciences, and that shows how one variable depends on another variable (for example temperature as a function of time-of-day), then gnuplot is the default free tool. It is somewhat inflexible, slow to use (you have to prepare input files in gnuplot format), hard to interface with existing data sources (you have to extract the data and convert it to gnuplot files), and the graphs end up looking pretty boring.
More modern tools exist. Jose pointed out the R language, which has a graphing tool built in. I happen to like Jupyter notebooks, which allow one to program in Python (with all the ease of accessing data sources from there), then use pandas / pyplot / matplotlib / numpy.
On the other hand, if by graphs you mean generic drawings (for example showing data structures like trees, or showing circuit diagrams with resistors and transistors), then the generic solution is dot. It is a generic language for putting graphical elements (markers, dots, lines, rectangles, circles ...) in particular places. Usually, dot files are written by other programs or scripts, which convert the raw data.