matplotlib
我正在使用颜色图绘制一些东西matplotlib.cm.rainbow
。我需要在我的 LaTeX 文档中匹配相同的颜色,但我很难使绘图上的颜色与 LaTeX 文档中的颜色相匹配。
我要怎么做才能让 matplotlib 和 LaTeX 使用相同的颜色?即使接近也会有好处。
我用来绘图的代码matplotlib
是:
import matplotlib.pyplot as pyplot
Fig, ax = pyplot.subplots()
indices = range(8)
length = len(indices)
print("\ncolors: ")
for i in range(length-1):
left = indices[i]
right = indices[i+1]
c = pyplot.cm.rainbow(i/length)
print("i={}, color={}".format(i,c))
ax.fill_between((left,right), 0,1,
facecolor=c, edgecolor=c, alpha=0.25)
# Do the last one
i +=1
left = indices[i]
right = 8
c = pyplot.cm.rainbow(1.0)
print("i={}, color={}".format(i,c))
ax.fill_between((left,right), 0,1,
facecolor=c, edgecolor=c, alpha=0.25)
输出结果如下:
colors:
i=0, color=(0.5, 0.0, 1.0, 1.0)
i=1, color=(0.24901960784313726, 0.38410574917192586, 0.98063477046897773, 1.0)
i=2, color=(0.0019607843137254832, 0.70928130760585339, 0.92328910610548931, 1.0)
i=3, color=(0.25294117647058822, 0.92563765978155632, 0.83018403081555059, 1.0)
i=4, color=(0.50392156862745097, 0.99998102734872685, 0.70492554690614728, 1.0)
i=5, color=(0.75490196078431371, 0.92090551794495368, 0.55236497296050591, 1.0)
i=6, color=(1.0, 0.70054303759329106, 0.37841105004231035, 1.0)
i=7, color=(1.0, 1.2246467991473532e-16, 6.123233995736766e-17, 1.0)
我使用输出来定义 LaTeX 中的颜色:
\definecolor{colorA}{cmyk}{0.5 , 0.0 , 1.0 , 0.0}
\definecolor{colorB}{cmyk}{0.2490 , 0.3841 , 0.9806 , 0.0}
\definecolor{colorC}{cmyk}{0.0019 , 0.7092 , 0.9232 , 0.0}
\definecolor{colorD}{cmyk}{0.2529 , 0.9256 , 0.8301 , 0.0}
\definecolor{colorE}{cmyk}{0.5039 , 0.9999 , 0.7049 , 0.0}
\definecolor{colorF}{cmyk}{0.7549 , 0.9209 , 0.5523 , 0.0}
\definecolor{colorG}{cmyk}{1.0 , 0.7005 , 0.37841 , 0.0}
\definecolor{colorH}{cmyk}{1.0 , 1.2246 , 6.12323 , 0.0}
colortbl
最后,我使用命令在表格(带有包)中使用颜色
\rowcolor{colorA!25} 1 & ...
但是,图中的颜色与表格中的颜色不匹配,这让我很恼火,为什么它不起作用。与purple, blue, aqua, ...
图中所示的(我知道这些不是技术颜色名称)不同,我得到的颜色是green, orange, orange red, red, gray red, violet, blue,...
这些颜色甚至不接近。
答案1
您的问题很简单,它pyplot.cm.rainbow
不返回 CMYK 值,而是返回 RGB + alpha。摘自文档字符串:
返回
如果 X 是标量,则为 RGBA 值的元组,否则为具有形状的 RGBA 值数组
X.shape + (4, )
。
因此,通过使用
\definecolor{colorname}{rgb}{a,b,c}
a,b,c
前三个值来自哪里rainbow
,颜色匹配。(请colorH
注意g
和b
值(非常接近)0,而不是 1.22 和 6.12,但这可能只是复制粘贴错误。)
\documentclass{article}
\usepackage{graphicx}
\usepackage[table]{xcolor}
\definecolor{colorA}{rgb}{0.5 , 0.0 , 1.0 }
\definecolor{colorB}{rgb}{0.2490 , 0.3841 , 0.9806 }
\definecolor{colorC}{rgb}{0.0019 , 0.7092 , 0.9232 }
\definecolor{colorD}{rgb}{0.2529 , 0.9256 , 0.8301 }
\definecolor{colorE}{rgb}{0.5039 , 0.9999 , 0.7049 }
\definecolor{colorF}{rgb}{0.7549 , 0.9209 , 0.5523 }
\definecolor{colorG}{rgb}{1.0 , 0.7005 , 0.37841 }
\definecolor{colorH}{rgb}{1.0 , 0.0 , 0.0 }
\begin{document}
\includegraphics{colors}
\begin{tabular}{*{8}{c}}
\cellcolor{colorA!25}\phantom{\rule{1cm}{4cm}} &
\cellcolor{colorB!25}\phantom{\rule{1cm}{4cm}} &
\cellcolor{colorC!25}\phantom{\rule{1cm}{4cm}} &
\cellcolor{colorD!25}\phantom{\rule{1cm}{4cm}} &
\cellcolor{colorE!25}\phantom{\rule{1cm}{4cm}} &
\cellcolor{colorF!25}\phantom{\rule{1cm}{4cm}} &
\cellcolor{colorG!25}\phantom{\rule{1cm}{4cm}} &
\cellcolor{colorH!25}\phantom{\rule{1cm}{4cm}}
\end{tabular}
\end{document}