PSTricks

Существует, конечно, такая вещь как TikZ and PGF, но для графиков я пока испытал лишь PSTricks, который кстати умеет рисовать очень многое. Почти все приведенные дальше примеры используют возможности расширенного пакета pstricks-add
Простейший график можно нарисовать, например, вот так:
\begin{psgraph}[comma,arrows=->](0,0)(-1,-0.6)(5,0.6){.8\textwidth}{5cm}

  \psplot[plotpoints=200,algebraic]{-0.75}{5}{sin(4*x)/((4*x)^2+1)}
  \psxTick[linecolor=red](1.55){$x_0$}
  \resetOptions

\end{psgraph}


изображение в результате будет вот таким:
(кликабельно, по ссылке svg файлик, если уж интересно как оно в векторе выглядит. Т.к. тексты "написаны" с помощью кривых, то размеры svg относительно большие: 50 – 160 KiB) 
С помощью PSTricks можно настраивать вид осей, шкалы, формат, стили линий, метки на осях и многое другое. Проще всего объяснить примером с детальными комментариями, благодаря которым, надеюсь, всё понятно.
\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{pstricks-add}
\pagestyle{empty}

\begin{document}
\setcounter{figure}{1}

\begin{figure}[h]
 \centering
 % \psset "запоминает" настройки глобально
 \psset{xAxisLabel=$x_\nu$,% подпись оси x
        yAxisLabel=$y_\beta$,% подпись оси y
        ury=0.5cm,% отступ сверху графика
        algebraic,% способ задания функций
        plotstyle=ecurve}% стиль графика

\begin{psgraph}[comma,                          % запятая вместо точки в цифрах
                Dy=0.5,                                          % шаг по оси y
                xsubticks=5,              % количество "маленьких" засечек по x
                ysubticks=4,              % количество "маленьких" засечек по y
                arrows=->,                                    % стрелки на осях
                yticksize=-1 5,    % превращаем засечки в линии от -1 до 5 по x
                xticksize=-0.5 0.5,  % засечки в линии, теперь получилась сетка
                subticksize=1,% длинна младших засечек такая же как материнских
                ticklinestyle=dashed,                      % стиль линий "сетки"
                subticklinestyle=dotted,          % стиль линий вторичной сетки
                subtickwidth=.5pt]              % толщина линий вторичной сетки
                (0,0)                            % "координаты начала координат"
                (-1,-0.6)                                % диапазон изменения x
                (5,0.6)                                  % диапазон изменения y
                {.8\textwidth}{5cm}                 % размеры конечного графика

  % зададим для следующего графика стиль линии
  % штрих-пунктирная линия: 4мм линия 1мм пропуск 0.5мм линия(точка) и 1мм пропуск
  \psset{linestyle=dashed,dash=4mm 1mm .5mm 1mm}                  % стиль линий
  \pcline(3.8,-0.4)(4.4,-0.4)                              % линия для "легенды"
  \rput(4.8,-0.4){$\frac{sin(4 x)}{(4 x)^2+1}$}               % пояснение линии
  \psplot[plotpoints=200]{-0.75}{5}{sin(4*x)/((4*x)^2+1)}          % сам график
% plotpoints задано, потому, что иначе график выходит ломаный или вообще неправильный

  % отметка на оси х, где х=1.55
  \psxTick[linecolor=red](1.55){$x_0$}

  % а для следующего линия цельная с белой "каймой"
  \psset{linestyle=solid,border=1mm,bordercolor=white}
  \psline(2.4,-0.4)(2.9,-0.4)
  \rput(3.3,-0.4){$\frac{sin(x)}{x^2+1}$}
  \psplot{-0.75}{5}{sin(x)/(x^2+1)}

  % сброс всех настроек PSTricks в стандартные
  \resetOptions

\end{psgraph}
\caption{plot with labels}\label{plt:demo}
\end{figure}


\end{document}


В результате получится следующее:

Ну и еще парочка примеров:

Подписи на оси выраженные через Пи и сетка заданная отдельной командой

