我在pgf/tikz中创建图表.当我在我的文档中使用它们时,它们被缩放,其中几个在minipage/subfig环境中.发生这种情况时,字体大小会随着图形缩放而变得非常小或不可读.我已经完成了手册,但迄今为止我试图控制它并不成功.
有没有办法直接设置字体大小?有什么选择?
下面给出的一个aswer显示了如何使用\ tikzstyle字体选项指定tikzpicture环境中的字体大小.
现在我正在使用:
\beginppgfgraphicnamed{graph}
\input{graph.tex}
\endpgfgraphicnamed
Run Code Online (Sandbox Code Playgroud)
tikzpicture环境用于输入文件.有没有在我使用的设置中指定字体大小?这可能是问题吗?graph.tex文件是通过另一个程序自动生成的.
除了为单个图形设置字体大小之外,最理想的是有一个参数来全局设置所有tikz图形的字体大小?我想这个问题是在缩放minipage或subfig.
非常感谢,
松鸦
因此,我一直在研究论文和网上看到以图表符号表示的图形模型(例如:http://www.cs.princeton.edu/~blei/papers/BleiNgJordan2003.pdf).
是否有一种快速简便的方法来生产这些?我进行了搜索和搜索,但我发现的只有GraphViz这样的解决方案,它实际上比我需要的更强大(因此更难以使用).PGF/Tikz似乎是我最好的选择,但再次看起来有点矫枉过正.
也许我最好的选择是在Inkscape中制作它们,或者咬紧牙关学习PGF/Tikz.他们是如此受欢迎,我认为会有一种更简单的方式来推销它们,但也许不是...... TIA.
我试图在我的图表上绘制一条水平线.线的Y坐标应位于点a和b之间(a在b下方).该行的左右端点位于tikzpicture的边界框上.以下是我现在使用交集运算符执行此操作的方法:
\coordinate (h0) at ($(a.north)!0.5!(b.south)$); \draw (h0 -| current bounding box.west) -- (h0 -| current bounding box.east);
这让我感到非常迂回.我宁愿做的是得到(h0)的Y坐标和边界框的东边和西边的X坐标,并自己编写坐标.我想这样做,但不支持语法:
\coordinate (h0) at ($(a.north)!0.5!(b.south)$); \draw (current bounding box.west.x,h0.y) -- (current bounding box.east.x,h0.y);
有没有办法引用我遗漏的坐标的各个组成部分?
我需要将图形的每一行与中心对齐.我试图用xshift做到这一点.这里的代码:
\begin{tikzpicture}[node distance=1.5cm, auto, text centered]
\tikzstyle{every node}=[draw,ball];
\begin{scope}[xshift=1.5cm]
\node (A) {A};
\node [right of=A] (B) {B};
\node [right of=B] (C) {C};
\node [right of=C] (D) {D};
\end{scope}
\begin{scope}[yshift=-1.5cm]
\node (AB) {AB};
\node [right of=AB] (AC) {AC};
\node [right of=AC] (AD) {AD};
\node [right of=AD] (BC) {BC};
\node [right of=BC] (BD) {BD};
\node [right of=BD] (CD) {CD};
\end{scope}
\begin{scope}[yshift=-3cm,node distance=2cm,xshift=1cm]
\node (ABC) {ABC};
\node [right of=ABC] (ABD) {ABD};
\node [right of=ABD] (ACD) {ACD};
\node [right of=ACD] (BCD) {BCD};
\end{scope}
\begin{scope}[xshift=4cm, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用\ ifthenelse进行浮点比较.这是pgf/tikz代码,如果\ y只是整数,则可以工作,但不是这样:
\foreach \y in {3,3.5,...,6} {
ifthenelse{\y<3}{
...
}{
...
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用pgf/tikz图形,我想知道在minipage/subfig环境中使用它们时如何控制图形中字体大小的缩放?
有没有办法手动设置pgf/tikz图形或乳胶中的永久字体大小,以便使字体大小不变为缩放?
理想情况下,我希望能够为每个图形或所有图形或子图形/小型化环境手动指定字体大小?
以下是建议使用的示例.谢谢您的帮助.
\begin{figure}[h]
\centering
\subfloat[Graph 1]{
\begin{minipage}[h]{0.7\linewidth}
\centering\beginpgfgraphicnamed{graph1}
\input{graph1.tex}
\endpgfgraphicnamed
\label{fig:graph1}
\end{minipage}}
\hspace{5pt}
\subfloat[Graph 2]{
\begin{minipage}[h]{0.5\linewidth}
\centering\beginpgfgraphicnamed{graph2}
\input{graph2.tex}
\endpgfgraphicnamed
\label{fig:graph2}
\end{minipage}}
\subfloat[Graph 3]{
\begin{minipage}[h]{0.5\linewidth}
\centering\beginpgfgraphicnamed{graph3}
\input{graph3.tex}
\endpgfgraphicnamed
\label{fig:graph3}
\end{minipage}}
\caption{Three Graphs}
\end{figure}
Run Code Online (Sandbox Code Playgroud)
也许在minipage/subfig之外我可以使用其他帖子的建议来使字体变大,因为图形是用页面宽度缩放的?在这个例子中我想要的是它自己的第一个图像,更大,然后是两个小图像,并排在一个图中,并排在一起.
我在你的个人资料Mica中看到了一些R标签.图形是使用tikzDevice生成的,并在我的latex文档中提取.
所以我在没有tikzpicture环境的情况下生成文件,以便我可以自己手动设置选项.当我使用时,\begin{tikzpicture} \end{tikzpicture}
我得到错误"尺寸太大我不能使用大于19英尺的尺寸.继续,我将使用我能够的最大值." .我需要用\beginpgfgraphicnamed{} .. \endpgfgraphicnamed{}
它才能让它工作?不确定影响究竟是什么.
以下是自动生成文件的示例:
\begin{scope}
\path[clip] ( 0.00, 0.00) rectangle (794.97,614.29);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\end{scope}
\begin{scope}
\path[clip] ( 0.00, 0.00) rectangle (794.97,614.29);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\end{scope}
Run Code Online (Sandbox Code Playgroud)
........
\begin{scope}
\path[clip] ( 0.00, 0.00) rectangle (794.97,614.29);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\definecolor[named]{fillColor}{rgb}{1.00,1.00,1.00}
\draw[fill=fillColor,draw opacity=0.00,] …
Run Code Online (Sandbox Code Playgroud) 我将 matplotlib 图形导出为 PGF 以在 LaTeX 中使用。
\sffamily
将图形保存为 PGF 时,matplotlib 似乎为每个文本条目(轴标签、刻度、图例条目、注释)添加了一个附加项。这将阻止它从全局文档字体正确继承字体。
如果文本来自同一个家族,文本可以从全局文档字体继承字体,但如果全局字体来自不同的家族,它将恢复为默认的 sffamily 字体。
我相信我已经隔离了这个问题:如果我编辑 PGF 文档并简单地删除\sffamily
任何文本条目的一部分,问题不再存在并且全局字体被继承。删除不会阻止 LaTeX 正确编译它,并且我没有收到任何错误。
由于上述发现,我认为问题与rcParams
任何 LaTeX 前言(无论是在 python 中还是在实际的 LaTeX 文档中)无关。
我只是在最简单的情节上进行了尝试,并且能够重现该问题:
import matplotlib.pyplot as plt
fig = plt.figure()
plt.xlabel('a label')
fig.savefig('fig.pgf')
Run Code Online (Sandbox Code Playgroud)
并且 pgf 文档将包含以下行:
\pgftext[x=3.280000in,y=0.240809in,,top]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont a label}%
Run Code Online (Sandbox Code Playgroud)
所以\sffamily
添加了。在 LaTeX 中渲染它会强制使用 sans-serif 字体。删除\sffamily
并渲染它将允许它继承字体系列。
有没有办法避免在 matplotlib 的 PGF 输出中包含字体系列?
在使用matplotlib的pgf后端时,我有时会看到如下错误:
! Dimension too large.
<to be read again>
\advance
l.69 ...o{\pgfqpoint{-11.400000in}{-235.382893in}}
Run Code Online (Sandbox Code Playgroud)
这是来自LaTeX处理步骤,如果我向matplotlib询问png,或者在处理嵌入了pgf文件的文档时会发生这种情况.当我设置与数据限制相比非常窄的轴限制时,会发生这种情况.所以我假设pgf接收并尝试处理或绘制整个数据集,并且一些超出预期可见范围的点也在pgf的内部大小限制之外.
MWE:
import matplotlib as mpl
mpl.use("pgf")
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-5,5)
y = 100*np.exp(x)
plt.xlim((-0.1,0.1))
plt.ylim((99,101))
plt.plot(x,y)
plt.savefig('exp.png')
Run Code Online (Sandbox Code Playgroud)
我的问题:有没有什么方法可以让matplotlib提供pgf一组有限的数据?或者还有其他解决方案吗?我可以根据我想要的限制截断我提供给pyplot命令的数据,但我希望matplotlib有一个内部解决方案,以避免我从许多个案的烦躁中获取.(还有一种情况,当我在轴上添加样条补丁时,我不知道如何切断部分曲线.)
我看了一些文件,看到get_clip_on()
和get_clip_box()
的Line2D
,但任何常规的情节命令后,前一种方法反正返回true,后者返回一些TransformedBbox
规范,大概占轴本身的东西.
我是pgf的新手所以我正在尝试pgfplot手册中的一些例子.一个例子与我当前的任务特别相关,但是,它不会编译.
这是代码:
\documentclass[11pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[symbolic x coords={a,b,c,d,e,f,g,h,i}]
\addplot+[smooth] coordinates {
(a,42)
(b,50)
(c,80)
(f,60)
(g,62)
(i,90)};
\end{axis}
\end{tikzpicture}
\end{document}
Run Code Online (Sandbox Code Playgroud)
编译器退出时出现以下错误:
! Package PGF Math Error: Could not parse input 'a' as a floating point number,
sorry. The unreadable part was near 'a'..
Run Code Online (Sandbox Code Playgroud)
我不知道如何纠正这种行为.其他图(平滑,散点图,条形图),只包含数值数据编译.
有人可以给我一个暗示吗?
干杯
K.
我尝试使用matplotlib为LaTeX创建一个pgf文件:
from matplotlib.pyplot import subplots
from numpy import linspace
x = linspace(0, 100, 30)
fig, ax = subplots(figsize = (10, 6))
ax.scatter(x, x)
fig.tight_layout()
fig.savefig('/home/mark/dicp/python/figure.pgf')
Run Code Online (Sandbox Code Playgroud)
但我得到OSError: [Errno 2] No such file or directory
:
Traceback (most recent call last):
File "visualize/latex_figs.py", line 32, in <module>
fig.savefig('/home/mark/dicp/python/figure.pgf')
File "/usr/local/lib/python2.7/dist-packages/matplotlib/figure.py", line 1421, in savefig
self.canvas.print_figure(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backend_bases.py", line 2220, in print_figure
**kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backend_bases.py", line 1957, in print_pgf
return pgf.print_pgf(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_pgf.py", line 818, in print_pgf
self._print_pgf_to_fh(fh, *args, **kwargs) …
Run Code Online (Sandbox Code Playgroud)