我已经四处看了一会儿,已经遇到了以下相关问题:Matplotlib: disable powers of ten in log plot
然而,这两个人都没能真正帮助我。我基本上是做了一个合理简单的散点图与相关的彩色地图,但我似乎无法摆脱的力量,10标签的y轴。这是我的代码和最终的情节。‘'teff','lum','col1’都是dtype('float64')的系列,我在一个单独的函数中定义了彩色地图'rvb‘。
plt.figure(figsize=(12,6))
plt.scatter(teff,lum,s=10,c=col1, cmap=rvb)
plt.yscale('log')
plt.colorbar()
axes = plt.gca()
plt.gca().invert_xaxis()
plt.xlabel('Effective Temperature [K]')
plt.ylabel('Luminosity [L$_{\odot}$]')
plt.show()

在类似的问题中,我尝试了以下几种不同的解决方案
from matplotlib.ticker import ScalarFormatter
ax.get_yaxis().get_major_formatter().set_useOffset(False)然而,我只会犯错误。'LogFormatterSciNotation‘对象没有属性'set_useOffset’。
我也曾尝试用小插曲来解决这个问题,但后来我无法让彩色地图发挥作用。我希望有一个解决方案,使我的情节看起来几乎相同,只是10的权力改变为实际数字,如果可能的话,更有规律的间隔。
谢谢!
发布于 2019-07-30 15:24:52
下面是一个使用axes对象的工作版本:
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
from matplotlib.ticker import ScalarFormatter
x = [i for i in range(10)]
y = [i for i in range(10)]
z = [i for i in range(20,30)]
fig = plt.figure(figsize=(12,6))
ax = plt.gca()
my_cmap = cm.jet
scatter_plot = ax.scatter(x, y, s=30, cmap=my_cmap, c=z)
m = cm.ScalarMappable(cmap=my_cmap)
m.set_array(np.array(z))
plt.colorbar(m)
ax.set_yscale('log')
ax.set_xlabel('Effective Temperature [K]')
ax.set_ylabel('Luminosity [L$_{\odot}$]')
ax.yaxis.set_major_formatter(ScalarFormatter())
plt.show()您在处理格式化程序时有了正确的想法:当您将y轴设置为logscale时,格式化程序被切换到LogFormatter,所以我切换回了ScalarFormatter。
至于颜色条,我将它传递给ax.scatter调用,然后使用以下命令:
m.set_array(np.array(z))
plt.colorbar(m)通过这种方式,我在z数组和颜色之间创建了一个映射:第一个值将对应于底部的颜色,等等。我把这个和z列一起传递给颜色条,就这样。您可以在这里找到更多信息:api.html。
只有一件事:文档说颜色的范围(所以这里是z )通常需要在[0,1]中。在这里,它可以工作,但您可能想要正常化,以防万一。
编辑:正如@ImportanceOfBeingErnest指出的那样,散点图也是标量映射的,所以您也可以使用以下内容:
scatter_plot.set_array(np.array(z))
plt.colorbar(scatter_plot)发布于 2019-07-30 14:53:25
快速解决方案:您可以使用plt.yticks()获取滴答和标签,然后用空字符串替换标签。尝试添加以下行:
locs, labels = plt.yticks()
plt.yticks(locs, ['' for label in labels])或者,更改字体颜色:
plt.tick_params(axis='y', labelcolor='white')https://stackoverflow.com/questions/57274289
复制相似问题