\psset{polarplot,labelFontSize=\scriptstyle}
\begin{psgraph}[yAxis=false,arrows=->](0,0)(-1,-1)(1,1){.5\textwidth}{!}
  \psplot[plotpoints=100,algebraic]{0}{3.5}{sin(x)*cos(4*x)}
\end{psgraph}

Полярные координаты

\psset{polarplot,labelFontSize=\scriptstyle}
\begin{psgraph}[yAxis=false,arrows=->](0,0)(-1,-1)(1,1){.5\textwidth}{!}
  \psplot[plotpoints=100,algebraic]{0}{3.5}{sin(x)*cos(4*x)}
\end{psgraph}

График полученный из внешних данных с логарифмической шкалой

\readdata{\data}{data.dat}
\pstScalePoints(1,1){}{log}

\psset{ury=0.5cm,lly=-0.5cm,algebraic,plotstyle=dots}% отступы от графика,
                  %алгебраический способ ввода формул, стиль графика
\begin{psgraph}[comma,arrows=->,%
                ylogBase=10,%
                logLines=y,
                Dx=5,
                Dy=1,%
                ysubticks=5,
                Oy=-2]%
               (0,-2)(50,2.1){.8\textwidth}{10cm}

  \listplot[linecolor=blue,linewidth=2pt,
           showpoints=true,dotstyle=o]{\data}
  \uput[270](10,0.5){$\dfrac{\sqrt{m^2+4}\pm m}{2}$}
  \resetOptions
\end{psgraph}

BarChart

\psset{xunit=1.20cm,yunit=.5cm}
\psset{yticksize=0 12cm}
\def\psvlabel#1{#1\,$\nu$}%дописывать ню к значениям на оси y


\begin{pspicture}(10,10)
  \psframe[fillstyle=solid,fillcolor=black!10,linestyle=none](0,0)(10,10)
  \psaxes[ticks=y,labels=y,Dx=1,Dy=1](0,0)(10,10)
  \readpsbardata[header=false]{\data}{demo.dat}
  \psbarchart[barstyle={white,blue,gray}]{\data}
  \psforeach{\nA}{\xText}{\stepcounter{Message}\rput[rb]{45}(\theMessage,-3mm){\nA}}
\end{pspicture}

PieChart

begin{pspicture}(-5,-5)(5,5)
\psChart[userColor={red!30,green!30,blue!40,gray,cyan!50,
magenta!60,cyan},chartSep=30pt,shadow=true,shadowsize=5pt]{
    35,15,25,20,5,3}{5,6}{3}
\psset{nodesepA=3mm,nodesepB=-3mm}
\ncline{psChartO1}{psChart1}\nput{0}{psChartO1}{70 (35\%)}
\ncline{psChartO2}{psChart2}\nput{0}{psChartO2}{30 (15\%)}
\ncline{psChartO3}{psChart3}\nput{0}{psChartO3}{50 (25\%)}
\ncline{psChartO4}{psChart4}\nput{0}{psChartO4}{40 (20\%)}
\ncline{psChartO5}{psChart5}\nput{0}{psChartO5}{10 (5\%)}
\ncline{psChartO6}{psChart6}\nput{0}{psChartO6}{6 (3\%)}
\bfseries%
\rput(psChartI1){Thingy}
\rput(psChartI2){Thingie}
\rput(psChartI3){Thingo}
\rput(psChartI4){Thinego}
\rput(psChartI5){Thango}
\rput(psChartI6){Thundo}
\end{pspicture}

тут:
\psChart[опции]{проценты каждого сектора}{номера выдвинутых секторов}{радиус}

График трёхмерной функции

\begin{pspicture}(-5,0)(15,10)
\psset{unit=30.0mm,Alpha=45, Beta=15,linecolor=blue!60,linewidth=1.5pt}
\infixtoRPN{y*x^(2)}
\psplotThreeD[linecolor=blue,drawStyle=xyLines](-1,1)(-1,1){\RPN}
\pstThreeDCoor[xMin=-.5, xMax=2.0, yMin=-.5, yMax=2.0, zMin=-.5, 
    zMax=1.5,linecolor=black,linewidth=0.6pt]
\end{pspicture}

Colored with dumpz.org