我试图使用对数y轴绘制图形pgf_with_latex,即所有文本格式都由pdflatex完成.在我的matplotlib rc参数中,我定义了一个要使用的字体.这是我的问题:标准matplotlib.ticker.LogFormatterSciNotation格式化程序使用数学文本,因此使用数学字体,它不适合其他字体(sans-serif).
如何使用格式化程序格式化y轴标签,matplotlib.ticker以便我获得标签格式为10的权力,并带有上标权限?更具体一点:我如何使用xticklabels中的字体以相同的方式格式化这些yticklabels?
我已经尝试过使用不同的格式化程序matplotlib.ticker,但是没有一个像我想要的那样编写指数.
以下是我对MWE的意思.

import matplotlib as mpl
mpl.use('pgf')
pgf_with_latex = {
"pgf.texsystem": "pdflatex",
"font.family": "sans-serif",
"text.usetex": False,
"pgf.preamble": [
r"\usepackage[utf8x]{inputenc}",
r"\usepackage{tgheros}", # TeX Gyre Heros sans serif
r"\usepackage[T1]{fontenc}"
]
}
mpl.rcParams.update(pgf_with_latex)
import matplotlib.pyplot as plt
fig = plt.figure(figsize=[3, 2])
ax = fig.add_subplot(111)
ax.set_yscale("log")
ax.minorticks_off()
ax.set_xlabel("sans-serif font label")
ax.set_ylabel("math font label")
plt.gca().set_ylim([1, 10000])
plt.gcf().tight_layout()
plt.savefig('{}.pdf'.format("test"))
Run Code Online (Sandbox Code Playgroud)
警告:必须在系统上安装TeX分发才能运行此分发.我使用了MikTex 2.9.还有Python 3.6.2和matplotlib 2.1.2.
以下是我所做的粗略解释vtk:
vtkClipClosedSurface切断迷宫之一,使我得到了没有打开的表面的对象.一个规则的表面看起来是这样的,有一个封闭的表面看起来是这样.这是我的问题:对于我的结构的更复杂的版本,我得到这个:
你能看到它在左上角是如何正常工作的,靠近右下方它会停止创建曲面吗?有时我在最后一部分也会得到非常奇怪的三角形.
根据我的理解,vtkClipClosedSurface从表面法线知道在哪里关闭表面和不在哪里.问题是:我的结构的法线很好,它们都指向正确的方向.如果仔细观察结构,你会注意到下部基本上是顶部的反转,它逐渐变化,都在一个表面上.
我尝试修改我的结构,然后切割许多东西vtkSmoothPolyDataFilter,vtkCleanPolyData或者vtkPolyDataNormals.我甚至试图用边界表面提取vtkFeatureEdges,这导致了更糟糕的结果.甚至vtkFillHolesFilter没有产生任何可接受的结果.我的表面看起来完美无瑕,足以创造一个边界.
我不知道还有什么可以尝试的.其他结构也会发生这种情况.使用CAD工具修复它是不可能的,因为它应该是开箱即用的.请帮我!
这是几何不能正确关闭曲面的几何示例.这次我使用的vtkFillHolesFilter结果是结构内部的表面,而它们只应占据te对象的边界.

如果你需要更详细的我的管道纲要,这里有:
mayavi.mlab.contour3dPolyData通过提取actor.mapper.inputtvtk为常规格式vtkvtkClipClosedSurface 使用平面集合切除部分结构(当平面集合与结构边界相同时会发生错误)编辑:好的,这没有得到足够的重视,所以我构建了一个最小的,完整的,可验证的工作示例来重现行为:
import numpy as np
import vtk # VTK version 7.0
from mayavi import mlab # mayavi version 4.4.4
from mayavi.api import Engine, OffScreenEngine
from tvtk.api import tvtk
def schwarz_D(x, y, z, linear_term=0): …Run Code Online (Sandbox Code Playgroud) 我正在使用包的parallel_offset功能shapely来获取一些封闭环多边形的偏移结构。我一次有几个多边形,许多具有相似的形状。然而,其中大约 10-25% 不会从parallel_offset. 这是一个不起作用的形状的 MWE:
import matplotlib.pyplot as plt
from shapely.geometry.polygon import LinearRing
def plot_line(ax, ob, color):
x, y = ob.xy
ax.plot(x, y, color=color, alpha=0.7, linewidth=3,
solid_capstyle='round', zorder=2)
polygon = [[-29.675, -30.675],
[-28.4094, -29.4094],
[-28.325, -29.325],
[-28.325, -29.764],
[-28.325, -29.7933],
[-28.4587, -29.8274],
[-28.4676, -29.8297],
[-28.5956, -29.8814],
[-28.6041, -29.8848],
[-28.724, -29.953],
[-28.732, -29.9576],
[-28.8417, -30.0413],
[-28.849, -30.0469],
[-28.9466, -30.1445],
[-28.9531, -30.151],
[-29.0368, -30.2607],
[-29.0424, -30.268],
[-29.1106, -30.3879],
[-29.1152, -30.3959],
[-29.1669, -30.5239],
[-29.1703, -30.5324],
[-29.2044, -30.6661], …Run Code Online (Sandbox Code Playgroud) 我想编写一个可调用的函数,为所有不同的图统一设置我的 matplotlib rc 参数。到目前为止,它只是我复制到每个文件的一个块,归结为:
import matplotlib as mpl
grey = '#808080'
mpl.rcParams['axes.linewidth'] = 0.3
mpl.rcParams['axes.edgecolor'] = grey
Run Code Online (Sandbox Code Playgroud)
我这样做是为了让轴更细,并通过让其他所有东西都变灰来突出我的数据。但是我找不到在 rc.local 中将刻度边缘颜色设置为灰色的方法。我正在寻找类似的东西
'axes.tickedgecolor'
Run Code Online (Sandbox Code Playgroud)
可悲的是,这似乎不存在。
这里描述了一种不使用 rc 的方法:Elegantly changed the color of a plot frame in matplotlib
希望有人能帮忙,谢谢!
编辑:只是为了澄清:我找到了选项
mpl.rcParams['tick.color'] = '#808080'
Run Code Online (Sandbox Code Playgroud)
但它也会改变刻度标签,我想保持黑色!
python ×4
plot ×3
matplotlib ×2
colors ×1
formatting ×1
geometry ×1
latex ×1
mayavi ×1
python-3.x ×1
shape ×1
shapely ×1
vtk ×1