8

I would like to have a circle where the circumference is coloured with three different colours, something like the following but a line and with only three colours:

Like this

I initially tried

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}

\begin{tikzpicture}
    \draw [red] (0,0) arc [radius=1, start angle=0, end angle=120];
    \draw [green] (1,0) arc [radius=1, start angle=120, end angle=240];
    \draw [blue] (0,0) arc [radius=1, start angle=240, end angle=360];
\end{tikzpicture}

\end{document}

but this does not give the right result, and the arguments of the function are such that it's quite difficult to make what I have in mind.

  • 1
    Welcome to TeX.se. Please don't post code fragments. Instead put your code into a complete compilable document that people can play with. – Alan Munn May 8 '17 at 14:20
  • Sorry! Fixed it now, let me know if there's something else to fix. – whatamess May 8 '17 at 14:23
  • What do you have in mind exactly? We know what it isn't, but what is it? What do you mean by a line? – cfr May 8 '17 at 22:32
  • I actually had no precise idea of what I meant by "line" except for "something thinner than the picture". All of the answers below work well for what I need to do! – whatamess May 9 '17 at 8:30
3

The problem is that an arc of radius 1 from one coordinate (call it A) which starts at angle X and ends at angle Y will assume that A is at angle of X on the circumference of a circle with radius 1.

So your first arc assumes that (0,0) is at zero degrees on the circumference of a circle with radius 1. This means the centre of the circle must be at (-1,0).

But your second arc assumes that (1,0) is at 120 degrees on the circumference of a circle with radius 1. So the centre must be at (1.5,{.5*(sqrt(3))}.

Finally, your third arc assumes that (0,0) is at 240 degrees on the circumference of a circle with radius 1. So the centre must be at ({cos(60)},{sin(60)}).

[On the improbable assumption that I've not messed up the geometry at this hour of the night.]

I suggest using polar coordinates instead. Then your arcs can start at (0:1), (120:1) and (240:1) which makes things much simpler.

\documentclass[border=10pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw [red] (0:1) arc [radius=1, start angle=0, end angle=120];
  \draw [green] (120:1) arc [radius=1, start angle=120, end angle=240];
  \draw [blue] (240:1) arc [radius=1, start angle=240, end angle=360];
\end{tikzpicture}
\end{document}

joining up <code>arc</code>s

  • +1 for the explanation and for having read the question carefully! – CarLaTeX May 9 '17 at 5:02
10

I am posting this code, which is from a deleted answer by Zarko on a related question (TikZ: Circle with color transition). It is not my code, so I've made the answer Community Wiki.

\documentclass[border=5mm,tikz]{standalone}

\begin{document}
\begin{tikzpicture}[radius=32mm]
\foreach \i [count=\ii from 0] in {red, green, blue}
    \fill[\i] (0,0) -- (\ii*120:32mm)
                    arc[start angle=\ii*120,delta angle=120]
                    -- cycle;
    \fill[white] (0,0) circle (16mm);
\end{tikzpicture}
\end{document}

output of code

To add the white space between the parts, you can use \fill[\i, draw=white, very thick]. To make the bars thinner, adjust the size of white circle in the middle.

5

Edit:

cfr's comment made me read more carefully your question.

Of course, if you need only a line, you may increase the radius of the white internal circle, for example:

\documentclass{article}
\usepackage{tkz-euclide}
\usetkzobj{all}
\pagestyle{empty}
\begin{document}
    \begin{tikzpicture}
        \tkzDefPoint(0,0){O}
        \foreach \mycolor/\mygrad in {red/0,green/120,blue/240}
            \tkzDrawSector[R,draw=white,fill=\mycolor](O,1)(\mygrad,\mygrad+120);
        \fill[white] (0,0) circle (.95); % <--- here put the value you like
    \end{tikzpicture}
\end{document}

enter image description here

Original answer:

You could also use tkz-euclide package:

\documentclass{article}
\usepackage{tkz-euclide}
\usetkzobj{all}
\pagestyle{empty}
\begin{document}
    \begin{tikzpicture}
        \tkzDefPoint(0,0){O}
        \foreach \mycolor/\mygrad in {red/0,green/120,blue/240}
            \tkzDrawSector[R,draw=white,fill=\mycolor](O,1)(\mygrad,\mygrad+120);
        \fill[white] (0,0) circle (.5);  
    \end{tikzpicture}
\end{document}

enter image description here

  • The gaps look smooth and much better than no gaps IMO. Also there are gaps in the original image specified. – MCMastery May 9 '17 at 4:08
  • @MCMastery Thank you! Indeed, I put the gaps because they were in the original image. However, you may also easily avoid them, it's enough to write \draw=mycolor instead of \draw=white. – CarLaTeX May 9 '17 at 4:16
  • @MCMastery The original image misled us a bit, actually the OP asked for a line only... – CarLaTeX May 9 '17 at 5:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.