简体   繁体   English

在python matplotlib中将轴添加到colorbar

[英]Add axis to colorbar in python matplotlib

I am trying to produce a figure like the following in python: 我试图在python中生成如下图:

在此输入图像描述

I am done with most part of it and currently based on what I want it looks like this: 我完成了它的大部分内容,目前基于我想要的样子:

在此输入图像描述

And my code is: 我的代码是:

plt.scatter(x,y,marker="h",s=100,c=color)
plt.xscale('log')
plt.yscale('log')
plt.xlim([1, 10**3])
plt.ylim([1, 10**3])
plt.colorbar()
plt.show()

Is there any way to make the current colorbar look like the one on top? 有没有办法让当前的colorbar看起来像顶部的那个? So to make it smaller and add axis to it? 那么要缩小它并添加轴吗?

Any help would be much appreciated. 任何帮助将非常感激。

The key here is the cax kwarg to colorbar . 这里的关键是cax kwarg到colorbar You'll need to create an inset axes, and then use that axes for the colorbar. 您需要创建插入轴,然后将该轴用于颜色条。

As an example: 举个例子:

import numpy as np
import matplotlib.pyplot as plt

npoints = 1000
x, y = np.random.normal(10, 2, (2, npoints))

fig, ax = plt.subplots()
artist = ax.hexbin(x, y, gridsize=20, cmap='gray_r', edgecolor='white')

# Create the inset axes and use it for the colorbar.
cax = fig.add_axes([0.8, 0.15, 0.05, 0.3])
cbar = fig.colorbar(artist, cax=cax)

plt.show()

在此输入图像描述

If you wanted to get fancy and more precisely match things (Note: I'm using hexbin here, which doesn't support log axes, so I'm leaving that part out.) 如果你想得到更精确和更精确匹配的东西(注意:我在这里使用hexbin,它不支持日志轴,所以我要离开那部分。)

import numpy as np
import matplotlib.pyplot as plt

npoints = 1000
x, y = np.random.normal(10, 2, (2, npoints))

fig, ax = plt.subplots()
artist = ax.hexbin(x, y, gridsize=20, cmap='gray_r', edgecolor='white')

cax = fig.add_axes([0.8, 0.15, 0.05, 0.3])
cbar = fig.colorbar(artist, cax=cax)

ax.spines['right'].set(visible=False)
ax.spines['top'].set(visible=False)
ax.tick_params(top=False, right=False)

cbar.set_ticks([5, 10, 15])
cbar.ax.set_title('Bin Counts', ha='left', x=0)
cbar.ax.tick_params(axis='y', color='white', left=True, right=True,
                    length=5, width=1.5)
cbar.outline.remove()

plt.show()

在此输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM