我正在尝试在我的matpllotlib Contourf图上自定义颜色条。虽然我能够使用科学记数法,但我尝试更改记数法的基础-
本质上是使我的价格变动范围在(-100,100)而不是(-10,10)内。
例如,这产生了一个简单的情节…
import numpy as np
import matplotlib.pyplot as plt
z = (np.random.random((10,10)) - 0.5) * 0.2
fig, ax = plt.subplots()
plot = ax.contourf(z)
cbar = fig.colorbar(plot)
cbar.formatter.set_powerlimits((0, 0))
cbar.update_ticks()
plt.show()
像这样:
但是,我希望颜色栏上方的标签为1e-2,数字范围为-10至10。
我将如何处理?
一种可能的解决方案是按以下问题子类化ScalarFormatter
并固定其数量级:为多个子图设置具有固定指数和有效数字的科学计数法
这样,你会调用该格式与大小作为参数的顺序order
,OOMFormatter(-2, mathText=False)
。mathText
设置为false可以从问题中获取符号,即
,将其设置为True时,将给出。
然后,您可以通过colorbar的format
参数将formatter设置为colorbar 。
import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import matplotlib.ticker
class OOMFormatter(matplotlib.ticker.ScalarFormatter):
def __init__(self, order=0, fformat="%1.1f", offset=True, mathText=True):
self.oom = order
self.fformat = fformat
matplotlib.ticker.ScalarFormatter.__init__(self,useOffset=offset,useMathText=mathText)
def _set_order_of_magnitude(self):
self.orderOfMagnitude = self.oom
def _set_format(self, vmin=None, vmax=None):
self.format = self.fformat
if self._useMathText:
self.format = r'$\mathdefault{%s}$' % self.format
z = (np.random.random((10,10)) - 0.5) * 0.2
fig, ax = plt.subplots()
plot = ax.contourf(z)
cbar = fig.colorbar(plot, format=OOMFormatter(-2, mathText=False))
plt.show()
对于<3.1的matplotlib版本,该类需要如下所示:
class OOMFormatter(matplotlib.ticker.ScalarFormatter):
def __init__(self, order=0, fformat="%1.1f", offset=True, mathText=True):
self.oom = order
self.fformat = fformat
matplotlib.ticker.ScalarFormatter.__init__(self,useOffset=offset,useMathText=mathText)
def _set_orderOfMagnitude(self, nothing):
self.orderOfMagnitude = self.oom
def _set_format(self, vmin, vmax):
self.format = self.fformat
if self._useMathText:
self.format = '$%s$' % matplotlib.ticker._mathdefault(self.format)
我正在尝试减少一些计算后得到的小数数量。我的问题出现的如下所示: 它输出这个: 现在我想将打印的小数位数减少到3。我尝试使用字符串格式进行设置,如下所示: 但是,此代码打印: 我真正想要的是: 如何将格式化为仅显示为科学符号但只有3位小数?
为什么以下代码的输出是科学符号? 产出:1.11E-8
我在pandas中有一个数据框,其中一些数字用科学符号(或指数符号)表示,如下所示: 科学记数法使得本应简单的比较变得不必要的困难。我认为是21900值搞砸了其他值。我的意思是1.0是编码的。一! 这不起作用: 而也没有实现抑制,我绝望地看着,而似乎只对所有其他浮点值打开它,没有能力关闭它。
我在pandas中有一个数据帧,我正在从csv中读取它。 我的一个列的值包括、和科学记数法,即 我的问题是,当我读取csv时,pandas将这些数据视为,而不是它应该是的。我猜是因为它认为科学符号是字符串。 我尝试使用后,尝试使用。这会引发错误
很多问题都解决了这个问题,但没有一个解决方案能完全满足我的需要。 我有一个数据框,有两列数字,每列10-20位。这些实际上是ID,我想将它们连接起来。看起来最好先将值转换为字符串。 然而,当使用转换时,熊猫保留了科学符号,这是不会飞的。 我尝试过的事情: 尝试:dtype arg('str')或转换器(使用)在 结果:
我搜索了一下,但我只找到了如何在没有科学符号的情况下减少数字(所以它最终会像一样,因为数字很小)。