我花了太多时间研究如何在Matplotlib
中使用两个颜色共享的单个颜色条来使两个子图共享相同的y轴。
发生的是,当我colorbar()
在subplot1或
中调用函数时subplot2
,它将自动缩放绘图,以使颜色栏和绘图可以放入“子图”边界框内,从而导致两个并排的绘图有两个截然不同的情况大小。
为了解决这个问题,我尝试创建第三个子图,然后黑客入侵它,仅用一个色条就不渲染任何图。唯一的问题是,现在两个图的高度和宽度是不均匀的,我不知道如何使它看起来还不错。
这是我的代码:
from __future__ import division
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import patches
from matplotlib.ticker import NullFormatter
# SIS Functions
TE = 1 # Einstein radius
g1 = lambda x,y: (TE/2) * (y**2-x**2)/((x**2+y**2)**(3/2))
g2 = lambda x,y: -1*TE*x*y / ((x**2+y**2)**(3/2))
kappa = lambda x,y: TE / (2*np.sqrt(x**2+y**2))
coords = np.linspace(-2,2,400)
X,Y = np.meshgrid(coords,coords)
g1out = g1(X,Y)
g2out = g2(X,Y)
kappaout = kappa(X,Y)
for i in range(len(coords)):
for j in range(len(coords)):
if np.sqrt(coords[i]**2+coords[j]**2) <= TE:
g1out[i][j]=0
g2out[i][j]=0
fig = plt.figure()
fig.subplots_adjust(wspace=0,hspace=0)
# subplot number 1
ax1 = fig.add_subplot(1,2,1,aspect='equal',xlim=[-2,2],ylim=[-2,2])
plt.title(r"$\gamma_{1}$",fontsize="18")
plt.xlabel(r"x ($\theta_{E}$)",fontsize="15")
plt.ylabel(r"y ($\theta_{E}$)",rotation='horizontal',fontsize="15")
plt.xticks([-2.0,-1.5,-1.0,-0.5,0,0.5,1.0,1.5])
plt.xticks([-2.0,-1.5,-1.0,-0.5,0,0.5,1.0,1.5])
plt.imshow(g1out,extent=(-2,2,-2,2))
plt.axhline(y=0,linewidth=2,color='k',linestyle="--")
plt.axvline(x=0,linewidth=2,color='k',linestyle="--")
e1 = patches.Ellipse((0,0),2,2,color='white')
ax1.add_patch(e1)
# subplot number 2
ax2 = fig.add_subplot(1,2,2,sharey=ax1,xlim=[-2,2],ylim=[-2,2])
plt.title(r"$\gamma_{2}$",fontsize="18")
plt.xlabel(r"x ($\theta_{E}$)",fontsize="15")
ax2.yaxis.set_major_formatter( NullFormatter() )
plt.axhline(y=0,linewidth=2,color='k',linestyle="--")
plt.axvline(x=0,linewidth=2,color='k',linestyle="--")
plt.imshow(g2out,extent=(-2,2,-2,2))
e2 = patches.Ellipse((0,0),2,2,color='white')
ax2.add_patch(e2)
# subplot for colorbar
ax3 = fig.add_subplot(1,1,1)
ax3.axis('off')
cbar = plt.colorbar(ax=ax2)
plt.show()
只需将颜色条放置在其自己的轴上并用于为其留subplots_adjust
出空间。
作为一个简单的例子:
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=2)
for ax in axes.flat:
im = ax.imshow(np.random.random((10,10)), vmin=0, vmax=1)
fig.subplots_adjust(right=0.8)
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])
fig.colorbar(im, cax=cbar_ax)
plt.show()
在此处输入图片说明
请注意,im即使值的范围由vmin
和设置,颜色范围也将由最后绘制的图像(产生)设置vmax
。例如,如果另一个图的最大值更高,则比max的最大值更高的点im将以均匀的颜色显示。
我有4个图标在底部栏在我的应用程序,我需要改变颜色的图标从灰色到白色,我遵循这个问题,但当我按任何图标所有图标改变颜色在同一时间,我需要当按例如(主页)图标只按(主页)图标。 我怎么能这么做?? 代码:
我正在尝试将一个十六进制值转换为一个int,这样我就可以创建一个新的彩色绘图。我不确定这是否可能,但根据文档,这是应该的。它很明显地要求
问题内容: 假设我要在CSS中渲染箭头,箭头应具有头部,尾部和灵活的宽度,以便可以包含文本。我当然可以创建多个div来获得所需的内容,但是如何在CSS3中完成呢? 我可以使用多个背景图片: 的HTML: 这给了我一个带有箭头和尾巴的透明中间部分。似乎不可能在中间部分指定颜色。 仅使用一张背景图像,您可以执行以下操作: 我知道这在很多方面都是可行的,但是背景颜色属性是否真的从速记定义中丢失了? 问题
我正在做一个简单的绘画程序。 我正在绘制一个自定义位图,然后用onDraw方法将这个位图绘制到画布上。 自定义位图和画布创建: 当有人触摸屏幕时,会画一个圆圈: 这很好,但每次在屏幕上绘制位图时,每个圆都有相同的颜色(绘制当前颜色): 所以如果我有一个红色的圆圈,将颜色更改为蓝色并绘制另一个圆圈,位图中的两个圆圈都是蓝色的。为什么会这样?我该如何解决这个问题?
本文向大家介绍Python 实现一个颜色色值转换的小工具,包括了Python 实现一个颜色色值转换的小工具的使用技巧和注意事项,需要的朋友参考一下 需求说明 公司的 UI 设计小哥,已经转用 Zeplin 很久了。Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的,在 Android 中的颜色表示大多情况下都需要十六进制的 RGB 表示。我的数学没有好到直接看到十进制就可
问题内容: 我想打开jpeg图像文件,对其进行编码,更改一些像素颜色,然后将其保存回原样。 我想做这样的事情 我只是想不出一个可行的解决方案,因为编码图像文件后获得的默认图像类型没有Set方法。 谁能解释该怎么做?非常感谢。 问题答案: 成功解码后(以及特定的解码功能,如),返回的值。是一个接口,用于定义图像的只读视图:它不提供更改/绘制图像的方法。 该软件包提供了几种实现方式,这些实现方式通常允