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