matplotlib colorbar minor刻度颜色和次刻度数

问题描述 投票:2回答:1

我有一个matplotlib(v2.1.1)图,其中包含一个颜色条。当在具有白色背景的图上绘制时,我得到一个颜色条,如附图之一所示。这很好(虽然我很想知道如何设置次要刻度的数量)。

enter image description here

然而,当我使用带有fig.patch.set_facecolor(back_color)back_color = 'black'将背景设置为黑色时,我得到一个颜色条,其中缺少次要刻度和顶部的乘数。我已经手动更改了y刻度标签的颜色,但无法找到如何更改次刻度或乘数颜色。

enter image description here

[编辑]好的,这是一个说明问题的代码。我解决了次要的刻度颜色问题,这使得我(按优先顺序)乘数颜色和次刻度数。代码如下,将背景变量从0更改为1以查看乘数。

import matplotlib.pyplot as plt

background = 0
if background == 0:
  back_color='black'
  fore_color='white'
else:
  back_color='white'
  fore_color='black'
fig, ax = plt.subplots()
fig.patch.set_facecolor(back_color)
im = ax.imshow([[1e5,2e5],[0.1e5,1e5]])
ax.axis( 'off' )  # don't show the axes ticks/lines/etc. associated with the image
cb = plt.colorbar(im)
cb.formatter.set_scientific(True)
cb.formatter.set_powerlimits((0,0))
cbytick_obj = plt.getp(cb.ax, 'yticklabels' ) #Set y tick label color
plt.setp(cbytick_obj, color=fore_color)
cb.ax.tick_params(which = 'minor', length = 2, color = fore_color )
cb.ax.tick_params(which = 'major', length = 4, color = fore_color )
cb.ax.minorticks_on()
cb.update_ticks()
plt.show()
python matplotlib colorbar
1个回答
3
投票

您可以使用rcParams设置所需的颜色。

import matplotlib.pyplot as plt

background = 0
if background == 0:
  back_color='black'
  fore_color='white'
else:
  back_color='white'
  fore_color='black'

plt.rcParams["text.color"] = fore_color
plt.rcParams["axes.labelcolor"] = fore_color
plt.rcParams["xtick.color"] =  fore_color
plt.rcParams["ytick.color"] = fore_color

fig, ax = plt.subplots()
fig.patch.set_facecolor(back_color)
im = ax.imshow([[1e5,2e5],[0.1e5,1e5]])
ax.axis( 'off' )  # don't show the axes ticks/lines/etc. associated with the image
cb = plt.colorbar(im)
cb.formatter.set_scientific(True)
cb.formatter.set_powerlimits((0,0))

cb.ax.minorticks_on()
cb.update_ticks()
plt.show()

enter image description here

另请注意,matplotlib具有dark_background样式,这似乎与您尝试手动完成的操作非常相似。

import matplotlib.pyplot as plt

background = 0
if background == 0:
    plt.style.use("dark_background")

fig, ax = plt.subplots()

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

cb.ax.minorticks_on()
cb.update_ticks()
plt.show()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.