首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >彩色原木图:去除10种标签的能力

彩色原木图:去除10种标签的能力
EN

Stack Overflow用户
提问于 2019-07-30 14:40:37
回答 2查看 215关注 0票数 0

我已经四处看了一会儿,已经遇到了以下相关问题:Matplotlib: disable powers of ten in log plot

Prevent axes from being in scientific notation (powers of 10) using matplotlib in Python on semilogy plot

然而,这两个人都没能真正帮助我。我基本上是做了一个合理简单的散点图与相关的彩色地图,但我似乎无法摆脱的力量,10标签的y轴。这是我的代码和最终的情节。‘'teff','lum','col1’都是dtype('float64')的系列,我在一个单独的函数中定义了彩色地图'rvb‘。

代码语言:javascript
复制
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()

在类似的问题中,我尝试了以下几种不同的解决方案

代码语言:javascript
复制
from matplotlib.ticker import ScalarFormatter
ax.get_yaxis().get_major_formatter().set_useOffset(False)

然而,我只会犯错误。'LogFormatterSciNotation‘对象没有属性'set_useOffset’。

我也曾尝试用小插曲来解决这个问题,但后来我无法让彩色地图发挥作用。我希望有一个解决方案,使我的情节看起来几乎相同,只是10的权力改变为实际数字,如果可能的话,更有规律的间隔。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-30 15:24:52

下面是一个使用axes对象的工作版本:

代码语言:javascript
复制
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调用,然后使用以下命令:

代码语言:javascript
复制
m.set_array(np.array(z))
plt.colorbar(m)

通过这种方式,我在z数组和颜色之间创建了一个映射:第一个值将对应于底部的颜色,等等。我把这个和z列一起传递给颜色条,就这样。您可以在这里找到更多信息:api.html

只有一件事:文档说颜色的范围(所以这里是z )通常需要在[0,1]中。在这里,它可以工作,但您可能想要正常化,以防万一。

编辑:正如@ImportanceOfBeingErnest指出的那样,散点图也是标量映射的,所以您也可以使用以下内容:

代码语言:javascript
复制
scatter_plot.set_array(np.array(z))
plt.colorbar(scatter_plot)
票数 1
EN

Stack Overflow用户

发布于 2019-07-30 14:53:25

快速解决方案:您可以使用plt.yticks()获取滴答和标签,然后用空字符串替换标签。尝试添加以下行:

代码语言:javascript
复制
locs, labels = plt.yticks()
plt.yticks(locs, ['' for label in labels])

或者,更改字体颜色:

代码语言:javascript
复制
plt.tick_params(axis='y', labelcolor='white')
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57274289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档