如何使用 tikz 创建具有现代化外观的圆形计分器?

如何使用 tikz 创建具有现代化外观的圆形计分器?

我如何才能创建一个像图片中那样的“分数计数器”,以便我可以为任何圆圈设置最大值并根据需要添加尽可能多的同心圆(关于同一事物的计数器)?圆的直径应适合其内容,以便我们可以在里面使用小或大项目(例如本例中的 4790K 和 G32558)。

在此处输入图片描述

\documentclass{article}

\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}

    \end{tikzpicture}
\end{document}

答案1

编辑:修正版本中cnt radius确实有一个半径!

这是一个使用以下方法的解决方案:

  • cnt radius固定内部半径的关键,
  • cnt min line width键设置圆圈的宽度,
  • cnt max line width键设置圆弧的宽度,
  • cnt添加新的现代计数器的关键,
  • cnt label样式来定制中央标签。

在此处输入图片描述

\documentclass[tikz]{standalone}
\tikzset{
  cnt radius/.store in=\minradius,
  cnt min line width/.store in=\minlinewidth,
  cnt max line width/.store in=\maxlinewidth,
  cnt add val/.code n args={3}{% arguments: color, diameter, proportion
    \begin{pgfinterruptpath}
    \draw[line width={\maxlinewidth*.8},draw=#1,line cap=round,
    ]
    (\tikzlastnode) ++(90:{(#2)/2}) arc(90:{90-((#3)*360)}:{(#2)/2});
    \end{pgfinterruptpath}
  },
  cnt/.style args={#1 color #2 with #3}{% arguments: number, color, proportion
    circle,inner sep=0,node contents={},draw=#2,line width=\minlinewidth,
    minimum size={2*\minradius+(#1*2*\maxlinewidth)},append after command={
      \pgfextra{\pgfkeysalso{/tikz/cnt add val={#2}{2*\minradius+(#1*2*\maxlinewidth)}{#3}}}
    },
  },
  cnt label/.style={text=#1,font=\sffamily\bfseries,yscale=1.2,align=flush center},
}

\begin{document}
\begin{tikzpicture}
  \begin{scope}[cnt radius=1.5cm,cnt min line width=.5mm,cnt max line width=3mm]
    \node[cnt=1 color lime with .7];
    \node[cnt=2 color orange with .8];
    \node[cnt=3 color cyan!50!black with .9];
    \node[cnt label=cyan!50!black,text width=3cm]{\Huge 4790K};
  \end{scope}
\end{tikzpicture}
\end{document}

答案2

一个解决方案

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}

\usepackage{xcolor}

\begin{document}

\begin{tikzpicture}
\coordinate (orig) at (0,0);
% 
\def\decal {0.4cm}
\def\stepC {0.25cm}

% Current et max values
\def\VoltageC {1.3}
\def\VoltageMax {1.5}
\def\TempC {6.5}
\def\TempMax {8.0}
\def\PwC {4800sp}
\def\PwMax {5000sp}

% width for text inside
\def\textWIDTH {5cm}


%command for plotting  circles
\newcommand{\CircleScore}[4]{%
  \draw (orig) circle (#1);
  \draw[line width=5pt,#4] (orig) ++(90:#1) arc (90:90-360*#2/#3:#1);
}

\node[anchor=center,at=(orig),text width=\textWIDTH,text centered,rectangle](txtC){\textbf{blablalalallalalalalallaalalK}};

%plot circles
\CircleScore{\textWIDTH/2+\decal}{\VoltageC}{\VoltageMax}{green!50!black}
\CircleScore{\textWIDTH/2+\decal+\stepC}{\TempC}{\TempMax}{orange!50!black}
\CircleScore{\textWIDTH/2+\decal+2*\stepC}{\PwC}{\PwMax}{blue!50!black}

\end{tikzpicture}

\end{document}

细节: 拟合不是自动的。您必须指定 的值\textWIDTH。对于其他数据值,您必须更改变量\VoltageC\VoltageMax\TempC\TempMax和的值\PwC\PwMax此解决方案可以改进。

注意:sp当我指定“大”整数时,我会使用单位来避免dimension too large错误

结果:

例子

答案3

替代解决方案:

\documentclass[tikz,border=1mm]{standalone}
    \usetikzlibrary{calc}

    \begin{document}
\begin{tikzpicture}[
     start angle = 90,
    Score/.style = {name=#1,
                   shape=circle, inner sep=0pt, %draw,
                   font=\Large}
                   ]
    \def\scoreWIDTH{10mm}
\node[Score=c1] {4790K};
%score list
\foreach[count=\xi from 0] \i/\j in {red/0.9, blue/0.7, yellow/0.8}
{
\draw[\i]   (c1) circle (\scoreWIDTH+1.2*\xi mm);
\draw[line width=1mm,\i]
            (c1) + (0,\scoreWIDTH+1.2*\xi mm) arc[radius=\scoreWIDTH+1.2*\xi mm,
                                              delta angle=-\j*360];
}
\end{tikzpicture}
    \end{document}

您将分数列表和所需的颜色放入\foreach循环中,线宽定义为的参数\draw。 如需更多颜色,您需要添加\color或更好的\xcolor包并选择所需的颜色。

在此处输入图片描述

答案4

用以下方法很容易画出这些线wheelchart帮助:

\documentclass[tikz, border=2mm]{standalone}
\usepackage{wheelchart}

%#1-Percentatge
%#2-Radius
%#3-Color
\newcommand{\wheelline}[3]{%
\wheelchart[data={}, radius={#2-\WCvarC}{#2+\WCvarC},
slices start arc={1}{0}, slices end arc={1}{0}
]{%
#1/#3/0.15,
{100-#1}/#3/0.05%
}}

\begin{document}
\begin{tikzpicture}
\wheelline{65}{2}{lime}
\wheelline{75}{2.4}{orange}
\wheelline{85}{2.8}{cyan!80!black}
\node[font=\sffamily\bfseries\Huge, text=cyan!80!black] {4790K};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容