用法:
Styler.to_latex(buf=None, *, column_format=None, position=None, position_float=None, hrules=None, clines=None, label=None, caption=None, sparse_index=None, sparse_columns=None, multirow_align=None, multicol_align=None, siunitx=False, environment=None, encoding=None, convert_css=False)
將 Styler 寫入 LaTeX 格式的文件、緩衝區或字符串。
- buf:str,路徑對象,file-like 對象,或無,默認無
字符串、路徑對象(實現
os.PathLike[str]
)或 file-like 對象實現字符串write()
函數。如果為 None,則結果以字符串形式返回。- column_format:str,可選
放置在以下位置的 LaTeX 列規範:
\開始{表格}{<column_format>}
對於索引和非數字數據列,默認為 ‘l’,對於數字數據列,默認為 ‘r’,如果
siunitx
為True
,則為“S”。- position:str,可選
放置在位置的表格的 LaTeX 位置參數(例如“h!”):
\\begin{table}[<position>]
。- position_float:{“centering”, “raggedleft”, “raggedright”},可選
放置在以下位置的 LaTeX 浮點數命令:
\begin{table}[<位置>]
\<position_float>
如果
environment
是“longtable”,則不能使用。- hrules:bool
設置為
True
以添加 {booktabs} LaTeX 包中的 \toprule、\midrule 和 \bottomrule。默認為pandas.options.styler.latex.hrules
,即False
。- clines:str,可選
用於控製為索引標簽分隔添加 \cline 命令。可能的值為:
None
: no cline commands are added (default).“all;data”
: a cline is added for every index value extending the width of the table, including data entries.“all;index”
: as above with lines extending only the width of the index entries.“skip-last;data”
: a cline is added for each index value except the last level (which is never sparsified), extending the widtn of the table.“skip-last;index”
: as above with lines extending only the width of the index entries.
- label:str,可選
LaTeX 標簽包括為:\label{<label>}。這與主 .tex 文件中的 \ref{<label>} 一起使用。
- caption:str,元組,可選
如果是字符串,則 LaTeX 表格標題包含為:\caption{<caption>}。如果是元組,即 (“full caption”, “short caption”),標題包含為:\caption[<caption[1]>]{<caption[0]>}。
- sparse_index:布爾型,可選
是否稀疏顯示分層索引。設置為 False 將在每行的分層鍵中顯示每個顯式級別元素。默認為
pandas.options.styler.sparse.index
,即True
。- sparse_columns:布爾型,可選
是否稀疏顯示分層索引。設置為 False 將在每列的分層鍵中顯示每個顯式級別元素。默認為
pandas.options.styler.sparse.columns
,即True
。- multirow_align:{“c”, “t”, “b”, “naive”},可選
如果稀疏分層 MultiIndexes 是否使用 multirow 包在頂部或底部居中對齊文本。如果沒有給出默認值
pandas.options.styler.latex.multirow_align
,即“c”
。如果給定“naive”,則渲染沒有多行。- multicol_align:{“r”, “c”, “l”、“naive-l”、“naive-r”},可選
如果稀疏分層 MultiIndex 列,是否將文本左對齊、居中對齊或右對齊。如果沒有給出默認值
pandas.options.styler.latex.multicol_align
,即 “r”。如果給出了一個幼稚的選項,則呈現沒有 multicol。管道裝飾器也可以添加到非天真的值以繪製垂直規則,例如“|r” 將在右對齊合並單元格的左側繪製一條規則。- siunitx:布爾值,默認為 False
設置為
True
以構建與 {siunitx} 包兼容的 LaTeX。- environment:str,可選
如果給定,將替換
\\begin{table}
中的 ‘table’ 的環境。如果指定了‘longtable’,則會呈現更合適的模板。如果沒有給出默認值pandas.options.styler.latex.environment
,即None
。- encoding:str,可選
字符編碼設置。默認為
pandas.options.styler.render.encoding
,即 “utf-8”。- convert_css:布爾值,默認為 False
將簡單的cell-styles 從 CSS 轉換為 LaTeX 格式。任何未在轉換表中找到的 CSS 都會被刪除。可以通過添加選項
-latex
來強製樣式。見注釋。
- str 或 None
如果
buf
為 None,則將結果作為字符串返回。否則返回None
。
參數:
返回:
注意:
乳膠包
對於以下函數,我們推薦以下 LaTeX 包含:
特征
包容性
稀疏列
none:包含在默認 {tabular} 環境中
稀疏行
\usepackage{多行}
hrules
\usepackage{booktabs}
colors
\usepackage[table]{xcolor}
siunitx
\使用包{siunitx}
粗體(帶 siunitx)
\usepackage{etoolbox}\robustify\bfseries\sisetup{detect-all = 真}(在 {document} 內)斜體(帶有 siunitx)
\usepackage{etoolbox}\robustify\itshape\sisetup{detect-all = 真}(在 {document} 內)environment
\usepackage{longtable} 如果 arg 是 “longtable” |或任何其他相關的環境包
hyperlinks
\使用包{超引用}
單元格樣式
隻有使用適當的 LaTeX 命令構造了隨附的樣式函數,才能呈現 LaTeX 樣式。所有樣式函數都是圍繞 CSS
(<attribute>, <value>)
對的概念構建的(請參閱表格可視化),這應該由 LaTeX(<command>, <options>)
方法代替。每個單元格將使用嵌套的 LaTeX 命令及其隨附的選項單獨設置樣式。例如,以下代碼將突出顯示 HTML-CSS 中的一個單元格並加粗:
>>> df = pd.DataFrame([[1,2], [3,4]]) >>> s = df.style.highlight_max(axis=None, ... props='background-color:red; font-weight:bold;') >>> s.to_html()
僅使用 LaTeX 命令的等效命令如下:
>>> s = df.style.highlight_max(axis=None, ... props='cellcolor:{red}; bfseries: ;') >>> s.to_latex()
在內部,這些結構化的 LaTeX
(<command>, <options>)
對被轉換為具有默認結構的display_value
:\<command><options> <display_value>
。在有多個命令的情況下,後者是遞歸嵌套的,因此上麵的示例高亮單元格呈現為\cellcolor{red} \bfseries 4
。有時,這種格式不適合應用的命令,或正在使用的 LaTeX 包的組合,因此可以將額外的標誌添加到
<options>
,在元組內,導致所需大括號的不同位置(默認與--nowrap
):元組格式
輸出結構
(<命令>,<選項>)
\<命令><選項> <display_value>
(,
--nowrap
)\<命令><選項> <display_value>
(,
--rwrap
)\<命令><選項>{<display_value>}
(,
--wrap
){\<命令><選項> <display_value>}
(,
--lwrap
){\<命令><選項>} <display_value>
(,
--dwrap
){\<命令><選項>}{<display_value>}
例如,font-weight 的
textbf
命令應始終與-rwrap
一起使用,因此('textbf', '--rwrap')
將渲染一個用大括號包的工作單元,如\textbf{<display_value>}
。一個更全麵的例子如下:
>>> df = pd.DataFrame([[1, 2.2, "dogs"], [3, 4.4, "cats"], [2, 6.6, "cows"]], ... index=["ix1", "ix2", "ix3"], ... columns=["Integers", "Floats", "Strings"]) >>> s = df.style.highlight_max( ... props='cellcolor:[HTML]{FFFF00}; color:{red};' ... 'textit:--rwrap; textbf:--rwrap;' ... ) >>> s.to_latex()
表格樣式
Styler 在內部使用其
table_styles
對象來解析column_format
,position
,position_float
和label
輸入參數。這些參數以以下格式添加到表格樣式中:set_table_styles([ {"selector": "column_format", "props": f":{column_format};"}, {"selector": "position", "props": f":{position};"}, {"selector": "position_float", "props": f":{position_float};"}, {"selector": "label", "props": f":{{{label.replace(':','§')}}};"} ], overwrite=False)
hrules
參數例外,事實上,它同時控製所有三個命令:toprule
,bottomrule
和midrule
。除了將hrules
設置為True
之外,還可以通過手動設置table_styles
來設置每個單獨的規則定義,例如下麵我們設置常規toprule
,為bottomrule
設置hline
並排除midrule
:set_table_styles([ {'selector': 'toprule', 'props': ':toprule;'}, {'selector': 'bottomrule', 'props': ':hline;'}, ], overwrite=False)
如果將其他
commands
添加到表格樣式中,它們將被檢測到,並直接位於“\begin{tabular}”命令的上方。例如,要從 {colortbl} 包中以\rowcolors{1}{pink}{red}
格式添加奇數行和偶數行著色,請使用:set_table_styles([ {'selector': 'rowcolors', 'props': ':{1}{pink}{red};'} ], overwrite=False)
使用這些參數的更全麵的示例如下:
>>> df.columns = pd.MultiIndex.from_tuples([ ... ("Numeric", "Integers"), ... ("Numeric", "Floats"), ... ("Non-Numeric", "Strings") ... ]) >>> df.index = pd.MultiIndex.from_tuples([ ... ("L0", "ix1"), ("L0", "ix2"), ("L1", "ix3") ... ]) >>> s = df.style.highlight_max( ... props='cellcolor:[HTML]{FFFF00}; color:{red}; itshape:; bfseries:;' ... ) >>> s.to_latex( ... column_format="rrrrr", position="h", position_float="centering", ... hrules=True, label="table:5", caption="Styled LaTeX Table", ... multirow_align="t", multicol_align="r" ... )
格式化
要格式化值
Styler.format()
應該在調用Styler.to_latex
之前使用,以及其他方法,例如Styler.hide()
例如:>>> s.clear() >>> s.table_styles = [] >>> s.caption = None >>> s.format({ ... ("Numeric", "Integers"): '\${}', ... ("Numeric", "Floats"): '{:.3f}', ... ("Non-Numeric", "Strings"): str.upper ... }) Numeric Non-Numeric Integers Floats Strings L0 ix1 $1 2.200 DOGS ix2 $3 4.400 CATS L1 ix3 $2 6.600 COWS
>>> s.to_latex() \begin{tabular}{llrrl} {} & {} & \multicolumn{2}{r}{Numeric} & {Non-Numeric} \\ {} & {} & {Integers} & {Floats} & {Strings} \\ \multirow[c]{2}{*}{L0} & ix1 & \\$1 & 2.200 & DOGS \\ & ix2 & \$3 & 4.400 & CATS \\ L1 & ix3 & \$2 & 6.600 & COWS \\ \end{tabular}
CSS 轉換
此方法可以使用以下有限的轉換將使用 HTML-CSS 構造的 Styler 轉換為 LaTeX。
CSS 屬性
CSS 值
乳膠命令
乳膠選項
font-weight
大膽的粗體bf係列bf係列font-style
斜體斜它形狀形狀background-color
紅色的#fe01ea#f0eRGB(128,255,0)rgba(128,0,0,0.5)RGB(25%,255,50%)cellcolor
{紅色}-lwrap[HTML]{FE01EA}-lwrap[HTML]{FF00EE}-lwrap[rgb]{0.5,1,0}-lwrap[rgb]{0.5,0,0}-lwrap[rgb]{0.25,1,0.5}-lwrapcolor
紅色的#fe01ea#f0eRGB(128,255,0)rgba(128,0,0,0.5)RGB(25%,255,50%)color
{紅色的}[HTML]{FE01EA}[HTML]{FF00EE}[RGB]{0.5,1,0}[RGB]{0.5,0,0}[RGB]{0.25,1,0.5}還可以使用
--latex
標誌將用戶定義的純 LaTeX 樣式添加到 HTML-CSS Styler,並添加轉換器將在 CSS-comment 中檢測到的 LaTeX 解析選項。>>> df = pd.DataFrame([[1]]) >>> df.style.set_properties( ... **{"font-weight": "bold /* --dwrap */", "Huge": "--latex--rwrap"} ... ).to_latex(convert_css=True) \begin{tabular}{lr} {} & {0} \\ 0 & {\bfseries}{\Huge{1}} \\ \end{tabular}
例子:
下麵我們給出一個完整的分步示例,添加一些高級函數並注意一些常見的問題。
首先,我們像往常一樣創建 DataFrame 和 Styler,包括 MultiIndex 行和列,它們允許更高級的格式化選項:
>>> cidx = pd.MultiIndex.from_arrays([ ... ["Equity", "Equity", "Equity", "Equity", ... "Stats", "Stats", "Stats", "Stats", "Rating"], ... ["Energy", "Energy", "Consumer", "Consumer", "", "", "", "", ""], ... ["BP", "Shell", "H&M", "Unilever", ... "Std Dev", "Variance", "52w High", "52w Low", ""] ... ]) >>> iidx = pd.MultiIndex.from_arrays([ ... ["Equity", "Equity", "Equity", "Equity"], ... ["Energy", "Energy", "Consumer", "Consumer"], ... ["BP", "Shell", "H&M", "Unilever"] ... ]) >>> styler = pd.DataFrame([ ... [1, 0.8, 0.66, 0.72, 32.1678, 32.1678**2, 335.12, 240.89, "Buy"], ... [0.8, 1.0, 0.69, 0.79, 1.876, 1.876**2, 14.12, 19.78, "Hold"], ... [0.66, 0.69, 1.0, 0.86, 7, 7**2, 210.9, 140.6, "Buy"], ... [0.72, 0.79, 0.86, 1.0, 213.76, 213.76**2, 2807, 3678, "Sell"], ... ], columns=cidx, index=iidx).style
其次,我們將格式化顯示,並且由於我們的表很寬,將隱藏索引的重複級別 0:
>>> styler.format(subset="Equity", precision=2) ... .format(subset="Stats", precision=1, thousands=",") ... .format(subset="Rating", formatter=str.upper) ... .format_index(escape="latex", axis=1) ... .format_index(escape="latex", axis=0) ... .hide(level=0, axis=0)
請注意,索引和列標題的字符串條目之一是“H&M”。如果不對
format_index
方法應用escape=”latex”
選項,則生成的 LaTeX 將無法呈現,並且返回的錯誤很難調試。使用適當的轉義將“&” 轉換為“\&”。第三,我們將一些 (CSS-HTML) 樣式應用於我們的對象。我們將使用內置方法並定義我們自己的方法來突出股票推薦:
>>> def rating_color(v): ... if v == "Buy": color = "#33ff85" ... elif v == "Sell": color = "#ff5933" ... else: color = "#ffdd33" ... return f"color: {color}; font-weight: bold;" >>> styler.background_gradient(cmap="inferno", subset="Equity", vmin=0, vmax=1) ... .applymap(rating_color, subset="Rating")
上述所有樣式在轉換後都適用於 HTML(見下文)和 LaTeX:
但是,我們最終想要添加一種僅 LaTeX 的樣式(來自 {graphicx} 包),它不容易從 CSS 轉換,並且 pandas 不支持它。請注意此處使用的
-latex
標誌以及-rwrap
以確保其格式正確且在轉換時不會被忽略。>>> styler.applymap_index( ... lambda v: "rotatebox:{45}--rwrap--latex;", level=2, axis=1 ... )
最後,我們根據需要添加其他選項來渲染我們的 LaTeX:
>>> styler.to_latex( ... caption="Selected stock correlation and simple statistics.", ... clines="skip-last;data", ... convert_css=True, ... position_float="centering", ... multicol_align="|c|", ... hrules=True, ... ) \begin{table} \centering \caption{Selected stock correlation and simple statistics.} \begin{tabular}{llrrrrrrrrl} \toprule & & \multicolumn{4}{|c|}{Equity} & \multicolumn{4}{|c|}{Stats} & Rating \\ & & \multicolumn{2}{|c|}{Energy} & \multicolumn{2}{|c|}{Consumer} & \multicolumn{4}{|c|}{} & \\ & & \rotatebox{45}{BP} & \rotatebox{45}{Shell} & \rotatebox{45}{H\&M} & \rotatebox{45}{Unilever} & \rotatebox{45}{Std Dev} & \rotatebox{45}{Variance} & \rotatebox{45}{52w High} & \rotatebox{45}{52w Low} & \rotatebox{45}{} \\ \midrule \multirow[c]{2}{*}{Energy} & BP & {\cellcolor[HTML]{FCFFA4}} \color[HTML]{000000} 1.00 & {\cellcolor[HTML]{FCA50A}} \color[HTML]{000000} 0.80 & {\cellcolor[HTML]{EB6628}} \color[HTML]{F1F1F1} 0.66 & {\cellcolor[HTML]{F68013}} \color[HTML]{F1F1F1} 0.72 & 32.2 & 1,034.8 & 335.1 & 240.9 & \color[HTML]{33FF85} \bfseries BUY \\ & Shell & {\cellcolor[HTML]{FCA50A}} \color[HTML]{000000} 0.80 & {\cellcolor[HTML]{FCFFA4}} \color[HTML]{000000} 1.00 & {\cellcolor[HTML]{F1731D}} \color[HTML]{F1F1F1} 0.69 & {\cellcolor[HTML]{FCA108}} \color[HTML]{000000} 0.79 & 1.9 & 3.5 & 14.1 & 19.8 & \color[HTML]{FFDD33} \bfseries HOLD \\ \cline{1-11} \multirow[c]{2}{*}{Consumer} & H\&M & {\cellcolor[HTML]{EB6628}} \color[HTML]{F1F1F1} 0.66 & {\cellcolor[HTML]{F1731D}} \color[HTML]{F1F1F1} 0.69 & {\cellcolor[HTML]{FCFFA4}} \color[HTML]{000000} 1.00 & {\cellcolor[HTML]{FAC42A}} \color[HTML]{000000} 0.86 & 7.0 & 49.0 & 210.9 & 140.6 & \color[HTML]{33FF85} \bfseries BUY \\ & Unilever & {\cellcolor[HTML]{F68013}} \color[HTML]{F1F1F1} 0.72 & {\cellcolor[HTML]{FCA108}} \color[HTML]{000000} 0.79 & {\cellcolor[HTML]{FAC42A}} \color[HTML]{000000} 0.86 & {\cellcolor[HTML]{FCFFA4}} \color[HTML]{000000} 1.00 & 213.8 & 45,693.3 & 2,807.0 & 3,678.0 & \color[HTML]{FF5933} \bfseries SELL \\ \cline{1-11} \bottomrule \end{tabular} \end{table}
相關用法
- Python pandas.io.formats.style.Styler.to_excel用法及代碼示例
- Python pandas.io.formats.style.Styler.text_gradient用法及代碼示例
- Python pandas.io.formats.style.Styler.format_index用法及代碼示例
- Python pandas.io.formats.style.Styler.hide用法及代碼示例
- Python pandas.io.formats.style.Styler.set_table_attributes用法及代碼示例
- Python pandas.io.formats.style.Styler.background_gradient用法及代碼示例
- Python pandas.io.formats.style.Styler.set_tooltips用法及代碼示例
- Python pandas.io.formats.style.Styler.set_properties用法及代碼示例
- Python pandas.io.formats.style.Styler.apply_index用法及代碼示例
- Python pandas.io.formats.style.Styler.set_td_classes用法及代碼示例
- Python pandas.io.formats.style.Styler.pipe用法及代碼示例
- Python pandas.io.formats.style.Styler.where用法及代碼示例
- Python pandas.io.formats.style.Styler.format用法及代碼示例
- Python pandas.io.formats.style.Styler.highlight_between用法及代碼示例
- Python pandas.io.formats.style.Styler.use用法及代碼示例
- Python pandas.io.formats.style.Styler.applymap用法及代碼示例
- Python pandas.io.formats.style.Styler.applymap_index用法及代碼示例
- Python pandas.io.formats.style.Styler.highlight_quantile用法及代碼示例
- Python pandas.io.formats.style.Styler.export用法及代碼示例
- Python pandas.io.formats.style.Styler.set_table_styles用法及代碼示例
注:本文由純淨天空篩選整理自pandas.pydata.org大神的英文原創作品 pandas.io.formats.style.Styler.to_latex。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。