我正在尝试将颜色条添加到由两个具有相同宽高比的子图组成的图中,即set_aspect('equal'):

用于创建此图的代码可以在此IPython笔记本中找到.
使用下面显示的代码(以及笔记本中的代码)创建的图像是我可以获得的最佳结果,但它仍然不是我想要的.
plt.subplot(1,2,1)
plt.pcolormesh(rand1)
plt.gca().set_aspect('equal')
plt.subplot(1,2,2)
plt.pcolormesh(rand2)
plt.gca().set_aspect('equal')
plt.tight_layout()
from mpl_toolkits.axes_grid1 import make_axes_locatable
divider = make_axes_locatable(plt.gca())
cax = divider.append_axes("right", size="5%", pad=0.05)
plt.colorbar(cax=cax)
Run Code Online (Sandbox Code Playgroud)

这个问题似乎有关:
我试图在这里和这里主要使用代码colorbar为两个添加一个。matshow
我的代码如下,但是问题是颜色条会缓和右侧图的大小。我该如何预防?
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
# Generate some data that where each slice has a different range
# (The overall range is from 0 to 2)
data = np.random.random((2,10,10))
data *= np.array([1.5, 2.0])[:,None,None]
# Plot each slice as an independent subplot
fig, axes = plt.subplots(nrows=1, ncols=2)
for dat, ax in zip(data, axes.flat):
# The vmin and vmax arguments specify the color limits
im = …Run Code Online (Sandbox Code Playgroud) 这是一个非常小的问题,但我仍然无法弄清楚。我使用 imshow 和 matplotlib 来绘制颜色图 - 但结果是图形和标题没有对齐:
我用于情节的代码是:
fig, ax = plt.subplots(figsize=(27, 10))
cax1 = ax.imshow(reversed_df, origin='lower', cmap='viridis', interpolation = 'nearest', aspect=0.55)
ylabels = ['0:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00']
major_ticks = np.arange(0, 24, 3)
ax.set_yticks(major_ticks)
ax.set_yticklabels(ylabels, fontsize = 15)
xlabels = ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Jan17']
xmajor_ticks = np.arange(0,12,1)
ax.set_xticks(xmajor_ticks)
ax.set_xticklabels(xlabels, fontsize = 15)
fig.autofmt_xdate()
fmt = '%1.2f'
cb = plt.colorbar(cax1,fraction=0.046, pad=0.04, format=fmt)
cb.update_ticks
fig.suptitle('2016 Monthly Pressure Data (no Normalization) …Run Code Online (Sandbox Code Playgroud) 免责声明:一般而言,我对使用matplotlib和python经验不足。
这是我要制作的图:
使用GridSpec布局效果很好,但是当我尝试在每行的右侧添加一个颜色条时,它会更改相应子图的大小。这似乎是的一个众所周知且不可避免的问题GridSpec。因此,根据以下问题的建议:Matplotlib 2 Subplots,1 Colorbar
我决定使用来重新制作整个图ImageGrid。不幸的是,文档仅列出了选项,cbar_mode=[None|single|each]而我希望每行1个colobar。有没有办法在一个内部做到这一点ImageGrid?还是我必须制作2个网格并处理对齐的噩梦。
底部的第五个图呢?有没有办法以某种方式将其包括在图像网格中?
我看到此工作的唯一方法是将两个ImageGridS 嵌套GridSpec在1x3列中。这似乎过于复杂和困难,因此在我知道正确的方法之前,我不希望构建该脚本。
感谢您的帮助/建议!
我正在尝试创建一组散点图,并希望它们共享相同的颜色条。
我遵循了此处的指导,但它似乎仅适用于绘制对象具有自动缩放属性的图像。
我使用的代码如下:
import matplotlib.pyplot as plt
import numpy
import random
x = []
y = []
for i in range(100):
x.append(random.normalvariate(100,10))
y.append(random.normalvariate(100,10))
#Creates a list of length n
def getRand(n):
l = []
for i in range(n):
l.append(random.normalvariate(1,10))
return l
f = plt.figure()
f, axes = plt.subplots(nrows = 2, ncols = 2, sharex=True, sharey = True)
axes[0][0].scatter(getRand(100),getRand(100), c = getRand(100), marker = "x")
axes[0][0].set_xlabel('Crosses', labelpad = 5)
axes[0][1].scatter(getRand(100),getRand(100), c = getRand(100), marker = 'o')
axes[0][1].set_xlabel('Circles', …Run Code Online (Sandbox Code Playgroud) 更新:我现在得到了正确位置的子图并显示了正确的数据!然而,还有一个问题,那就是我不能给子图自己的标题和颜色条。实际上,我宁愿在所有图的右侧只有一个颜色条,但这似乎也不起作用。这是我的新代码以及一些示例数据(非常没有洞察力,但仅用于测试目的):
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import cartopy.crs as ccrs
lons = np.arange(-180,180,1)
lats = np.arange(-80,80,1)
dens = np.zeros((12, len(lons), len(lats)))
for i in range(12):
dens[i,:,:] = i
def plotTitle(yr):
letter = chr(yr-2002+97)
return '(' + letter + ') ' + str(yr)
def DensityPlot(yr, lon, lat, dens, ax):
Lat, Lon = np.meshgrid(lat, lon)
density = ax.pcolormesh(Lon, Lat, dens, cmap = 'jet')
#cbar = ax.colorbar(density, orientation='vertical', shrink=0.5, extend='both') # this gives an error: …Run Code Online (Sandbox Code Playgroud) 我想在一个图中创建多个(此处:两个)seaborn 热图,其中热图具有不同的值范围,但应包含一个共享的图例。
以下代码在一个图中创建了两个热图,但两个图的颜色编码不同。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(np.random.random((4,4)))
df2 = pd.DataFrame([1., .5, .9, .6])
fig, ax = plt.subplots(ncols=2, sharey=True)
sns_g = sns.heatmap(df, annot=True, yticklabels=True, ax=ax[0])
sns_g2 = sns.heatmap(df2, annot=True, cbar=False, ax=ax[1])
# fig.subplots_adjust(right=0.6)
# cbar_ax = fig.add_axes([1.1, 0.15, 0.05, .77])
# fig.colorbar(ax[1], cax=cbar_ax)
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
我在 sns_g 中包含 cbar=True 只是为了表明两个图例代表不同的范围。我想明确创建两个图。
使用 matplotlib.pyplot,我有两个图。一种是音频文件的波形。第二个是同一音频的频谱图。我希望波形位于频谱图的正上方(相同的 x 轴,并对齐在一起)。我还想要一个频谱图的颜色条。
问题 - 当我放入颜色条时,它附加到频谱图行,并且波形在颜色条上延伸(即不再与频谱图时间对齐并且比频谱图更宽)。
我想,我已经接近解决方案了,但我只是不太清楚我做错了什么,或者需要改变什么才能让它按照我想要的方式工作。希望有人能指出我正确的方向!
使用以下 python 代码(我尽可能将代码设为 MWE):
import matplotlib
matplotlib.use("TkAgg")
from scipy.io import wavfile
from matplotlib import mlab
from matplotlib import pyplot as plt
import numpy as np
from numpy.lib import stride_tricks
samplerate, data = wavfile.read('FILENAME.wav')
times = np.arange(len(data))/float(samplerate)
plt.close("all")
####
#Waveform
####
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(13.6, 7.68))
plt.subplot(211)
plt.plot(times, data, color='k')
plt.xlabel('time (s)')
plt.xlim(times[0], times[-1])
max_amp = max(abs(np.amin(data)), abs(np.amax(data)))
min_amp = (max_amp * -1) - abs(np.amin(data) - np.amax(data))/50
max_amp = max_amp + …Run Code Online (Sandbox Code Playgroud) 我有这样的直方图(就像普通的直方图一样):

在我的情况下,总共有20个条形(从0到1跨越x轴),条形的颜色是根据x轴上的值定义的.
我想要的是添加一个颜色光谱,如直方图底部的http://wiki.scipy.org/Cookbook/Matplotlib/Show_colormaps中的一个,但我不知道如何添加它.
任何帮助,将不胜感激!
这是我第一次发帖!
我正在使用Calalap绘制漂亮的日历图来分析一些数据。日历图正在使用颜色图显示天之间的对比。我的问题是,calap不能提供友好的工具来显示与日历图关联的色条。我想知道你们中的一个是否对此有解决方案。理想的情况是为整个图形而不只是一个轴设置颜色条。
Calentap的文档:http ://pythonhosted.org/calmap/
import pandas as pd
import numpy as np
import calmap # pip install calmap
%matplotlib inline
df=pd.DataFrame(data=np.random.randn(500,1)
,index=pd.date_range(start='2014-01-01 00:00:00',freq='1D',periods =500)
,columns=['data'])
fig,ax=calmap.calendarplot(df['data'],
fillcolor='grey', linewidth=0,cmap='RdYlGn',
fig_kws=dict(figsize=(17,8)))
fig.suptitle('Calendar view' ,fontsize=20,y=1.08)
Run Code Online (Sandbox Code Playgroud)
镇静图示例
我正在尝试绘制一个图,其中所有子图都共享类似于此答案的色标。我遇到的问题是在脚本中,我正在调用一个函数,该函数创建QuadMesh(从生成ax.pcolormesh)实例并返回与之关联的Figure和Axes实例。有什么方法可以从Axes实例(或Figure实例)获取QuadMesh实例的句柄?
import matplotlib.pyplot as plt
import numpy as np
def foo(subplot):
data = np.random.random((100,100))
x,y = np.meshgrid(np.arange(101),np.arange(101))
fig = plt.gcf()
ax = fig.add_subplot(subplot)
quadmesh = ax.pcolormesh(x,y,data)
return fig,ax
fig = plt.figure()
f,a = foo(221)
f,a = foo(222)
f,a = foo(223)
f,a = foo(224)
fig.subplots_adjust(right=0.8)
cbar_ax = fig.add_axes([0.85,0.15,0.05,0.7])
#fig.colorbar(magic_get_quadmesh,cax=cbar_ax)
plt.show()
Run Code Online (Sandbox Code Playgroud) I\xc2\xb4ve 遇到以下问题,即我的颜色条覆盖了“打印”为 pdf 的纸质子图。
\n\n代码示例:
\n\nimport numpy as np\n\nimport matplotlib.pyplot as plt\n\nimport pandas as pd\n\nif __name__ == \'__main__\':\n\n titles = np.random.uniform(low=1, high=11, size=(1,10))\n temp = np.random.uniform(low=23, high=200, size=(10,10))\n ctf0102 = np.random.uniform(low=23, high=200, size=(10,10))\n ctf03 = np.random.uniform(low=23, high=200, size=(10,10))\n\n fig = plt.figure(figsize=(11.69,8.27), dpi=100)\n\n for num in range(len(titles)):\n\n ax = fig.add_subplot(3,4,num)\n\n im = ax.scatter(ctf03[1:,num], ctf0102[:,num], 12, temp[:,num], cmap=\'magma\')\n\n ax.set_title(titles[num])\n\n\n fig.text(0.5, -0.00, \'...\', ha=\'center\', fontsize=16)\n\n fig.text(-0.00, 0.5, \'...\', va=\'center\', rotation=\'vertical\', fontsize=16)\n\n cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])\n fig.colorbar(im, cax=cbar_ax)\n\n plt.tight_layout(pad=2)\n\n fig.savefig("example.pdf", …Run Code Online (Sandbox Code Playgroud) 我在一行中有一系列子图,所有子图共享相同的颜色条,我想使用plt.tight_layout().
然而,当天真地使用时,颜色条会把一切搞乱。幸运的是,我在 matplotlib 文档中找到了这一点,但它仅适用于一个子图。
我尝试使其适应多个子图,但分配颜色条的子图最终变得更小。
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
plt.close('all')
arr = np.arange(100).reshape((10, 10))
fig, ax = plt.subplots(ncols=2, figsize=(8, 4))
im0 = ax[0].imshow(arr, interpolation="none")
im1 = ax[1].imshow(arr, interpolation='none')
divider = make_axes_locatable(plt.gca())
cax = divider.append_axes("right", "5%", pad="3%")
plt.colorbar(im0, cax=cax)
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)
这就是结果的样子。