Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Colorbar offsetText(科学基础乘数)从Colorbar的顶部移动到底部_Python_Numpy_Matplotlib_Colorbar - Fatal编程技术网

Python Colorbar offsetText(科学基础乘数)从Colorbar的顶部移动到底部

Python Colorbar offsetText(科学基础乘数)从Colorbar的顶部移动到底部,python,numpy,matplotlib,colorbar,Python,Numpy,Matplotlib,Colorbar,这个“简单”的问题让我不知所措: 在matplotlib中的颜色栏(如图所示)中,我需要将offsetText(基本倍增器)从颜色栏的顶部移动到底部 我用于此绘图的代码是(使用gridspec): 提前谢谢! (顺便说一句,Python版本=2.7.6,matplotlib版本=1.3.1-在我完成当前项目之前,升级目前不是一个选项) 嗯。。。显然,不可能将colorbar的科学基础乘数向上或向下移动,只是稍微向左或向右移动 解决方法是隐藏它,然后添加(相同的)自定义文本,该文本将定位在底部(在

这个“简单”的问题让我不知所措:

在matplotlib中的颜色栏(如图所示)中,我需要将offsetText(基本倍增器)从颜色栏的顶部移动到底部

我用于此绘图的代码是(使用gridspec):

提前谢谢! (顺便说一句,Python版本=2.7.6,matplotlib版本=1.3.1-在我完成当前项目之前,升级目前不是一个选项)


嗯。。。显然,不可能将colorbar的科学基础乘数向上或向下移动,只是稍微向左或向右移动

解决方法是隐藏它,然后添加(相同的)自定义文本,该文本将定位在底部(在我的例子中):


如果有人有更优雅的解决方案,我会很高兴看到它

通常不可能更改offsetText标签的位置。这仍然是一个问题

因此,一种解决方案是覆盖yaxis的
\u update\u offset\u text\u position
方法,将offset文本定位在yaxis的底部

import matplotlib.pyplot as plt
import types

def bottom_offset(self, bboxes, bboxes2):
    bottom = self.axes.bbox.ymin
    self.offsetText.set(va="top", ha="left")
    self.offsetText.set_position(
            (0, bottom - self.OFFSETTEXTPAD * self.figure.dpi / 72.0))

fig, ax = plt.subplots()
im = ax.imshow([[1e5,2e5],[0.1e5,1e5]])
cb = plt.colorbar(im)
cb.formatter.set_scientific(True)
cb.formatter.set_powerlimits((0,0))

def register_bottom_offset(axis, func):
    axis._update_offset_text_position = types.MethodType(func, axis)
register_bottom_offset(cb.ax.yaxis, bottom_offset)

cb.update_ticks()

plt.show()

如果颜色栏位于绘图的左侧,则以下内容看起来可能更好:

self.offsetText.set(va="top", ha="right")
self.offsetText.set_position(
            (1, bottom - self.OFFSETTEXTPAD * self.figure.dpi / 72.0))

“1e5”来自代码的哪一部分?我正在做散点图,在散点图中,我使用另一个数组,其值显示为colormap。该数组实际上具有从1e3到1e6的值(通常)。代码:h3=ax12。分散(x[j],y[j],c=temp[j],marker=',s=10.0,cmap='hot',edgecolors='none')h3被传递到plt.colorbar,值在temp[]数组中。我不确定这是不是一个比手动放置文本标签更优雅的解决方案。不知道优雅,但你的答案肯定更具洞察力,更切中要害。现在我知道那里发生了什么。我接受了你的回答。非常感谢。
import matplotlib.pyplot as plt
import types

def bottom_offset(self, bboxes, bboxes2):
    bottom = self.axes.bbox.ymin
    self.offsetText.set(va="top", ha="left")
    self.offsetText.set_position(
            (0, bottom - self.OFFSETTEXTPAD * self.figure.dpi / 72.0))

fig, ax = plt.subplots()
im = ax.imshow([[1e5,2e5],[0.1e5,1e5]])
cb = plt.colorbar(im)
cb.formatter.set_scientific(True)
cb.formatter.set_powerlimits((0,0))

def register_bottom_offset(axis, func):
    axis._update_offset_text_position = types.MethodType(func, axis)
register_bottom_offset(cb.ax.yaxis, bottom_offset)

cb.update_ticks()

plt.show()
self.offsetText.set(va="top", ha="right")
self.offsetText.set_position(
            (1, bottom - self.OFFSETTEXTPAD * self.figure.dpi / 72.0))