PSTricks
Существует, конечно, такая вещь как TikZ and PGF, но для графиков я пока испытал лишь PSTricks, который кстати умеет рисовать очень многое.
Почти все приведенные дальше примеры используют возможности расширенного пакета pstricks-add
Простейший график можно нарисовать, например, вот так:
изображение в результате будет вот таким:
В результате получится следующее:
тут:
\psChart[опции]{проценты каждого сектора}{номера выдвинутых секторов}{радиус}
Colored with dumpz.org
Простейший график можно нарисовать, например, вот так:
\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