- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 matplotlib 创建对数对数图。如下图所示,默认刻度选择不当(充其量);右边的 y 轴甚至根本没有任何东西(它在线性等效中有)并且两个 x 轴都只有一个。
有没有办法通过标签获得合理数量的刻度,无需为每个绘图手动指定它们?
编辑:确切的代码太长,但这里有一个简短的问题示例:
x = linspace(4, 18, 20)
y = 1 / (x ** 4)
fig = figure()
ax = fig.add_axes([.1, .1, .8, .8])
ax.loglog(x, y)
ax.set_xlim([4, 18])
ax2 = ax.twiny()
ax2.set_xlim([4 / 3., 18 / 3.])
ax2.set_xscale('log')
show()
最佳答案
我一直在与您展示的内容作斗争(轴范围内只有一个主要刻度)。没有一个 matplotlib 刻度格式化程序让我满意,所以我使用 matplotlib.ticker.FuncFormatter
来实现我想要的。我没有用双轴进行测试,但我的感觉是无论如何它都应该可以工作。
import matplotlib.pyplot as plt
from matplotlib import ticker
import numpy as np
#@Mark: thanks for the suggestion :D
mi, ma, conv = 4, 8, 1./3.
x = np.linspace(mi, ma, 20)
y = 1 / (x ** 4)
fig, ax = plt.subplots()
ax.plot(x, y) # plot the lines
ax.set_xscale('log') #convert to log
ax.set_yscale('log')
ax.set_xlim([0.2, 1.8]) #large enough, but should show only 1 tick
def ticks_format(value, index):
"""
This function decompose value in base*10^{exp} and return a latex string.
If 0<=value<99: return the value as it is.
if 0.1<value<0: returns as it is rounded to the first decimal
otherwise returns $base*10^{exp}$
I've designed the function to be use with values for which the decomposition
returns integers
"""
exp = np.floor(np.log10(value))
base = value/10**exp
if exp == 0 or exp == 1:
return '${0:d}$'.format(int(value))
if exp == -1:
return '${0:.1f}$'.format(value)
else:
return '${0:d}\\times10^{{{1:d}}}$'.format(int(base), int(exp))
# here specify which minor ticks per decate you want
# likely all of them give you a too crowed axis
subs = [1., 3., 6.]
# set the minor locators
ax.xaxis.set_minor_locator(ticker.LogLocator(subs=subs))
ax.yaxis.set_minor_locator(ticker.LogLocator(subs=subs))
# remove the tick labels for the major ticks:
# if not done they will be printed with the custom ones (you don't want it)
# plus you want to remove them to avoid font missmatch: the above function
# returns latex string, and I don't know how matplotlib does exponents in labels
ax.xaxis.set_major_formatter(ticker.NullFormatter())
ax.yaxis.set_major_formatter(ticker.NullFormatter())
# set the desired minor tick labels using the above function
ax.xaxis.set_minor_formatter(ticker.FuncFormatter(ticks_format))
ax.yaxis.set_minor_formatter(ticker.FuncFormatter(ticks_format))
我得到的数字如下 :
当然,您可以为 x 轴和 y 轴设置不同的次定位器,并且可以将从 ticks_format
到结尾的所有内容包装到接受轴实例 ax
和subs
或 subsx
和 subsy
作为输入参数。
希望对你有帮助
关于Matplotlib loglog 的错误刻度/标签(双轴),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19239297/
我用 Python 生成了以下对数图: 数据为here 。我想在此图中添加一系列在这对数据值之间开始和结束的直线: [1.0, 0.05556], [1.0, 1.0], [1.0, 17.9996]
我有一个相关图,我试图在其中显示对数对数刻度的值。我也在尝试在相关图上显示最佳拟合线。 以下是我的代码。 import numpy as np import matplotli
我想绘制基于数据集的平滑曲线,该数据集跨越 x 中的 13 个数量级 [1E-9:1E4] 和 y 中的 4 个数量级 [1E-6:1e-2]。 MWE: set log x set log y se
在 Matlab 中,命令“axis equal”: sets the aspect ratio so that equal tick mark increments on the x-,y- and
我找到了数十种关于 LogLog 算法基本思想的解释,但它们都缺乏关于散列函数结果拆分如何工作的细节?我的意思是使用单个散列功能不精确,而使用许多功能太昂贵。 他们如何克服单一哈希函数的问题? Thi
我正在使用 matplotlib 创建对数对数图。如下图所示,默认刻度选择不当(充其量);右边的 y 轴甚至根本没有任何东西(它在线性等效中有)并且两个 x 轴都只有一个。 有没有办法通过标签获得合理
Python(和 matplotlib)新手是从 R 过来的,所以我希望这个问题不是太白痴。我正在尝试在自然对数刻度上制作对数对数图。但是经过一些谷歌搜索后,我无法以某种方式弄清楚如何强制 pyplo
我正在为每个轴绘制对数刻度,但我不希望 x 轴使用科学记数法,因此我将其修改如下: from matplotlib import pyplot as plt from matplotlib.ticke
我正在尝试生成向量的双对数图,并将生成的图保存到文件中。 这是我迄今为止尝试过的: import matplotlib.pyplot as plt ... plt.loglog(deg_distrib
如何在使用 matplotlib 绘制的点周围创建空间? 例如,在此图中,左下角的点被轴切断,但我希望该点和轴之间有更多空间。 import matplotlib.pyplot as plt x =
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我在哪里可以找到 LogLog algorithm 的有效实现? ?曾尝试自己实现,但我的实现草案产生了奇怪的结果。 Here它是: function LogLog(max_error, max_co
我有一个 log log log 3D 图,其中我将一些数据与表面拟合。我正在疯狂地为表面提供一些透明度,以便在下面看到我的数据......这是一个最小的例子,我生成一些随机日期并进行幂律拟合,在对数
我是一名优秀的程序员,十分优秀!