gpt4 book ai didi

python - Matplotlib Colorbar 更改刻度标签和定位器

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:11 25 4
gpt4 key购买 nike

我想更改下图中颜色栏中的刻度定位器和标签。

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import dates as mdates
import numpy as np

# fontdict to control style of text and labels
font = {'family': 'serif',
'color': (0.33, 0.33, 0.33),
'weight': 'normal',
'size': 18,
}

num = 1000
x = np.linspace(-4,4,num) + (0.5 - np.random.rand(num))
y = np.linspace(-2,2,num) + (0.5 - np.random.rand(num))
t = pd.date_range('1/1/2014', periods=num)

# make plot with vertical (default) colorbar
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(6, 6))
ax.set_title('Scatter plot', fontdict=font)

# plot data
s = ax.scatter(x = x, y = y,
s=50, c=t, marker='o',
cmap=plt.cm.rainbow)

# plot settings
ax.grid(True)
ax.set_aspect('equal')
ax.set_ylabel('Northing [cm]', fontdict=font)
ax.set_xlabel('Easting [cm]', fontdict=font)

# add colorbar
cbar = fig.colorbar(mappable=s, ax=ax)
cbar.set_label('Date')

# change colobar ticks labels and locators
????

颜色条说明了时间依赖性。因此,我想将刻度从它们的数值(纳秒?)更改为更合理的日期格式,如月份和年份(例如 %b%Y 或 %Y-%m),其中间隔可以是例如 3 或 6个月。这可能吗?

我尝试使用 cbar.formatter、cbar.locator 和 mdates 播放失败。

最佳答案

您可以保留 colorbar 函数建议的相同定位器,但更改刻度标签以打印格式化日期,如下所示:

# change colobar ticks labels and locators 
cbar.set_ticks([s.colorbar.vmin + t*(s.colorbar.vmax-s.colorbar.vmin) for t in cbar.ax.get_yticks()])
cbar.set_ticklabels([mdates.datetime.datetime.fromtimestamp((s.colorbar.vmin + t*(s.colorbar.vmax-s.colorbar.vmin))/1000000000).strftime('%c') for t in cbar.ax.get_yticks()])
plt.show()

结果如下:formatted dates as colorbar ticks

如果你真的想控制刻度位置,你可以计算所需的值(这里大约间隔 3 个月~91.25 天):

i,ticks = 0,[s.colorbar.vmin]
while ticks[-1] < s.colorbar.vmax:
ticks.append(s.colorbar.vmin+i*24*3600*91.25*1e9)
i = i+1
ticks[-1] = s.colorbar.vmax
cbar.set_ticks(ticks)
cbar.set_ticklabels([mdates.datetime.datetime.fromtimestamp(t/1e9).strftime('%c') for t in ticks])

关于python - Matplotlib Colorbar 更改刻度标签和定位器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42749741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com